Table of Contents

Johanna Rothman - Scaling Agile Projects to Programs

Premise

Are you trying to scale your agile project to a program, a collection of projects with one strategic objective? If you do what you’ve done with one small project, you’ll get bloat. Instead of bloat or large frameworks, you can use agile and lean approaches to manage your program with small-world networks. Small world networks help each team to remain autonomous, and still collaborate and explore across the program.

The common risks for software programs are how to manage the interdependencies, how to nurture the architecture, how to see the status, and how to release an entire product. When we ask feature teams to collaborate and take responsibility across the organization, the teams can manage many of the interdependency and architecture challenges. With program management, we can see the status and release the entire product.

Learning Outcomes: * How to scale out, not up, to create effective programs * How the teams can self-organize to small-world networks * How deliverable based planning and short deliverables can help a program with agile and non-agile teams * How the program manager is a servant leader and what the program manager does

Attachments: Agile_Program_Management.ScalingCollaboration.key.pdf

Summary

Action / Learning

Presentation

agile_program_management.scalingcollaboration.key.pdf

Jr@jrothman.com @johannarothman Www.jrothman.com

Notes

1988 program - lisp board

What worked -

Clear vision Clear deliverables Feature teams that delivered at least every day Unit tests and systems tests to support collaboration Respect / trust across the organization - eg everyone worked on code base

Program manager - Organize coord several projects Don't tell - make it possible to coord themselves Program of concurrent projects

Programs riskier than projects Big effort, more risk More pieces, more risk Projects don't scale linearly

Types of program Integrated system program - eg smartphone, embedded systems Interrelated programs - operating system and related systems, base products / layered products

Programs How often can you release - SaaS - continuous, every day Boxed software Product with firmware Software with hardware or mechanical components

SaaS means architectural decisions and releasing costs less - make decision as late as possible (this is last responsible moment). Perhaps no sprint zero for architecture Hardware means these decisions cost more, last responsible moment is early

Servant leaders Ask for results you want Ask for estimates, don't mandate Ask for bad news as soon as possible (want to figure out when I need to be involved) Facilitate problem solving where the problems are (not through the hierarchy)

Cynafin framework Complex - unknown unknowns (don't know what's going to get you) - what experiments we need to run Make things resilient Small chunks of planning

How do I make my problem resilient (not how do I prevent problems) Problem is that governance - many come from waterfall days

Scaling agile requires autonomy (on feature teams), collaboration (across teams), exploration

Agile roadmap 6 quarter release plan Wish list - no bearing on reality 1 quarter perspective But hard for teams to plan this out and then stick with them

Planning for 1 or 2 iterations Then use rolling plan

Do for teams, and do for programs

Do you need a 6 month program instead of a 6 quarter roadmap

How often can you release Internally - get it to “every month”

How small can we make our stories

Rank things by value - sometime learning about the risk is valuable

How can I make my program able to change, often Feedback often Change often

Program teams

Solve problems across the organization that the teams cannot solve themselves

Core team - shepherds business value of the product Includes - legal, deployment, marketing, finance etc Program manager talks to everyone else Might also have chief (program) product owner etc

Like Kanban for the core team Reason - people don't understand things finish things if don't understand agile So put Kanban board See action lists

Software program team manages obstacles for feature teams Software program manager Not one from each team Look at feature sets and see which ones are related This is where communities of practice need

Like Kanban board here as well

Agile program management Team manage Commitment How build features Evolve arch

Program management Remove obstacles Collects / explain program status

Small team able to produce on regular basis

Scale out, not up.

What the most effective way to move information in your organization

You have a network in your org - rumor mill You don't have to mandate communication with rumor mill Powerful

It's a small world network

Ask for rumors at every meeting Can use this network

Small world networks work but don't need to have everyone know everyone else

Programs take advantage of network so they don't need hierarchies Because people will talk to each other

Ask people for results you want Then see what the problems are and facilitate resolution

Continuous integration - so I can demonstrate this at the end of month What other options do you have Then see the results.

Always optimize for the total product the total program Not for the team

Allowed to have the time to help others succeed Use small world networks

I would like to see this in two weeks time

Organize the teams - but doesn't really mean do the same thing What matter is that teams release on a regular basis Small batch size small. - not more than a day long

Evolve the architecture

See the flow of work over the organization Manage wip

Use small world network

Feature teams take responsibility Prefer feature team

Experiment if you have component team - try feature team

Use this to drive communities of practice

Collaboration across the organization Not up and down to solve problems Don't call it “Chiefs” - don't have rank Hierarchy slows everything down

Transparent progress Transparent / pervasive communications

Teams collaborate with tests and integration Have systems tests → give to developers day one Unit test as well Plus exploratory

Estimating a program

You might need a high level estimate of everything The farther out it is, the worse the estimate date

What can you do? Work toward a target date or cost How much do you want to invest before we stop

Rank you value Question - should we be doing this at all Business value points Cost of delay - what if we don't do it now Waste

More often you rank / update the roadmap, the more teams will hunk about delivering value

Delivery solves many problems The more teams deliver, the more often you can update the roadmap, the more you get feedback, the more you re-rank the next backlog

Culture of delivery running tested features solve many interdependency issues Swarm across team

See program progress Program level measures Working product is best measure Don't use velocity - use budget?

Epic 1, epic 2, etc with burnup per iteration Stack of epics showing total, with burnup for each epic

Think small to go large Small batch size Technical practices essential - ci, unit tests,system tests support change and help deliver finished features

Release often - see progress, invite collaboration Frequent releases encourage exploration It's agile / lean all the way across