In a great book “A philosophy of software design” John Ousterhout points out that software engineering is not only about quick delivery of digital products. He stresses the importance of long-term perspective – strategic programming. This idea is well known at least since Clean Code, but still somehow ignored. For some reason, many view refactoring or improving code structure as merely a fanciful dream of coders chasing perfection.
It’s the opposite. It’s a necessity if we don’t want the project to collapse.
“The most important thing is the long-term structure of the system. (…) Your primary goal must be to produce a great design, which also happens to work” – says Ousterhout.
It doesn’t mean we should chase beauty and not deliver. It means we must remember that delivering poorly structured code will soon – much sooner than most of us think – cause issues.
POCs become MVPs, MVPs become products, products start earning money, they need scaling, and new features… and boom – suddenly company needs 5 developers to slowly implement new functionalities and perform basic maintenance of an application which was written by one intern in two months.
The inception of a project should always be the most appreciated and well-planned stage. Like pregnancy. We don’t drink, smoke and party in the 1st trimester just to eat whole foods in 8th month – but it’s exactly what we do with code of our IT projects often. We do whatever in the first stage, and then when it’s too late we bring the best engineers to save it.
Remember, engineers: strive to create the best designs possible. Our lives depend on it!