A Note to Business Leaders on Software Engineering
Software developers are interchangeable. A software developer with a computer science degree will produce the same quality of work as any other software developer with a computer science degree. It makes business sense to hire cheap programmers and put in place a standard process.
If that sounds like something you would say or think, then your perception of software development is severely detrimental to the health of your business.
Productivity of software teams, over the short and long-term, can vary by many orders of magnitude. If you focus on what is easy to measure — costs — you will get exactly what you pay for…low-performing software teams. You will be handing the initiative to your competitors who invested in their software development capabilities and are out-innovating you as a result.
As a business leader, you should be asking three questions:
- Why is software development more complex than I thought?
- How do I create high performing teams to out-innovate the competition?
- What do I measure?
Simply being humble enough to ask yourself these questions puts you at an advantage to many business leaders. Will you also be humble enough to seek out the answers and act upon them?
Why is Software Development More Complex and Than I Thought?
Software development is not an established discipline where there is a clear technique used to solve any given problem. In fact, there are near infinite ways to solve every software engineering challenging. Some solutions will literally be many orders of magnitude more beneficial, or costly, to your business.
The benefits you are looking for are speed and sustainability. Delivering faster:
- Keeps you ahead of the competition
- Allows you to monetise/leverage your innovations sooner
- Reduces customer feedback cycles, accelerating product innovation
Sustainability means being able to deliver at a consistent pace indefinitely to retain these benefits. However, as software systems age, the time it takes to add new features grows exponentially — and business innovation speed plummets.
Producing software which gets harder and harder to improve is so widespread that most people think entropy is a natural and unavoidable consequence of software development. However, it definitely is not.
The ability to create high quality software which can sustainably be developed at a competitive pace is an advantage that separates high performing teams from low performing teams. And the ability to create sustainable code is a skill that separates good software engineers from mediocre software engineers.
The costs of entropy in software systems cannot be over-emphasised. A feature that takes 2 days to implement in a new codebase can take 2 months to implement in a 1 year old codebase which has been developed by a low-performing team who do not understand how to create sustainable software.
In a high performing team which does understand how to create sustainable software, a feature which takes 2 days to implement in a new codebase would still take just 2 or 3 days to implement 1, 2, or 5 years later.
Strong software engineering teams will focus on solving business problem with the simplest, most sustainable code in the shortest possible time.
As a business leader, one of your key priorities is ensuring that you have software engineering teams who are producing high quality, sustainable software. The payback to your business will be orders of magnitude greater productivity and innovation.
How do I Create High Performing Teams to Out-innovate the Competition?
Creating high quality, sustainable code requires high levels of engagement from software engineers. They need to feel a strong purpose for what they are building, they need the autonomy to continually improve their ways of working, and they need the feeling of mastery.
Programmers do not produce their best work when they are under high levels of pressure and barely respected as humans. Treating software engineers well is vital if you want them to deliver high quality code that provides your business with a competitive advantage.
As a business leader, this means that you need to make software engineering teams feel part of the business and confer them the freedom to solve business problems how they determine is best.
A lot of their ways of working will seem counter-intuitive to you. You will worry that they are wasting time or not working efficiently. This is natural, yet this is also a big problem. Until you can trust them as experts in software engineering and allow them to work how they want to, you will be the constraint holding them and your organisation back.
Your concerns are natural, and your opinions are still valid. As a business leader, the onus is on you to understand how your software teams are working so that you can learn to trust them. By doing so, you will create a relationship where they can trust you in return. The partnership will be formidable.
Good teams will employ practices that you don’t understand. Mob programming is a great example. As a business leader you would be horrified to think that 5 programmers are sitting around one screen and a keyboard programming together. Why are we paying 5 programmers to do the job of 1 programmer?
This is where you need to dig deep, put your assumptions to one side, and understand the world of software engineering.
Mob programming has powerful benefits in helping teams to deliver software sustainably. Five people working closely together may seem wasteful, yet it results in stronger teams and more sustainable code which can be orders of magnitude more productive in the long-term.
As a business leader, try starting with the following small steps to better understand your software engineers:
- Have regular 1:1s with engineering leaders
- Ask engineers to explain their software development culture and practices and how they support sustainable software development
- Ask your engineering teams to provide regular demos of the business value they are delivering and the business metrics they are improving
Unfortunately, there is one unavoidable problem. Not all engineering leaders are capable of building high performing teams because they don’t have the experience of working with high performing teams.
Here are some tips of the characteristics you can look for in engineering leaders you can trust to build strong teams:
- They are primarily focused on improving business metrics
- They strive for continuous improvement and do not simply adopt an off-the-shelf process like Scrum
- They care about creating an environment where software engineers have purpose, autonomy and mastery
How to Measure Software Engineering Teams?
Lines of code, story points, and hours worked are terrible techniques which you should not even consider using as measurements for software engineering teams. Instead, you should adopt the DORA (DevOps Research and Assessment) metrics. These are:
- Deployment Frequency
- Lead Time for Changes
- Change Failure Rate
- Mean Time to Recovery
The more frequently teams are deploying to production, the more frequently you are delivering value to customers and gaining feedback to accelerate innovation cycles. High performing teams deploy to production many times per-day.
Equally importantly, more frequent software deployments indicate that software development teams have an efficient process and a high quality codebase that can easily be changed — a key indicator of sustainability.
Lead time for changes drills a little deeper into process efficiency by understanding how quickly a piece of code goes from being committed on a developer’s machine to being deployed in production. For high performing teams this is a few minutes or less. For low performers this can be weeks or months.
Change failure rate and mean time to recovery measure the frequency of production errors and the time to recover. These metrics show the reliability of your software systems.
It’s important to note that the DORA research finds that high performing teams excel in all 4 metrics — there is no compromise in quality when delivering at speed. In fact, quite the opposite — high performing teams continuously improving their process deliver value more frequently with more reliable software systems.
In addition to these productivity and reliability metrics, it’s important that teams are judged against business metrics. How are they improving conversion rates, engagement rates, and customer experience? This is key to growing their sense of purpose.
Offshoring and Whip Cracking to In-house and Trusting
Many business leaders think that if they keep cracking the whip, engineering teams will deliver value more efficiently and produce more reliable systems. Yet it produces the exact opposite — an environment of fear where everybody’s number one priority is avoiding mistakes rather than improving the system.
Business leaders also think offshoring or out-sourcing software development will help them cut costs without compromising speed, quality, or customer experience. For offshoring to work, it needs to be viewed as a long-term investment where you train the software engineers to create sustainable software. The same challenges as doing it in-house, but now with the added complexity of distribution.
All the evidence shows that the best software engineering teams are closely integrated with the rest of the business, deliver software more frequently, and produce more reliable systems.
As a business leader, growing your software development capability is vital to your success in the digital space. As modern software development practices become more mainstream, the chances of your competitors using them to out-innovate you are always growing. It’s time to put the whip down.