fighting knock on bugs

brains-over-bugs.png

Knock-ons happen at virtually every stage of development of a software product and are a hidden yet expensive problem. They manifest themselves as feature creep, as slippage and as bugs. Every decision & piece of work has the potential to cause knock on consequences. Sometimes the consequence can be a benefit, more often than not it is unexpected problem.

Focusing on implementation specifically, there are 2 potential knock on points; before & during implementation. After implementation a knock on is more likely to be noticed, and this is when knock-ons are considered, although this is the furthest point down stream and is the most expensive and least effective place to deal with them. The cheapest and most effective point to tackle knock on is before implementation starts. And the best prevention of knock-ons is thinking; carefully, critically and collectively.

Software is almost always developed under a degree of pressure. Pressure is a fact of life, be aware it can eat in to your ability to think critically (the tendency under pressure is to slip in to reactive & emotional thinking). Switching back to fix bugs created as a knock on of previous work, has a overhead cost of re-familiarising or multi-tasking, making it more expensive for you to deal with than the cost of the original implementation.

Implementing or releasing software that causes knock-ons, will cost significantly more in time (yours and/or other’s) & money, than the extra time & care taken to think it through and improve your chances of getting it right 1st time.

Think Carefully;

  • Make notes… by simply writing down all of the things that have to be done, you will trigger thoughts and remember work that need to be done.
  • Challenge the ‘specification’ or ‘requirements’. Are they clear, will they work? Does everyone involved have the same common goal and outcome in mind.
  • Try to simplify out over complexity – “less isn’t more, just enough is more” (https://genecloud.wordpress.com/2007/01/20/less-is-more/)
  • Imagine the final finished product, consider all elements of the user experience and potential complexities.
  • Remember there is often an interdependence between features, elements of a design or co-dependence on functions & systems.
  • Unwind the implications of the work to be done – even seemingly simple decisions can have hidden implications that will cost more than the initial estimation implies unwinding implications – (http://pages.citebite.com/l1u1r0w4g1thw)
  • Estimate the work to be done. Estimation needs to include as much upstream critical & challenging thinking as possible.
  • Simple estimation method (GAWSORE, and if it helps remember it… remember that you will be all sore if you get it wrong);

G = understand the GOAL that you are will achieve
AW = consider ALL of the WORK
SO = get a SECOND OPINION
R = think about the RISKS that might impact the work
E = and finally get to your ESTIMATE

Think Critically;

  • Critical thinking requires; cognitive skills, a critical spirit & intellectual rigour (more later)
  • A short list of critical thinking questions to be used when thinking about a problem;

What do we know?
What don’t we know?
What do we need to know?
Why do we need to know? – helping focus on the important stuff, and forcing you to think about the process of thinking…

Think Collectively;

  • Get a second opinion, especially from an appropriate domain expert or from someone whose work will be impacted by yours
  • Communicate your plan – simply and clearly
  • Understand the context of the work; are others dependent on it, is it mission critical, what are the time pressures

Law of Unintended Consequences;
“Whether or not what you do has the effect you want, it will have three at least that you never expected, and one of those usually unpleasant.” (Robert Jordan)
“Of course this can apply to anything, but it certainly rings true in software development, and especially in software maintenance. As software evolves, it will inevitably grow. No matter how humble it starts, there will be new features, or security problems, or whatever, leading to greater and greater complexity. And as the complexity grows, so does the opportunity for unintended consequences.”
(http://pages.citebite.com/v1p1v0a4j3umw)

From wikipedia;
The Law of Unintended Consequences is not a law in the strict scientific sense, but it is often quoted to encapsulate the idea that almost all human actions have at least one unintended consequence. In other words, each cause has more than one effect, including unforeseen effects.

Suggested relevant causes of unanticipated consequences:

  • Ignorance (It is impossible to anticipate everything)
  • Error (Incomplete analysis of the problem, or following habits that worked in the past but may not apply to the current situation)
  • Immediate interest which may override long-term interests (pressure & short term-ism)

(http://en.wikipedia.org/wiki/Unintended_consequence)

“Experts, be they economists, ecologists or linguists, have been aptly described as individuals who know more and more about less and less. Since the world is too complex for our minds to remember every detail and to easily encompass the whole, experts employ filters to set aside certain dimensions of reality as trivial or as something to be dealt with by another expert”
(http://pages.citebite.com/l1q1y0l4s4jtb)

Critical thinking;

  • Cognitive Skills: The intellectual ability to: interpret (express and clarify significance), analyze, evaluate (assess credibility), infer (draw reasonable conclusions), explain (articulate the rationale for opinions or conclusions) and self-regulate (self-consciously assess and improve personal thinking processes).
  • Critical Spirit: A disposition to: be inquisitive, seek to be well-informed, be alert for the need to think critically, have self-confident and trust in one’s rational processes, be open-minded and flexible, understand other points of view, be fair and prudent in making judgements, be honest about one’s own biases, prejudices and ego, and be willing to change views when warranted.
  • Intellectual Rigour: Application of these skills and this spirit to achieve: clarity in understanding and articulating the issues, discipline in compiling and organizing relevant information, diligence in seeking missing information, rigour in setting belief criteria, focused attention to the thinking process, persistence through logical difficulties, and precision to the degree that it is possible.

(http://pages.citebite.com/o1m0m8j8s5xke)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: