I was asked numerous times by readers of myprogrammingblog to write post about my experiences observing dev teams and why they underperform. So today I decided to write a quick post on 5 reasons development teams underperform. Everything that I write here is taken from my personal experience leading, consulting and being part of numerous development teams. My advice to you would be to try to find any of those 5 reasons in your organization, and if you do, try to fix them using advice from this post and see how it affects your organization.
#5 Acquired Technical Debt
There are many reasons why development teams acquire technical debt, but If I had to pick two that are most common, I would say: deadlines and lack of experience.
When deadlines are pressing, dev teams often have to cut corners in order to meet those deadlines. This often leads to bugs or missing functionality that ends up in technical debt pile.
Additionally, when inexperienced developers are hired, codebase often becomes vulnerable to bugs and code once again needs to be rewritten, this however can be managed by introducing pull requests and assigning less critical functionality to less experienced developers until they gain enough knowledge.
Ways to avoid acquiring technical debt:
- do not compromise quality
- address technical debt timely
- hire experienced developers
#4 Lack of internal communication
As we all know communication is the key. If dev team does not communicate enough with each other, it will lead to misunderstandings and code being re-written.
Ways to avoid lack of internal communication:
- ensure that development team updates each other on progress and impediments every day
- schedule regular team events
- use anonymous surveys and 1-1 meetings to find out if team members are unhappy
#3 Scope creep
Nothing de-rails dev team more, than scope creep. If development teams have to manoeuvre every day to please different stakeholders, it is impossible to focus on what actually brings value, so as a result less gets done and product quality can be compromised. I have seen numerous times how dev teams were not able to complete piece of work that they agreed to, just because other stakeholders were continuously squeezing in what they thought was important.
Ways to avoid scope creep:
- make it transparent and adhere to it no matter what – if something needs to be in, something definitely will be out
- divide work into small subsets (in Agile these are usually called Sprints)
- remove direct requests from any stakeholders to dev team and tunnel those request through product managers
#2 Operational overhead
Operational overhead is everything dev team does that are not dev team main responsibility and can be outsourced to someone else or automized. Examples of operational overhead are different from team to team but some most common are: time-consuming deployment process, slow test suite, too many meetings, too much reporting etc.
Ways to avoid operational overhead:
- continuously optimize slow parts of the system
- automize anything that can be automized
- hire people to deal with things like long-term planning, architecting etc
- include reporting/analytics tools into development process (e.g Bug tracking system) and use it instead of direct reporting
#1 External Dependencies
External dependencies will block development team from performing their work. If developers for example are waiting on requirements from other stakeholders, they will either produce incomplete work, that will have to be redone, or be blocked and won’t have any work. Managing external dependencies is one of the most crucial tasks for healthy development process.
Ways to avoid external dependencies:
- prioritize work 2-4 weeks in advance
- make sure incomplete requirements do not reach development team
That’s it for today, I would love to hear your opinion on the subject! If you encounter any of the 5 reasons development teams underperform stated above, let me know how you deal with them. Also if you like these types of topics and have ideas on future ones, please contact me as well!