Thursday, December 14, 2017

Eight Agile Wastes of Hanukah: #3 Defects (and Dreidels)


I joke that Hanukah is the festival in which Jewish children eat fried food and learn to gamble! Hanukah features an iconic spinning top, the dreidel.

Each dreidel has four sides, each with a hebrew letter. Together the letters form an acronym that translates as "a great miracle happened here".

There are rules for a gambling game based on the Dreidel letters, but in my family we just enjoy spinning them in increasingly challenging ways: preferred hand, other-hand, both hands simultaneously, inverted, etc.

Agile Waste #3: Defects

Software defects (colloquially known as "bugs") are instances where the software either malfunctions or behaves in a way inconsistent with its intended behaviour. Famous examples have resulted in lost space-craft, exploding rockets, and death from malfunctioning medical equipment. More down-to-earth defects result in losses of data, financial miscalculation, security breaches. Defects also result in programs that are slow or crash or don't respond to user input.

Designers and Programmers create a lot of defects. The defects that affect end-users and customers are the ones that haven't been prevented or caught and remedied ("debugged"). But unfortunately, in complex software, removing one defect can introduce others.

Finally, software is an automated process, so manual (and mixed automated/manual) processes can be defective too. These too need to be debugged.

What to do

Detecting and fixing defects are important activities, but not intrinsically value-adding, and the rule-of-thumb that prevention is better than cure applies. The longer a defect goes undetected the more expensive its impact and the higher the cost of remediation. The general idea is to move quality left:  it's better to catch defects earlier than later.

Suggestions:
  1. Develop less features (see waste #1) as more software leads to more defects!
  2. Develop clear specifications via techniques such as Specification by Example / Behaviour Driven Development (BDD)
  3. Adopt a modular architecture so that defects can be more easily isolated
  4. Rely primarily on lots of automated tests, rather than manual testing
  5. Do manual exploratory testing to find subtle defects
  6. Write those automated tests at multiple levels (unit tests, component tests, functional tests), to test both technical assumptions and expected behaviour
  7. Have programmers peer review each other's code: the fastest feedback loop for this will be in real-time via pair-programming or mob-programming
  8. Use test driven design / development (TDD) to improve code quality by writing tests first and "refactoring" code for simplicity and elegance.
  9. Run the automated test suite against every change via Continuous Integration (CI)
  10. Explore more sophisticated preventative techniques: e.g. Design by Contract (DBC)
  11. Generally prioritise defect fixing over new feature development: don't trade away quality

Learn (even) more

For excellence in Agile & Innovation consulting: Skillfire

Wednesday, December 13, 2017

Eight Agile Wastes of Hanukah: #2 Handovers

Each night of Hanukah, the custom is to light an increasing number of candles, placed in a nine-slot candelabra, the hanukiyah. Two candles are lit on the first night of Hanukah, three on second night, culminating with all nine on the eighth night. One candle — the shamash — is lit with a match and used to light the others. Blessings are said, songs are sung, specific games are played, foods are eaten, and so on. More on these later.

How many candles are needed for Hanukah?

2 + 3 + ... + 9  = (2+9) + (3+8) + ... = 11 x 4 = 44

Agile Waste #2: Handovers

The second Agile waste, common in software development and other forms of knowledge work arises from excessive and ineffective handovers. Like the children's game of telephone, where one child whispers a message to another and another until a garbled message arrives at the last child.

Similarly, when the creation of a complex product or service is split between many people in a strictly linear fashion, with documents and artefacts handed from one person to the next, without confirmation and discussion creating feedback loops, misunderstandings are magnified and collaboration and creativity are constrained.

Arranging larger organisations into functional teams and silos institutionalise and slow down handovers, as do excessive role specialisation.

What to do instead

We reduce handovers through increased collaboration.

Suggestions:
  1. Develop broad expertise in addition to special skills. Become a generalising specialist or T-shaped person. This will allow you to collaborate and contribute to a broader range of activities.
  2. Adopt swarming strategies for work: in software, learn pair programming (two heads are better than one) or mob programming (many heads!). Non-software equivalents abound: e.g. pairs of writers get together to spitball ideas. Don't just pair to solve hard problems: pair to learn new skills.
  3. Workshop ideas rather than passing a document around ad nauseam: get all the right people in a room and thrash it out. The more people, and the less skilled they are at collaborating, the more value you will get out of strong and structured facilitation.
  4. Work in cross-functional teams rather than functional teams
  5. Reduce or eliminate functional silos in your organisation and reorganise around value streams. In technology companies DevOps seeks to remove the distinction between Development and Operations: if you make it, you run it, you support it. If something breaks it's your problem to fix it — and that's a healthy feedback loop!
Finally, just as a single candle is used to light all the other candles on each night of Hanukah rather than each lighting the next relay-style, ensure that your on-site customer or Product Owner is highly available to the whole development team to discuss and clarify nuance and detail.

Learn (even) more

For excellence in Agile & Innovation consulting: Skillfire

Tuesday, December 12, 2017

Eight Agile Wastes of Hanukah: #1 Low value features

Tonight marks the start of the Jewish festival of Hanukah, commemorating in part an ancient miracle in which oil supplies for the eternal flame in the Temple of Jerusalem were running perilously low: there was only enough oil for one day, but that oil lasted eight days — long enough for fresh supplies to arrive — an ancient miracle!

In a modern interpretation Hanukah can be seen as a conservation festival, drawing attention to reducing waste, encouraging recycling, caring for the environment, and so forth.

In this spirit I am going to do a twist on the idea of publishing an advent calendar by recounting "eight wastes" of Agile, one day and one waste at a time.

Agile Waste #1: Low value features

No-one adds product features that everyone regards as low value, but all too often your (or my) bright idea doesn't turn out to be all that great in retrospect. "It seemed like a good idea at the time" is a common refrain, but after the fact is too late, and the damage is done.

Low value features are wasteful in several ways:
  1. They steal time from designing, developing, marketing, and selling other, better features.
  2. They increase product complexity, increasing maintenance costs
  3. Their eventual removal is also costly

What to do instead

The Pareto Principle (80/20 rule) suggests that roughly 20% of features are responsible for around 80% of product value. Those are the features to build, but it's not necessarily easy to figure out which they are!
Therefore: 
  1. Apply strategies like Design Thinking and Lean Startup to validate ideas and build prototypes and minimal versions rather than naïvely pursuing a grandiose vision. Then iterate like crazy.
  2. Listen to your customers and not the HIPPO (Highest Paid Person in the Office). Use techniques like Hallway usability testing, Customer Research, and A/B testing to validate your hypothesis that a feature really adds value.
  3. Explore techniques like user story-mapping, story-writing, service-blueprinting, and impact mapping that help with contextualisation and prioritisation.

Credits

The idea of relentlessly identifying and reducing waste comes from Lean Manufacturing, adapted for software development most notably by Mary and Tom Poppendieck.

Learn (even) more

For excellence in Agile & Innovation consulting: Skillfire

Sunday, December 3, 2017

How to be a good Agile Stakeholder

The Stakeholder Role

Stakeholders ultimately aim to deliver value to the end users and customers of the organisation, as well as serving complementary concerns, such as staff sustainability and happiness, legal obligations, and organisational effectiveness and profitability.

In trying to serve these aims they will frequently request work from Agile Development teams via the intermediary of the Product Owner, who constructs a single prioritised backlog for his or her team.

Coöperation over Competition

Stakeholders may be viewed as competing with each other for the development team's finite capacity. But a better way to view their role is in coöperating with other stakeholders to deliver maximum value (on balance) per time period, be it a sprint, a quarter, or a release.

Good Agile Stakeholders work with the Product Owner to clarify their needs, which then get queued up in the form of a single backlog.


Key points
  1. Participate in collaborative planning and prioritising exercises — especially Discovery sessions — with other stakeholders with the aim of educating about your area, while understanding how it fits into the big picture.
  2. Learn about the Agile approach to development: watch (and periodically re-watch) Henrik Kniberg's excellent Product Ownership in a Nutshell [15 minutes]
  3. Attend workshops and sprint reviews (product demos) to help plan and inspect the output from the team
  4. Help break down large pieces of work into smaller bits
  5. Respect the prioritisation process

What about when I need something done now?

Agile teams typically maintain an Express or Expedite lane to allow for emergency work. As a stakeholder you may request truly urgent work via this mechanism, but do not abuse it! 

Although emergency services vehicles can travel fast through traffic, everyone else has to slow down. In the same way, use of the express lane gets the expedited work done faster, but it slows down all other work. Use sparingly.

Lessons on Product Ownership

I interviewed my wife, Andi Herman, who acts as Product Owner for our start-up, youpatch.com, on the big lessons she has learned in learning about how to be an (awesome) product owner.

Understanding the Product Owner role is helpful for stakeholders, who get most of their work done via the Product Owner.

Here's the summary:
  1. Shared Understanding: Take the time to develop absolutely clarity of understanding between PO and the team around what is meant by backlog items. Learn each other's language. 
    • Why? Because ambiguity leads to wild goose chases and waste.
    • Examples, sketches, screenshots, etc. are helpful here.
    • Invest the time to express yourself clearly and to validate understanding through discussion
    • This is a great reason for the team to write the stories to demonstrate their understanding and the stakeholders to read them
  2. Steer clear of micro-management: Understand that although you might envisage one way to accomplish a task, but don't try to enforce that on the development team. They may have better ways. Learn to trust the competence of the team.
    • Stakeholders own the Why? of backlog items
    • The PO and team collaborate on the What?
    • The team owns the How?
  3. Prioritisation: Understand that things need to happen in a certain order
    • The PO balances business value (ideally cost of delay) with estimated duration when prioritising the product backlog
    • The team may somewhat re-order by adding in considerations of risk, learning, and dependencies
    • E.g. You can't put the roof on a house before the walls (dependency)

Conclusion

Agile delivery offers a great deal to stakeholders: faster feedback, better quality, and the ability to change course in the light of learning, new ideas, or changing external conditions. But it does demand a shift from giving orders to greater interaction and collaboration, and for most people it will be a journey of learning ... but one that can be professionally and personally extremely rewarding.

Sunday, November 26, 2017

My Coaching Philosophy: Feel the Learn!

Feel the Learn!

I'll sum up my personal coaching philosophy in three words: "Feel the Learn!"

Physical trainers are apt to say "Feel the burn" as a shorthand for training at a sufficient intensity to challenge muscles and force an adaptive response.

Through my Agile coaching I don't expect your muscles to burn — that would be a surprising and probably unwelcome side-effect! — but you should be burning fresh neural pathways as you learn and improve.

The intention of the snappy phrasing is to act as a reminder that while a wide variety of practices and principles can be brought to play as part of an eclectic coaching approach, they should serve the higher purpose of helping people to actively learn, and to value learning.

Why?

In a fast moving world, the fastest learners win. The coaching profession exists to help people learn and perform effectively. Ideally, we teach people to learn independently, and collaboratively: to think for themselves and to play well with others.
Coaching can focus on achieving external goals or developing personal capability. Of course, the two are inter-related: strengthening capabilities makes it easier to achieve external goals, while setting explicit goals help us to focus.

Personally, I lean somewhat to the learning and capability side rather than the goal-focussed side of the coaching coin. With improved insight and capability goals become easier to achieve, and the confidence in one's skills and capabilities tends to be transferrable to new goals, especially meta-skills like knowing how to learn.

What?

How do you know that you've really learned something? I believe a good test is what you fall back on when you are distracted, or when the going gets tough. Then you find out what you've internalised.

For example, when I discovered that (like most people) I had learned to tie my shoes incorrectly and resolved to fix this I ran into a problem: unlearning is typically more difficult than learning. While I only needed a small modification to my shoe-tying routine — loop under rather than over —it took me over a month of conscious and frustrating practice (frequently catching myself in the old habit) before I was able to switch over to the new routine automatically.

Good learners (and coaches) are humble. Not because "they have much to be humble about", but because there is always so much more to learn. The best sportspeople in the world have coaches who the athletes can out-perform at their given sport, but their coaches bring other attributes — typically around, technique, conditioning, and mental training — that help their charges rise to ever-greater levels of performance.

How?

I like to model the coaching engagement on the Tuckman model, also known as "forming, storming, norming, performing".

The forming stage is about getting to know each other and sense-making: where is there room to learn and improve? What are the strengths that can be harnessed? Where are the weaknesses and blindspots that need recognition?

In the storming stage I challenge some pre-conceptions and maybe this is resented: after all hearing that you're not perfect is typically a bit of a blow to the ego. Or maybe we disagree on where the work needs to be done. If I believe that what I'm going to raise is particularly challenging I may prepare the ground by asking, "Would you like to hear the truth, or the comforting lie?". So far people have always asked for The Truth, but this does help them steady themselves!

Having navigated the storming stage we can start to set some norms about how we're going to work together: different people learn differently, and a nice aspect of bespoke coaching is that we can tailor the techniques and style more so than in a mass-production, get with the program style.

Finally: performing. Having built up rapport and established some norms we are set up to engage in the serious business of learning and improving.

My actual coaching cycle looks a bit like this:
  1. Identify an area for improvement
  2. Engage in some targeted learning
  3. Relate that learning to on-job-work, with coaching support
  4. Practice, practice, practice, correct, practice, adjust, practice, practice, ...
  5. Reflect and improve more, maybe identify another area to improve
  6. Profit!

What Else?

One of the great lessons I learned from undertaking a Diploma of Education is that learning should centre on the learner and pretty much every style of teaching works for some (but not all) learners in some (but not all) contexts.

Therefore I aspire to have a wide variety of tools at my disposal, plus the judgement to pick a suitable approach for particular learner(s).

This jibes nicely with my personal desire to keep learning, improving and exploring, both for my own benefit, and to help serve my clients. A few key areas of personal learning that inform my coaching approach are: martial arts (25 years and counting), improvisational theatre (past), Integral Facilitation (current),  and — of course! — parenthood (ongoing ;-).

Key take-aways

In my coaching approach I emphasise
  1. Capability development over fixed goals
  2. A bespoke approach over one size fits all
  3. Reserving sufficient time for continuous improvement (including learning)
  4. Deliberate and repeated practice to internalise new skills
  5. Building self-coaching capability
Or, in three words: Feel the Learn!

Tuesday, November 21, 2017

Getting Started with User Stories

Why User Stories?

In Agile (software development and otherwise) we need suitable items to populate and pull from our backlogs. Well-constructed user stories balance the needs of stakeholders for valuable and meaningful pieces of functionality with the need of development teams for contextually relevant, but not overly prescriptive work items.

Relevant Agile Principles

Effective use of User Stories contributes to mutiple Agile Principles:
  • Continuous Delivery of Value
  • Welcome changing requirements
  • Business people and developers work together daily
  • Continuous attention to technical excellence
  • Simplicity is essential
If you find that your User Stories aren't helping with these aspects, some reflection is in order!

What are User Stories?

User stories are ideally small chunks of functionality and have become the de facto standard for backlog items. When they aren't small we call them epics or features, and do out best to split 'em down.

The ideal user story satisfies the somewhat famous INVEST criteria (due to Bill Wake):
  • Independent: user stories can ideally be developed in any order, allowing prioritisation of the backlog
  • Negotiable: not over-detailed so as to allow co-creation between customer / stakeholders / product owner and the developers
  • Valuable: it needs to be valuable to the customers or end-users
  • Estimable: a rough sense of size (as well as value) is needed to prioritise the backlog
  • Small: small items can be completed relatively quickly, enabling flow
  • Testable: we want explicit criteria for completion, so we can tell when a story is "done"
Tip: Don't get too hung up on INVEST at first, but keep coming back to it as you build your intuition for what makes a good user story.

How to Create User Stories?

Old school user stories were fairly informal and followed the 3Cs:
  • Card: Written on a 3" x 5" index card, by sticking to one side of a card they were necessarily brief
  • Conversation: "The card is a placeholder for a conversation". The description on the card was intended to be elaborated through conversation between developers and the customer representative or product owner.
  • Confirmation: The back of the card would sketch out minimal acceptance criteria or tests of completion.
Pros
  • Rapid, lightweight, and tacticle
  • Easy to sit down as a group and write cards individually, then combine and re-write
Cons
  • The Conversation aspect practically mandates high domain knowledge and constant access to a customer representative or Product Owner
The newer school, arising from Behaviour Driven Development (BDD), is more formal. The User Story now describes Who?, What? and Why? to give more context, or (more formulaically):

"As [a] ... I want ... So that ..."

And the acceptance criteria are typically specified in Given [current state] When [event] Then [effect] format.

"Given ... When ... Then ..."

Pros
  • Seems to work better for less experienced teams
  • Lends itself to test automation (especially the Given When Thens)
Cons
  • De-emphasises the Conversation aspect, which aids co-creation and iteration
Use whatever works. Try both (and try the other style periodically).

Who writes user stories?

User stories should be written collaboratively by the development team, the product owner and stakeholders.

Often it is delegated to Business Analysts, but their role should be more around facilitating and editing.

What else?

Small stories may be decomposed further into technical tasks, if this is useful for the development team.

Sometimes there will be a piece of work that is meaningless to end users and stakeholders, but makes sense as a cross-cutting piece. These often represent so-called non-functional requirements (NFRs) and that's ok. Often these pieces are referred to as technical stories or architectural epics. They should be the exception rather than the rule.

Other items can appear in product backlogs:
  • Defects
  • Spikes: short investigations
  • Learning and improvement items
Rather than putting user stories straight into a backlog, they can be organised into a user story map. And that's a great move!


Thursday, November 9, 2017

Getting started with Scrum

Here are some notes I've made to act as a prompt for new or newish Scrum Masters to look over ahead of a coaching session with an experienced Coach. The crux of the matter is that Scrum is designed to reveal problems and encourage certain useful patterns of behaviour, while setting the stage for ongoing improvement via inspection and adaptation.
  • What are you doing? How's it going?
  • Are you experiencing any of the common challenges listed below? Or other challenges?
  • Let's talk about it!
Further reading:
* * *
“Scrum isn’t a silver bullet; it’s a silver mirror.”
“Teams that finish early accelerate faster.”

Keys
  • Think of Scrum as a system for delivering and improving, that can itself be improved.
  • Understand the intent behind the practices; don’t just follow them ritually.
    • Ask “Why?” and don’t be satisfied with simplistic answers.

Scrum in a nutshell*
  • Set a sprint length of 1 to 4 weeks (and stick to it)
  • Start of sprint: Set a meaningful goal; pull an amount of work from the Product Backlog into the sprint backlog that you can reasonably expert to finish in the sprint, while reserving learning / improvement time, and saving some capacity for urgent, unplanned work
  • During the sprint:
    • Hold a daily stand-up
    • Hold a set number of refinement sessions during the sprint to help the Product Owner prepare the upcoming items nearing the top of the Product Backlog
    • Check completed work against your explicit Definition of Done
  • End of sprint: Review / demo, hold a retrospective

*This is a process view, and doesn’t get into the roles or finer points.

Some common challenges

  • Unfinished work at the end of the sprint
  • Learning / improvement time gets squeezed out
  • Coping with “surprises”
    • Unplanned work
    • Unexpected absences
    • Unexpected work item complexity
    • External blockers
    • Other impediments
  • Poorly defined work or acceptance criteria
  • Difficulty in breaking work into small chunks
  • Team members with “nothing to do”, and lacking the skills to help others
  • Uninspiring sprint reviews / demos
  • Retrospectives feel like a waste of time
  • Lack of follow through on retrospective actions