The Challenge of Growing a Software Development Program
Everybody who has ever seen a software project grow from an idea on paper to a working solution with multiple releases and many customers knows that you do not get everything right the first time.
This article will explain the challenge of complexity and high-level approaches to solve it.
Software Project Lifecycle
The typical lifecycle of software projects start with one main goal:
Create a working product and make money to survive.
If this first obstacle has been overcome, product and program managers will focus on growing business. Development programs will do this to become profitable or increase the company value.
The focus on increasing turnover will lead to a growing headcount as well as more features and more supported platforms.
Unfortunately these three factors are the main drivers of complexity in a software development program.
Development of Cost and Turnover Approaching Market Saturation without Optimization
This may become a problem in different situations, for example:
Management decides that there is no more budget for growing the product, and focus shifts towards EBIT and profitability. Complexity needs to be reduced to optimize cost.
The market is saturated and keeping a high share requires bigger and bigger investments as feature development becomes more expensive with growing complexity
Optimize Contribution Margin for a Maxed out Market
The program wants to move to the next generation of the product or a new product for the portfolio, so maintenance of the old product needs to be efficient to free up resources for the new one
The market is not saturated but growth slows down because of the growing complexity of development
Optimize System for More Growth after Hitting Complexity Cap
It is key to know when to invest in optimizing turnover and when to invest in cost reduction.
Know when to Invest in Cost Efficiency
There are a couple of questions to answer to come to a decision on whether investments in efficiency should be made:
Are you optimizing EBIT or turnover?
Are you preparing for growth? (People and/or features and platforms)
What is your upgrade strategy: Are you going to build the next generation of your product on top of the existing code basis? or are you going to start fresh?
What is your expected maintenance window? When will the last maintenance contract run out?
What is your market share and market growth potential? Have you maxed it out and should invest in cutting cost?
Do you expect a decline in feature requests due to a declining or stagnating market or financial crisis?
Do you plan to discontinue the product? Know when it becomes obsolete!
In general: Know when to grow your market share and when to improve your efficiency. You must have a solid plan on when to build on what is there or when to start of fresh.
Tempus fugit, software is not made to last an eternity.
One of the main factors for software development cost is unmanaged complexity. Try to identify KPIs for complexity in your product as well as for your growth potential. Compare those on a regular basis and reevaluate the decision.
Forming an Organization that Tackles Complexity
What Contributes to Complexity?
As the product grows it will
Gain new features and thus lines of code and tests
Support more target configurations (HW, Operations Systems etc.)
Allow for more configuration options and variants
Require more headcount to operate and develop
A system build on all developers having complete knowledge about everything will struggle as complexity grows exponentially with features, platforms and people involved. Keeping process overhead to a minimum is an additional challenge.
New joiners have to learn about the product to perform well. They need to be groomed and trained, reducing focus off the established people.
The challenge is to keep things going as features, platforms, configurations, the code, testing, tooling and processes grow while knowledge of all of these decreases per headcount.
What Makes a Successful Software Project?
A Successful Program Tries to Excel in All Areas
A successful software development program strives for excellence in
A competitive product tailored to its customers needs.
People and processes
Efficient tooling to support in the day to day business and reduce or manage complexity
The Struggle
Optimization Focus of Development Program
Classical product development decision makers are product and program managers. Their focus lies on improving software product development programs by improving the product marker fit, the quality per cost, and processes in general.
They apply common trends which have reached almost every software product (also in the automotive and embedded software industry) such as agile project management and Design thinking.
There is however no traditional product or program management role focusing on tooling and its relation to efficiency in the software development process.
Developers and architects often struggle to fill the gap, because they lack the experience to take an economic view.
Many favor "cool" solutions over economically sound choices.
The traditional decision makers for backlogs and roadmaps struggle with optimization of tooling and infrastructure, because they do not work with it every day.
They do not experience the challenges and the tiny little obstacles, which make development tedious and sluggish for developers on a daily basis.
If you have to steer a big steam boat, you will focus on navigating to the target port without sinking the ship.
You will rarely go into the engine room and see that your machinists are carrying each individual piece of coal to the oven by hand, because all shovels have broken.
Filling the Blind Spots
Good tooling and an efficient well groomed test suite are major factors of efficient software development.
Successful programs understand their importance. They have strong leaders, who can identify weaknesses and resolve them with their teams.
They understand their products lifecycle phase and take informed decisions on when and what to improve.
Your program should have a team of diverse decision makers to be able to manage activities and funnels for both the product and for tooling and infrastructure improvements.
Representatives should have a strong capability of taking an economic view and a deep understanding of the development of software products to meet at eye-level.
They need to be provided with a common understanding of the product's situation, strategy and roadmap.
Decision makers need to cooperate on a regular basis to create visibility on product development needs as well as the state of tooling, infrastructure and tests to manage complexity.
Classically product management may dominate the allocation of resources heavily and one-sidedly. This can be a problem.
Make sure decisions are not being dominated by either of the representatives and try to find a way to compare initiatives in terms of value contribution and fit to your product strategy.
Regularly ask the key decision makers for their current focus. They could be focusing on improving turnover, quality, time to market, efficiency or maintainability.
Try to find gaps for areas you are not addressing and validate whether focus is correct in the current situation.
Agree on the improvement focus for the period (of may be three months). And reevaluate regularly.
Try not to steer from an ivory tower. Regularly ask you developers, testers and support engineers how confident they are to deliver a good product in reasonable time with your current tooling (including test suite).
How else would you know?
Treat your developers like your customers and your improvements like your features. Try to build an attractive and efficient solution rather than just some tool.
Questions that Might Help You
The following question may help you identify whether your tooling, testing or code quality could need improvements and whether your organization is already build to notice:
Do you have somebody with insights into developers daily business as a member of the program steering committee?
Do you execute surveys of your developers on a regular basis to identify organizational or technical blockers?
Do you have clarity on your product's main goals and the expected remaining lifespan of this generation?
Are milestones kept on a regular basis or do you tend to have to delay releases and deliveries?
What's your roundtrip time from feature request to delivery and how has this changed in the last year?
What is the rate of occurrence of external bug reports / support request and how has this changed in the last year?
How happy are your developers?
How confident are your developers to be able to deliver a quality product in time?
Are you evaluating the KPIs above on a regular, ideally automated way?
Next Up:
This blog will focus on how to combine efficient technologies and organizational measures to mature a software project and make it efficient in terms of cost per feature and time to market.
The blog will focus on explaining high-level concepts to product and project managers to allow them to identify possible issues and improvements more easily.
The blog will not explain how to implement certain technologies on code level, but will mention benefits and drawbacks of certain technological decisions in tooling and testing.
Next articles will focus on
Know your Tests - How to Build and Efficient Test Suite, Why Efficient Smoke and Regression Tests are Most Important to Program Growth
Choosing a Branching Strategy and Integration Strategy -- Keep your Flow Efficient without deteriorating quality
Share this article:
Get great articles direct to your inbox
We’ll never share your details with third parties.
View our Privacy Policy for more info.