I recently went to a talk by @mikeonads about Adserving and Scalability. I went prepared to hear about the technical bits of scaling and to do a compare/contrast of some of the challenges that the ad industry faces versus high-volume search (where I have been spending most of my cycles lately.)
Surprisingly, Mike did not lead with that. He walked through a bit of the biz case and the evolution of the industry. Then he presented 3 areas where as you build a team at scale that you run into, namely growth in:
- complexity of your application
- number of developers
- number of customers
As you are successful, the growth of each of these grows linearly. Together, they can cause an exponential increase in complexity. The blank slate you begin with as a startup quickly becomes cluttered by this complexity. The ease and agility that you can move with to create that first prototype, starts to become encumbered.
Good software engineers keep an eye out for when it is time to refactor and make things simple once again. They take all the learning, the failed experiments, and incorporate them into a new, sleeker approach.
Team-wide, as your startup grows, refactoring to keep things simple is an approach that keeps complexity in check, and retains some of the early-days ability to get things done.