Planning Bug Fixes

Jason Yip posted recently about scheduling bug fixes. I liked what he had to say. He is a very thoughtful person. I wanted to extend his thoughts with my own…

1) Fixing bugs is unpredictable – you never know how many you will have or how long they will take to fix.

Defects in delivered code fall in to categories:

 

  • non-working new capabilities
  • usability issues
  • collateral damage to surrounding code

If your goal is to have a quality product, there is no way to prioritize these apart. They all need to be addressed. So this taxonomy or similar taxonomies usually do not give you reasonable leverage for prioritizing defects.

2) Usability issues can be prioritized based on time, risk and frequency

usability issues may be deferred:

  • if the usability issue does not add unacceptable business risk.
  • if the usability issue does not add an unreasonable amount of user time to a business process.
  • if the usability issue does not affect a frequently used feature or path that would generate an unacceptable support call volume.

3) Defects can be caused by poor code design, or less thoughtful implementation

Sometimes, the problem is that the new capability is not adequately supported by the current design. The developer ended up playing whack-a-mole with the issues because he couldn’t quite wrap enough duct tape or baling wire around it to get it to stay working. Sometimes the prior releases duct tape needed to be re-wrapped.

Other times, the problem is that the developer simply didn’t think through the implications of his design pattern or understand the usage scenarios deeply enough so his design was simply inadequate.

Still other times, the implementation was just plain sloppy, so it passes the happy path scenario, but fails most alternates or edge cases.

These defects all mean that the fix may take as long as the original implementation of the capability to correct. They can result in a story getting backed out of a sprint if they are found late.

4) sometimes the source of the defect report is an important determinant of priority.

Defect reports from key users or evangelists tend to get prioritized above those of testers or non-savvy users. Sometimes also defects reported by users who are know to have the ear of management also get prioritized, as a noise limiting mechanism.

5) Assuming all bugs reported represent defects. Sometimes testers and users report how they “thought” things would work or should work.

Many times a validation is necessary to ensure that all reported bugs are really defects. Sometimes reports are simply enhancement requests masquerading as defects. Other times the tester simply mistook a working feature for a defect because of how they had envisioned it working, or because they assumed (untrue) things about the solution. Often these types of defect reports are an indication of counter-intuitive design, other times they are just wishful thinking. We need to be very careful about working on these defects as they can add uncommitted scope to a sprint, and can add risk to the committed scope via collateral damage.

6) When you have enough time and resources, prioritization is not necessary.

The closer to the completion of a feature the testing (and bug reporting) is executed, the less prioritization is necessary. When testing is done the “day after” the feature is complete, we often have the luxury of working on defects in sequential order. When testing is done days or weeks after the feature is complete, we can end up with more defects than we can fix and a larger completed codebase to re-engineer if the defect is related to a design issue. The opportunities for thoughtful re-design are often long past, and we end up wrapping duct tape and baling wire around the feature to fix the defect. This is one way we accrue technical debt. Perhaps the sequence of our testing and user feedback activities relative to our development activities is as or more important to manage than the sequence of our defect remediation.

[Curation #3] Competency, Principles, Hiring, PM101

Want to be strategic? Be competent first | Adventures in IT – InfoWorld

Provocative post about walking before you run.  If you can’t execute, your strategy will not help.

Agile Complexification Inverter: What are the Principles?

I like this way of thinking – principles first, because it helps us stay out of “methodology” land.  Too often, we are looking for a “prescription”, rather than ways of thinking that help us solve problems that are impeding our progress. 

How to Change the World: What I Learned From Steve Jobs

Best bit: A players hire A+ players….  – Avoid the bozo explosion.

Herding Cats: Are We There Yet?

Project management 101 from Glen Alleman. 

 

Culture of Duz

A while back, Ester Derby posted in reaction to an email advert for a leadership workshop – about how to counter the “culture of entitlement”.

She reacted somewhat violently to “leaders are constantly frustrated” by this. She implied or stated that the leaders who are frustrated are somehow responsible for the culture.

So I have two reactions to her post – the first a “have you considered” that the leaders referred to may be many pay grades below the senior management level that value having the corporate logo on the “best places to work” list, HR policy makers that require months of high intensity documentation before they will consider a termination, and an IT staffing policy that has changed dramatically as work has moved offshore, and back onshore, and capital and expense budgets and policies have adjusted to regulatory and market changes.

As a non-manager leader, I have often been frustrated by the availability of willing and able resources on initiatives that I am driving, getting a “do the best you can with what we have available” from the staff manager.

As a manager of small teams, I have often been frustrated by a small percentage of staff members who accomplish just enough to avoid the bottom of the list, but are generally the most difficult to work with, and aggravate the remainder of the staff, while they are working the system for special accomodations. It is worse when there is a good ol’ boy network to which the individual is juiced into, being patronized by some mucky muck executive, 5 levels up and 3 organizations removed horizontally…

Ester, you say that all of this can be resolved by simple conversation and I agree, it is simply much harder than you may want to believe to determine who needs to participate in the conversation, let alone to get them to the table.

My second reaction is that each leader whether via influence from within a team, or from a position of authority contributes to the culture of the organization, and is in some way responsible for that culture. So as a leader, one must reasonably assess the capacity of people and what they might need to work up to their capacity or how they could expand their capacity. Having done this, we may be positionally able to direct them toward these goals, or work toward the same effect by earning their trust and using that as a lever of influence convince them to adopt these goals for their own benefit.

Curation Collection #2

http://pmboos.posterous.com/how-to-initiate-agile-adoption-within-a-large

“Q: What change models work? Q: How ot be agents of change? (as coaches)” This was an insightful list of questions related to enterprise agile adoption.  I like questions because they are less likely than answers to lead to one-size-fits-all-suits-none solutions.

http://www.brepettis.com/blog/2009/3/3/the-cult-of-done-manifesto.html

I like the cult of done.  I like the manifesto – I posted the poster included several places in my workplace.  Good reminder of why done is important.  “Done is the engine of MORE!”

http://www.jrothman.com/blog/mpd/2011/09/agile-power-and-culture.html

An interesting look at the way that the “power culture” of an organization interacts with agile adoption strategy.  When your organizational culture has a high power index in the large, then every reorg or management change presents a challenge to agile adoption.  “When I see organizations with a high power differential, they keep falling back to command-and-control approaches, because the power differential is so ingrained in their culture.” 

http://www.avc.com/a_vc/2011/09/minimum-viable-personality.html

Interesting look at product from a VC perspective.  Caused me to ask how people see me as a product.  I work inside “the enterprise” I am not marketing product to VC, but I constantly market myself to others.  “CHICKEN LIVE IN CAGE. NO CAN HAVE PERSONALITY INSIDE CAGE.”  — smash cage, light barn on fire do that you win…

 – @paul_boos @bre @johannarothman #grimlockquotes

Ancient Business Books that I have learned from

OK – so everyone should know that I am “the old one”.   I have a couple recommendations for books now out of print that were business oriented, but that I frequently hear blog advice that reminds me of things that I learned 20+ years ago in these books.

Today Seth Goding posted Expanding the Circle of Missed which reminded me of a sales oriented book that has basic work wisdom going way beyond the domain of sales called “Winning Through Intimidation” by Robert J Ringer.

WTI is a book about making yourself appear essential to whatever business endeavor the people who pay you are conducting, thereby securing yourself a paycheck, pay raise, promotion, or closing. 

The other ancient text is called “How to Work for a Jerk” by Robert Hockheiser – which is a great text on management antipatterns, and how individuals can work successfully in light of office politics and poor management.

Both of these books were written before the current political correctness fetish – when things and business culture were much different.  However human nature has not changed much in 4000 years, and so while we all wear the mask of sensitivity and diversity, the thought processes going on behind the masks are little different than they were 20 years ago. 

Both are now out of print, but can be found in libraries and used bookstores and are worth the read.  Both are written in a humorous, tounge-in-cheek style using lots of stories and allegories that make them easy to assimilate.

 

 

Pragmatically Agile

In a conversation recently, I was reminded how being agile is awfully like being pragmatic.

We were talking about topics of interest to project managers like estimation and forecasting and measurement.

One of the topics discussed was about grooming the backlog, and backlog sequencing strategies: Walking Skeleton vs. feature by feature? Do you build just bones, and then add the skin? or do you build one complete body part at a time.

Another topic was about “sprints as phases”: requirements works a sprint ahead of development, testing works a sprint behind – this strategy might work for a longer duration effort (many sprints), but not as well for a shorter duration (4 or less) – it might drive you to more shorter sprints than fewer longer ones.

Yet another topics was about planning margins or slack. Budget or Schedule margins are not on the surface agile concepts, but when they are valuable or necessary risk management tools, they must be implemented in ways that do not interfere with measurement. A budget margin implementation means that I have the ability to spend more but stay on schedule. Pragmatic strategy for that is to overstaff at the beginning, and reduce staff as velocity stabilizes as sufficient, and risk is retired. Adding staff in the middle of a project decreases the stability and predictability of the team.

Our last conversation was about choosing a sprint length. Sprint lengths should be consistent – so that the measurement (velocity) is useful for projection. Sprints should be immutable – once a sprint is started, it cannot be shortened or lengthened. If there is a need to have “variable” length sprints then a shorter consistent measurement period should be adopted (weekly) so that the feedback loop doesn’t elongate. Last, the shorter the overall project, the shorter the sprint size – again, so that the feedback loop is timely enough to make adjustments.

There is no one right way – just ways that make more sense and ways that make less sense. We all learn more from failure that we do from success – but using a framework that fosters timely feedback and rapid adjustment provides ability to see failure coming and get better faster.

Inaugural Curation Post…

This week I am making good on my intent to post some of what I’ve been reading and found valuable.

agile42 | Feature Injection Applied to Service Delivery

I spent a bit of time reading about Feature Injection as a different way (than other agile processes) at dealing with requirements.  I really am intrigued, and will try to adjust my requirements practice to include these concepts. 

Do You Suffer From Decision Fatigue?

This also was interesting – as it clearly reflects what we all experience – decisions take mental energy, and making decisions when mentally tired is sub-optimal.  One could infer from this how to re-arrange one’s schedule to make better decisions, or to be less mentally tired when decisions are needful.

Time to ditch “The Backlog” « The IT Risk Manager

This also was provocative – not because having a backlog is a bad thing, but because how we name things allows others to infer things from the connotative meaning in that naming. 

Calamity howlers & positively selecting with surprise « Freckle Time Tracking

A “calamity howler” (CH) is a persistently negative individual who predicts rack & ruin, frequently and at the top of his voice. It’s a great term that was especially popular in political writings back in the mid-to-late 1800′s but has since fell out of disuse.  — who is the CH on your current project or in your current team. 

Emergent Vs. Inverted Thinking

In agile communities developers, project managers, testers, there is a phobia or paranoia about big ANYTHING up front – that is we should not spend more energy up front than is absolutely needed to get the committed stories/features done in the next iteration.

The concept that we use is emergent thinking. Requirements emerge as we bootstrap our thinking by delivering early features. Design emerges, as we build features that have similar needs, and we refactor towards opportunities for generalization or re-use. Plans emerge as we estimate and sequence the stories in the backlog.

So what happens when the requirements don’t emerge. When the design doesn’t emerge. When it feels like we are just skating on the surface, because there is too much fear of bigger change, or spending energy building anything now because it will all change in 3 weeks. When the product owner is unable to sequence the backlog because there are unmade business strategy decisions that are inhibiting the emergence of plans, requirements, and designs.

I use inverted thinking. It is the opposite of big anything up front- I envision a result (it doesn’t have to be the right result) and I build a plan to acheive that result. I work backwards from a conclusion, as if my decisions were made. I propose a design (as thin as possible) that I think will support the envisioned result. I build a plan (as thin as possible) and propose needed skills and resources.

I pretend I know everything, and when I need an answer, I make one up. But every answer I make up, I list as a decision – because that is the schedule I want. What decisions need answers in what sequence, by what date, and what deliverables are dependent.

Then I dare every stakeholder to tell me why my proposal (that I just completely fabricated out of BS) is wrong. If you can’t give me a good reason not to do this, we are going to move forward in this direction.

When the fear of making a wrong decision is inhibiting the emergence of requirements, plans and designs – Invert the thinking from “What should we do?” to “Why shouldn’t we do this?”…

…and watch decisions emerge.

What is up with This (Blog)?

So I want to talk a bit about this blog and how I have been doing it and something that has changed the way I will blog in the future…

**Personal Stuff**
Most of the posts on this blog have been born out of my own experience – both good and bad.

This blog is not widely read. I probably get a couple dozen page views on each post. I don’t actively promote it. I have tried to post at a consistent, sustainable pace. I try to write and refine about 4 weeks in advance, so that I don’t feel pressure to get stuff out. Most of my posts are written as I ride the train to and from work. I spend about 35 minutes each way, and try to write about 3 posts per week.

I struggled to get out a post or two per week, because things at work were not producing the kind of frustration that induced learning or analysis. I have been reading the same techie and management blogs for the past few years (Fowler, Foster, Alleman, Rothmann and a few more… ) Occasionally I would post a riff or a reaction to something these guys said especially Alleman, but… Sometime around the end of July this year, I re-engaged on twitter. Still not sure why, or what actually prompted me to go there, but I did. Wow – I found that there was a whole bunch of people who write the same kinds of things that I write (and much better). It is always amazing when I find others that think like me.

And so where before, I did not have a source for inspiration (except my experience and the scripture) I now read a couple posts every day from folks that I follow on twitter. So I decided that I will publish links and commentary on the stuff that I read and like on this blog. These posts will likely be much shorter than my “regular” posts, just a link to the other post, and a few thoughts.

You can follow me on twitter if you like, I am @regenerateweb.

**Technical Stuff**
I use posterous.com as a blog host. I like it for several reasons:

1) it has an e-mail interface – so I can send an e-mail from anywhere to post – this became a requirement because I wanted to be able to post from my blackberry which does e-mail really well.
2) it automatically connects with my social networks (facebook, twitter) and lets me autopost to them.
3) it lets me schedule posts in advance so that I can get ahead.
4) it supports some custom theming – which I might do when I get 20 free hours. but has enough basic themes so I can pick one that is not too obnoxious.

I use a note taking tool called ZIM Desktop Wiki. It is extremely simple, but lets me maintain hyperlinked notes – so that I can make a “page” related to a topic, and make links to those pages there, so I can organize my posts. Also, using the wiki metaphor, to make a new page, I just create a link and click it and a new page is created.

Competency Vs. Excellence

We can train people to be competent, but excellence is a result of an individual being given the freedom to make mistakes, to learn, and truly incented to grow without fear of retribution – not without accountability but without loss of reputation. Excellence develops when an individual recognizes his own adequacies and inadequacies, and is willing to grow by following, learning, and failing.

If “Failure is not an option!” – then the best you will get is competence.
If you must “prevent them from making mistakes” – then the best you will get is competence.
If the following the process is more important than developing the people – then the best you will get is competence.