I’ve been growing software program for a few years now. Many years. I’ve discovered loads alongside the best way, and I dare to suppose that I’ve collected some knowledge about software program growth value sharing with others. Sooner or later, you suppose “Yeah, I’ve bought a grip on this factor.”
And each every now and then, you might have some revelation that’s the fruits of what you’ve discovered alongside the best way. I’ll always remember the second I understood dependency injection. Of course you’ll wish to move in an abstraction moderately than create an implementation!
I had an identical revelation this week. I’m certain there are many sager builders amongst you who’ve already figured this out, but it surely struck me all of the sudden that actually good software program design is all about preserving your choices open for so long as doable—that you must defer any selections to the final minute.
Now, this appears counter-intuitive. We’ve all the time been advised to plan all the things out forward of time. That we shouldn’t begin the undertaking with out having considered each element that may be considered. That we have to determine it out now so there are not any surprises.
I can simply think about the dialog:
Engineering director: “How’s the planning occurring the brand new undertaking?”
Growth lead: “Nice, we’re able to get began.”
Engineering director: “What database did you decide?”
Growth lead: “Haven’t determined but.”
Engineering director: “Authentication?”
Growth lead: “Not but.”
Engineering director: “Wait… what?!”