Technical Debt re-visited

There has been some renewed discussion recently on the subject of technical debt, this has been played out on twitter as well as a variety of blog posts including this one.

The technical debt metaphor is one I use often and I believe that there is some clarification required around this subject.

At it’s broadest, technical debt is any trait of the current system that is considered sub optimal from a technical perspective. The debt aspect reflects the cost of ownership of that trait. For example and overly complex and untidy method is sub optimal, it incurs cost each time it needs to be re-visited and re-understood due to either a defect in the logic or a new requirement. This method obviously incurs more cost if it is re-visited more often.

Much of the debate recently has been focused on the times that it might be good to incur technical debt. The debt metaphor reminds us of borrowing money from the bank to get that new toy a little sooner. The question here is two fold, does technical borrowing exists and how can we view the rate of interest or total cost.

Before we can consider technical borrowing we need to split technical debt into two categories. First, the design or implementation decision that was sound the day it was made but now, with new information, is constraining our ability to progress. Second, the quick and dirty approach that we can see on the day of writing is gong to cost us very soon.

Time Vs Money

The first category of debt is a direct result of doing the simplest thing that could work and resisting the temptation to predict the future. We develop simple software that is easily changed through effective use of tests, the code that is written is written well. We categorise these design traits as debt when new information presents its self and we identify a change that will enable the system to serve us better. We may decide to make the change or not based on the ongoing cost of maintaining an design that no longer reflects our understanding of the problem or technology.

The second category is often the result of a deadline looming. A common chorus of “lets hack this in now and we’ll fix it later” is coupled with the nagging concern that later never arrives. In my mind, this category of debt can give the first category a bad name. But, is this thinking sound? Surely there are times when the wrong technical solution is the right business decision. It is my belief that there are situations where a quick fix is the right decision, imagine a major flaw that brings down a trading system. However, there are too many instances where code bases become un-maintainable through a feeling of time pressure that leads developers to incur debt with little or no benefit. In fact, in most cases, untidy, poorly designed software incurs cost both short and long term. In the short term, defects delay the release of the software and in the long term software is difficult to maintain and rigid in the face of changing business need.

So we arrive at technical borrowing. The decision to borrow must be explicit. As a team, along with appropriate stake-holders consider the decision. For example,

we have selected framework X for the next release, it does not offer the scaling flexibility we would like but we believe that our early entry to the market is a higher priority. We plan to move to framework Y in the next release window to achieve our target scaleability.

There are less extreme examples of refactorings that should be done but won’t fit in this iteration. Again, be explicit. Discuss the need for refactoring with your Product Owner or Project Manager, consider the cost of the refactoring, the cost incurred by not doing so, the risk of refactoring. One approach to maintaining a healthy code base is to keep a backlog of refactoring and allocate time in each iteration.

However, beware the temptation to save time, get it done, do a quick fix or tidy it up later. In almost all cases code that is hurried, poorly designed, overly complex or untidy will incur far more cost both short and long term than the time saved today by not doing it right.

Finally, this can be most difficult in a legacy code base where technical debt abounds. I use a simple motto that has served me well with a few teams:

Do no harm!

Where you cannot fix it all be sure to agree, as a team, that you won’t make it worse. In fact agree to making one small aspect of everything you touch better for the next person.

Lean at starbucks (lean without the social side isn’t lean at all)

The article I’ve clipped from here is a response from John Shook to an article in the Wall Street Journal regarding a Lean transformation effort in it’s early stages at Starbucks.

But that’s not why I’ve clipped it.

The aspect of the article I wanted to draw attention to was the emphasis on the social aspects of Lean. As I see more people talking about Lean and Kanban in software engineering environments I wonder – who is owning this process, the team or the coach? As John puts it, who is the scientist?

Clipped from www.lean.org
The problem with Taylor’s Scientific Management: Who is the scientist when it comes to process improvement? Scientists must see real work to do science on the work.
Toyota revolutionized the social dimension of work, respecting workers brains as well as their hands
By redefining roles, Toyota changed the answer to the question of who is the scientist in scientific management.
The technical side of lean without the social side isn’t lean at all.Read more at www.lean.org
 

Frog thinkers and bicycle thinkers.

A delightful metaphor that cuts to the heart of systems thinking.

Thanks to Richard for sharing!

There are two types of thinkers in the world, frog thinkers and bike thinkers
This to me is the heart of systems thinking Read more at www.richarddurnall.com
 

As a manager define outputs, not process

Liz haz written a great post here describing a situation where the deployment team needed to learn for to leverage the development team to achieve a more effective rout out of development into QA and live environments.

The line that made me smile was -

Ask for consistent outputs, not consistent processes

This is a big leap for many managers and senior stake-holders. I worked with a team recently who had been told to do daily stand-up meetings. They were told that each must answer three questions (you know the three, what yesterday, what next and what’s blocking). The teams manager had a team member minute the meeting and send him an e-mail to save time.

I was asked to have a chat with the team about why they seemed unhappy with this new “agile” approach. The first step was to invite the manager to write a contract in terms of his information requirements and agree that so long as the team could fulfil the contract he would accept their approach.

A short retrospective later and the team are posting key information on a board for all including the manager to see, the minuting of the meeting has stopped and they have taken back their stand-up whic it turns out they quite liked now it could move faster without minuting.

So thanks for the reminder Liz and thanks for sharing.

Clipped from lizkeogh.com

Ask for consistent outputs, not consistent processes

Read more at lizkeogh.com
 

Valtech UK Blog

Valtech now have a blog that aggregates from my own blog and those of a number of colleagues.

There are some smart guys on there and more have promised to contribute so I suggest you take a look and stay in touch as more consultants are added.

5 wrong reasons to adopt Kanban

All true!

I see a significant risk that Kanban becomes a new and exciting way for teams to fail.

I do believe that there are good reasons to apply a Kanban approach but more on that another day.

#1. User Stories Diversity

#2. Failed Iterations

#3. Failed Retrospective Meetings

#4. Shared People / Functional Departments

#5. Simplicity

5 Wrong Reasons To Apply Kanban

Read more at www.targetprocess.com
 

Scrum meeting late fees

It’s good to see someone speaking out against this practice.

Also nice to see Rachel and Tobias chiming in.

Punishing lateness avoids the root cause and can breed resentment as the team feel that the process is being imposed.

In order to deter people from showing up late to their daily “Scrum” or “stand-up” meeting, some teams charge the culprit(s) a fine, or make them do some embarrassing activity (such as singing) for the team. Some teams use the money to buy lunch for the team once a month or so. (If that’s you: Please stop it! You’re rewarding the wrong behavior.)
Read more at powersoftwo.agileinstitute.com
 

Tweetboard up and running

I’m experimenting with tweetboard. Take a look here if you’re interested or follow the link above.

Drop me a line if you visit, if only to let me know if the thing is working :)

What is Agile?

I met with a potential client last week and found my self answering the question, “what, in a nutshell, does agile mean?”.

To date I’ve never had a canned answer to this and can come from various directions perhaps talking about the history and how it’s an umbrella term for a whole bunch of things or maybe talk about what it’s like working on an agile team. On this occasion I was quite pleased with the answer that fell out:

Agile is about delivering business value!
Businesses tend to exist in a state of constant change so if we want to deliver something valuable to them then we need to be willing and able to embrace that change and deliver quickly.
In order to deliver quickly and deal with change we have found that quality is a necessary. This is particularly true if we want to continue to deliver over a sustained period.
At the bottom of this stack, underpinning all the elements mentioned so far is the need to treat workers with respect and empower them to do the right thing. Without this you wont achieve the quality or speed that you need.

So:
Value <- Embrace Change <- Quality <- Respect & Empowerment.

Is there any more to it?

To SCRUM or to Kanban? – Which one fits.

SCRUM and Kanban (as applied to software development) are different. Proponents of the two drift from staunch opposition to declaring Kanban as a special case of Scrum.

I have been practising and coaching Scrum for a number of years and I delight in the effect it has on project teams. While I practice Scrum I find that Lean Thinking can both help me communicate Scrum and help teams to become more effective in applying Scrum. This way of thinking led to me becoming interested in Kanban a year or so ago since when I’ve being most concerned with where I ought to recommend Scrum and where Kanban.

Recently I have spent time with maintenance groups for whom Scrum would be a poor fit. Kanban offered me an alternative when the client was leaning towards a ScrumBut implementation.

There are some fundamental differences between early project / product development work and the later stages and I don’t see this as a problem. Toyota themselves hold two separate approaches. The Toyota Production System (TPS) is the most widely known Lean Manufacturing implementation. This is the world of work cells, standardised work, Kanban boards and Andon lights. However, when Toyota want to create something new they use the Toyota Product Development System. This approach focuses on a chief engineer holding a vision and rallying a team around him. High bandwidth communication, discovery and experimentation are the order of the day.

So back in a software development context Scrum was designed to manage uncertainty and complexity, to foster high band width communication and seems a valuable fit for early development.

Corey Ladas in his ScrumBan Book declares the following Axiom for applying his application of Lean to software development

Axiom 2: It is possible to develop any value adding increment in a continuous flow from requirement to deployment

Corey makes it clear as he progresses that this well defined workflow is critical to his desired approach. In a new development that workflow is often not known and usually not linear. Rather the team swarm over the requirement often returning to the customer for feedback before offering a completed deployable feature.

My suggestion is this, Scrum is a powerful approach to managing uncertainty as well as being a supportive environment for building a team. I believe that one goal of product development should be to reduce the uncertainty and evolve the workflow. As adding features becomes more straightforward we may find that we are in a state akin to production and can take advantage of a Kanban approach to further optimise for reduced cycle time, increased throughput and just in time scheduling.