There is a common thought in entrepreneur circles that greatness isn’t defined by what you say yes to, but what you say no to. This rings true in many domains but in software it can become a way of life. In software, the build vs buy challenge is fraught with strong opinions either way. There are a lot of incredibly smart engineers that can build almost anything given the right resources.
Abstraction is a powerful tool. Some of the greatest inventions in technology: operating systems, programming languages, compilers, etc. are abstractions. However, when misused or misunderstood, they can be destructive.
Over abstraction can create unmaintainable, untestable monstrosities. Under abstraction may mean duplicate code, but duplicate code is almost always better than unmaintainable code.
Most personal development books will tell you to set goals and work towards those consistently.
Consistency forms habits and creates progress towards goals no matter how small.
There’s an often-quoted statistic that if you do 1% a day or get 1% better you are 37.78x closer to your goal or improved as a person.
In software and in life, you are what you measure.
If you measure velocity, your team will optimize for delivery. If you measure code quality, you will optimize for that.
You must have both measures and countermeasures to ensure that teams stay on track and don’t stray too far in one direction.
Your time is limited, and because of this, you have limited things - whether that is money, achievement or in the case of software: features, documentation, tests, etc.
You must pick what is important to you and work on that. This means choosing the most needed features, the most impactful tech debt, and the most critical tests.
Software Principle #1: Earn your complexity
Complexity is everywhere. In every domain, under ever rock, lies something that requires years of experience to fully understand.
In software development, we learn about these complexities and try to model them using computer languages in our best guess efforts. The thing is though: very rarely are engineers domain experts.
Information technology expenditure worldwide is currently at 3.7 trillion dollars, with growth that outpaces the GDP growth rate of many nations [^1]. Digital transformation for businesses is targeted to hit 2.2 trillion dollars by 2022 [^2]. It has a daily impact on most, if not all lives, in all developed countries. Software is quite literally eating the world.
There is still so much incredible waste where in a recent study a staggering 68% of all IT projects fail [^3]. 70% of executives in the Fortune 500 believe that their technology projects will fail, and the sad part is that they aren’t wrong to believe that.