So that's scaling the team. Now, how do you scale the tech? Don't think too hard about the tech. The tech is kind of the easiest part of scaling a business. For the most part, you're just solving known problems with known solutions.
This is in How Big Things Get Done. This is a really good book. It's not about software engineering, but it's about large-scale engineering projects. It talks about how China is able to ship a bazillion bridges and power plants per year, whereas the USA isn't. The main factor they talk about is that in China, they have like ten standard designs for everything, and then the engineers come in, look at the situation, and just pick the most appropriate design to apply to that situation, and then here's the thing.
They tweak the situation to fit the design. They don't tweak the design of an off-the-shelf component to fit the situation. It's the other way around. Change the problem so it fits the solution you already have, and that way you can build much faster and you're saving your innovation tokens for the things that are actually new and differentiating in your company. Which brings us to just solve the problem, not a different, more difficult problem. The hardest thing to do in software engineering is to build a generic solution, especially when all you have is a specific problem.
It is generally a good idea, or rather I'll say it this way. The older I get, the more my code looks like a very simple step-by-step process. It doesn't impress anyone. It's super boring to look at, and personally, I think the biggest compliment you can get on your code is when somebody looks at it and goes, wait, that's it? Damn right, that's it. It is simple, it's easy to understand, and it's easy to maintain. Because you always have to push back on complexity. Engineering is an endless fight against complexity, and sometimes that means saying no to an architecture astronaut who's trying to build a generic framework to solve a problem forever when you just need, you know, we need to ship this code tomorrow, we don't even know yet what we're building in ten days, and you're trying to build a framework.
Just fix the problem, solve it, and move on. And this also means that, again, because you understand your domain, because you have long-term ownership of the stuff you're building, you can push back on your product as well, on your product managers. Very often, you have like one requirement that blows up the entire story and makes it way harder than it needs to be. You can usually push back on your PM and be like, hey, this one thing is making our work a lot harder, and they'll go, oh, yeah, shit, no, we don't actually need that, we don't care. Just drop that requirement and now you can use a very simple solution. And where most complexity comes from in a software engineering project is not actually the code you're writing, it's the architecture you're creating. If you think about your code as a series of interconnected boxes, the boxes are like your code, those are classes, modules, services, whatever you want to call them, and the lines are how they talk to each other. The more connected these lines are, the more intertwined everything gets, the more complex it is.
Comments