Tuesday, July 12, 2011

How To Get Your Debt Ready

Application development teams trade costs and benefits, and face prioritization issues daily.  Managers and leads should enable their teams to correctly prioritize their backlogs of work items by ensuring the following topics are applied correctly to their teams.  This is not a process to follow, but rather a set of practices and topics that teams should adhere to in order to facilitate the tackling of debt (quality, configuration, or technical debt)--just as any other item is ready for development.

Debt Identification
Ensure debt is identified and radiated to the team.  The team created the debt (or inherited it), and it is the team that will remove the debt.  The identification should occur as the debt is found or created, and the radiation should be simple and visible. 

Example radiators include big visible displays or pages in a collaboration tool.  Since debt should be removed quickly, the simplest technology works best.  Consider this concrete example:  a big visible chart on the wall of the planning room divided into areas for each application component containing ranked sticky notes representing each debt item for that component.

Craftsmanship and Commitment to Quality
Before debt can be identified or prioritized, the team must confirm its levels of craftsmanship and commitment to quality.  A team divided on the amount of automated coverage or design patterns should first commit to its goals before it can identify debt--the team must know what debt is before it can identify debt.

Faltering engineering practices is a typical problem on new or immature teams when the team is challenged with understanding a new methodology, framework, or process.  Managers and leads need to identify this problem and connect with the team to create a baseline of quality levels and craftsmanship to which the team can commit.

Understand How You Get Debt
Debt is incurred whenever you choose today over tomorrow.  A common example occurs when reacting to fires creates workarounds or short-term solutions that are not refactored later.

Debt also occurs when there is not a common commitment to quality or where a lack of development maturity (do you have version control?) produces low-quality implementations, repeated manual tasks, or a lack of test coverage.

Debt can also come out of value stream analysis.  Identifying waste areas, for example, can lead to the need to prioritize debt items.

Debt also occurs in the following four fashions:
  • Deliberately and recklessly where commitment levels are ignored intentionally
  • Recklessly and inadvertently where immature decisions are implemented
  • Inadvertently and prudently where mature decisions are implemented but with an inadvertent impact
  • Prudently and deliberately where mature decisions are implemented with a concrete plan for later refactoring

Add Debt Reduction to Goals
Team goals should include commitments that enable team members to map debt reduction to the goals.  A goal of automated releases allows team members to raise a manual step in the release as debt or in need of technical improvement.  Planning can then consider these goals along with those goals provided in other discovery and capability discussions.

Villages Manage Backlogs
Product owners, managers, or customers should ensure all team roles have input into the preparation of the work item and its impact to the product.  While smaller applications can be understood by a single owner or customer, larger applications in larger organizations typically require an entire team of knowledge.

In the picture shown here, a Scrum Product Owner communicates the priority, vision, and goals of the plan, while the remainder of the team provide input based on their expertise and knowledge area

It is critical to ensure the owner, manager, or customer of the product understands all aspects and points of view when prioritizing.

Definition of Done
A team's definition of done should include references to debt or mottos reflecting their commitments to quality levels and delivery capabilities.  While an exhaustive list is not required, the list should be detailed enough for the team to ensure that norms and accountability is congruent across team members.

Responsibilities
Team responsibilities should be clear and team members should take collective ownership of the application.  Team members should be empowered to raise debt issues during planning or development, and owners, managers, and customers should respond with an updated priority accordingly.  Team members have the responsibility to question a de-prioritization of debt reduction. 

Team Should be Savvy Enough to Communicate Business Impact
The team should provide the business impact of a debt item in order for a product owner, manager, or customer to properly prioritize.  Development managers and leads should provide leadership to the team to ensure that business strategy and current and future needs are understood.  Junior team members can collaborate with more senior members to deliver the impact.

The team can use simple tools to map debt items to system quality attributes or non-functional requirements--where those attributes and requirements are then standardized as requirements for applications under that business strategy.  For example, the availability of a system can be affected by an implementation or release process that reduces the availability.  An enhancement to the release process could meet the availability requirements.

Reward Quality
Debt can be traced to quality at some level--affecting the quality itself, or the ability to reach the quality level faster.  A team rewarded for quality or with a focus on quality can be led to better prioritize resolving debt before tackling another feature that would increase the amount of debt.  While managers and leads must be careful of putting too much emphasis on the reward (the team could then game the system), incentives for matching the team's quality commitment can help the team focus on their responsibilities in this area.

Management Leadership
Managers and leads should remove any barriers that rob the team of their right to craftsmanship and pride in their work.  Team members want to do their best and take pride in their work without the fear of being questioned over their test coverage or automation additions.  Management should identify problems in this area and remove them by having the team commit.

Tackling and managing debt (technical, configuration, or quality) needs daily attention.  Team members need to implement together, identify and radiate the debt, and be responsible for communicating the impact of the debt.  Managers and leads need to provide leadership to ensure roles on the team are adhering to their commitments.

Those managers and leads using the practices covered here will enable their teams to effectively get their debt ready and prioritized for resolution.

No comments:

Post a Comment