|Sherman Tank (Wikimedia Commons)|
The History Channel produced an insightful documentary comparing the American Sherman tank with the German Panzer tank in WWII combat. The lesson that follows is valuable for any professional software engineer.
Sherman vs Panzer
The Panzer was a tank to be feared by the Americans: it was designed to high German engineering standards, had nearly impenetrable front armor and fired a canon with such velocity that it could easily annihilate the Sherman tank. Stacked up next to the Sherman, the Panzer was the clear victor.
The Sherman, though, had one overwhelming advantage that the Panzer did not: ease of production. The United States was able to out-manufacture the Germans by a ratio of 2 Sherman tanks to each Panzer. This singular advantage turned out to be decisive for the Allies.
The Germans engineered a superior machine at the cost of taking longer to manufacture. This ensured defeat when outnumbered by the more plentiful Allied Sherman tanks.
Implications for Software Development
What does this have to do with software development? Ask yourself: How much time am I spending engineering the perfect piece of code? I bet it is too much. If you aren't careful, the increased time to market will allow a competitor to manufacture a Sherman that will make you irrelevant in your market.
This isn't an argument for sloppy design. We should follow best practices like coding to interfaces, using abstractions sparingly, separation of concerns, etc. There's a point, though, where your design is good enough and time to market is more valuable than a technically superior piece of code that is late due to over-engineering.
So I ask, is your code more like a Sherman or is it more like a Panzer tank?