3 ms·
Hey Kevin! Yeah, one of the things I've learned with age (and am still working on, probably a lifelong project) is tempering that voice. My memory is that we
by dbingham 4y ago
Hey Kevin! Yeah, one of the things I've learned with age (and am still working on, probably a lifelong project) is tempering that voice.
My memory is that we didn't really know what those things might be and had no real way to find them out. But I could easily be misremembering.
It's one of the things I really appreciate about my current role - we have sales, marketing, product, and design functions responsible for figuring out what to build (which we offer input into), but largely, in engineering, we can trust they're doing a good job and just figure out how to build it. We definitely still have our techdebt, but we manage it very intentionally - where that sometimes means intentionally leaving it in place and adding to the ball of duct tape because we can't unwind it now. But it's never reached the point of becoming systematic. Our worst techdebt is tucked into corners where the unintended consequences caused by touching it can't reach too far.
I feel like it's a really good balance, take on techdebt intentionally, don't let it get systematic, and pay it off intentionally when you can.
With EllisLab, a more piecemeal approach very well may have been the right one. How do you think we should have approached it? EE was so tightly coupled through those singletons at the time - maybe singleton wrappers around subsystems, taking one at a time as features touched them? What features do you think we should have focused on? I'd be really interested in hearing more of your perspective on EllisLab before and post Craft. You lasted a lot longer than I did and probably have a lot more insight and thoughts!
- kevincupp 4y ago> My memory is that we didn't really know what those things might be and had no real way to find them out. Haha yeah this is basically what happened. I don't want to get too far into the weeds on a public forum, but in general, the suggestion of market research was initially met with resistance. I think they came around to the idea eventually but it was too late. > I feel like it's a really good balance, take on techdebt intentionally, don't let it get systematic, and pay it off intentionally when you can. That's a great summary. Stop the systems that create the debt by learning to separate concerns or discouraging other anti-patterns, and only take out debt if the trade-offs make sense and hopefully have a plan to pay it off. > With EllisLab, a more piecemeal approach very well may have been the right one. How do you think we should have approached it? I think were going in the right direction with the Relationships parser and later the new conditionals parser, they were very object-oriented and easily testable, and weren't too coupled with persistence or presentation concerns like the typical patterns of just putting everything in a library or controller, but not all of us were skilled enough to keep doing that. I feel like later on we naturally started using patterns like you see in Working Effectively with Legacy Code in order to keep newer code testable and easier to maintain, and then plugging those things into legacy where they were needed. These days, my bias is to fit things into Hexagonal Architecture so if it were me now, I would try to decompose the various major areas into loosely-coupled modules bound by well-defined interfaces, and the internals of those modules would be highly cohesive. You can kind of work towards this piecemeal as you work on various features but there's an awkward in between phase that can last for years on complex domains. > EE was so tightly coupled through those singletons at the time - maybe singleton wrappers around subsystems, taking one at a time as features touched them? Yeah maybe, we eventually made a solution for the `$db` singleton by making it so you could just ask for a new instance every time, that way no other code could mess with your in-progress query-building. I'd bet most of the classes that were singletons didn't have to be that way and we could just make new instances when we needed them. They were probably only singletons because it was convenient access and looked magic in CodeIgniter, and most of us were so green that we didn't know better. > What features do you think we should have focused on? Probably the things people asked for for years that Craft launched with and Packet Tide is now adding. We did come around to things like Live Preview and Fluid fields there towards the end but like I mentioned earlier, at a certain point it was too late. The market had gotten away from us and the community was fractured. > I'd be really interested in hearing more of your perspective on EllisLab before and post Craft. You lasted a lot longer than I did and probably have a lot more insight and thoughts! Sure feel free to reach out on Facebook if you want, I think we're still connected here. Yes I was there for too long.