Becoming Awesome — Creating a Culture of Continuous Improvement
By: Eric Weiss
Tags: Entrepreneurship, Software Development, Startup, Leadership, Agile

Areas for Improvement

There are many different ways a team can improve. Some ways involve technology and some ways involve people. Keep an eye out for these kinds of issues, make note of them, and look for ways to improve during your retrospective.

Communication

Unclear Direction — I’ve always said there is no less efficient way of working than to be working on the wrong things. So much of the failure our development teams encounter are a result of unclear direction from our leaders and product owners. A lack of vision or product strategy makes us unable to plan ahead. Unclear or ambiguous user stories and acceptance criteria cause us to miss the target. This issue is so critical that it’s become a major focus of my consulting practice.

Lack of Organization / Coordination — Building a product is a difficult, complex process, and is exacerbated by a lack of coordination between individuals and teams. So much waste occurs because information is not adequately shared among the team members. The silo effect is real, and it’s amazing how small of a team in which it can arise.

Personal Conflict — Sartre said, “Hell is other people.” You can build technology and apply process all day long, but there is no substitute for positive working relationships. It’s imperative that we take conflict seriously, and work through issues before they fester and tear the team apart.

Lack of Transparency — Communication goes both ways. While engineers should expect clear direction, they also must communicate clearly how the work is progressing. Too often, development teams do not appreciate the importance of delivering on their commitments, and the impact it has on the rest of the business.

Workflow

Incomplete Hand-Off — Product development is a single process of transforming ideas into usable technology. Every time there is a hand-off, from product management to design, from design to development, or from development to QA, there is an opportunity for failure. In my practice, I look very closely at the transitions of work between teams and often find the interfaces aren’t well aligned.

Dependency Delay — Any time there is a hand-off between teams, there is often a lack of clarity about when the work will be delivered. We all know how bad we are at estimating. Look for delays in transitions between teams. Often simply communicating the delay as early as possible will allow the downstream teams to work on other things and not affect overall productivity.

Requirements Churn — Unclear direction causes repeated rework and delay. Look at how many times a story is updated during a sprint, or how many times it vacillates between states.

Scope Creep — The bane of any developer’s existence, scope creep causes the team to fail at delivering value to the customer. While it’s fine to change software after it’s released, the constant growth of scope during a release cycle delays the delivery of customer value, which is a core tenet of agile development.

Technology

Technical Debt — I’ve written about technical debt in another article, but suffice it to say it plagues every product to some degree and should be consistently managed and worked on.

Lack of Proper Tools — Any time you find yourself doing repetitive, manual, or simple tasks, you could be wasting time. Look for opportunities to write new tools, or find tools on the market that can help streamline your workflow.

Need for Improved Architecture — If you find that your system architecture is holding you back, either with speed of development or scalability, you may need to improve your architecture. With a clear product strategy, the CTO should be able to manage the evolution of architecture on their technology roadmap.

Need for Automation — Test and deployment automation allow for more rapid release cycles, tighter feedback loops, more consistent quality, and fewer fires to fight. You should invest significantly in automating your workflow once it’s established.

Skills

Learning Curve — When leveraging a new language, tool, or framework, expect uncertainty in estimating and executing on your sprint. Plan accordingly, and invest time in bringing the team down the learning curve.

Mentorship — Teams often have more senior and more junior members. It’s critical for the long term success of the team that the senior members mentor and coach the junior members in order to level up the skills of the team. Don’t completely pack the senior members to capacity. Give them time to mentor the junior members when they need help.

Cross-Training — You want to take a vacation at some point right? T-Shaped teams are the most effective at not only delivering consistently, but also flexing where demand changes for different skills. Look for opportunities to pair program and cross-train, even if it may temporarily reduce the team’s velocity.

Skills Gap — Sometimes there is a skill that just isn’t available on the team. Identify these gaps and either invest in training, or get someone on the team who has it.