Do not develop an attachment to any one weapon or any one school of fighting
Those are the words of Miyamoto Musashi — a 17th-century samurai who according to legend defeated 60 men in deadly sword duels. And even if Musashi never wrote software I think he is relevant to this craft and not just the brutal and deadly art of swordsmanship. Alistair Cockburn refers to Musashi in his excellent book “Agile Software Development”.
Musashis rules where:
- Do not develop an attachment to any one weapon or any one school of fighting.
- Practice and observe reflectively.
My take on the first rule is that the development community is as ridden by dogma as any community. There are blog posts saying that a certain kind of database, language or paradigm should always or never be used. Try to not be influenced by that. Learn and use different tools and techniques where appropriate.
The second rule is very important and one that many developers get wrong. Developing is just as much about reflecting as it is about practice. Don’t spend hours of coding before you are sure you really understand the problem. If you do, you are likely to afterwards rationalize that you have solved the problem in a good way since you put in all those hours developing, even if you haven’t. And there are so many libraries, frameworks and platforms available that can help you and shave of weeks and even months of your coding time. Spend some time researching those. On the other hand you should always try theories in practice before you move on. Assumptions are the root of evil just as much as premature optimization. Always try things out as soon as possible.
The third means that software is not about things like fancy code or module testing. It’s about solving a real problem in a correct way. It doesn’t matter if your app is following all the latest architectural best practices and is super snappy. If the users don’t like it, or it’s too costly to maintain you have still lost. Win.