Disciplined Agile
by Tatsiana Balshakova,
Mark Lines, Mike Griffiths, James Trott, Bjorn Gustafsson, Curtis Hibbs, Scott Ambler
This blog contains details about various aspects of PMI's Disciplined Agile (DA) tool kit, including new and upcoming topics.
View Posts By:
Tatsiana Balshakova
Mark Lines
Mike Griffiths
James Trott
Bjorn Gustafsson
Curtis Hibbs
Scott Ambler
Past Contributors:
Joshua Barnes
Michael Richardson
Daniel Gagnon
Valentin Tudor Mocanu
Kashmir Birk
Glen Little
Klaus Boedker
Recent Posts
DA 5.6 is released
Disciplined Agile 5.5 Released
Choose Your WoW! Second Edition Is Now Available
Requisite Agility applied in Project Management
Disciplined Agile and PMBoK Guide 7th Edition
Categories
#ChoiceIsGood,
#ChooseYourWoW,
#ConsumableSolution,
#ContinuousImprovement,
#CoreAgilePractices,
#experiment,
#Experimentation,
#GuidedContinuousImprovement,
#Kaizen,
#LifeCycles,
#ProcessImprovement,
#TealOrganizations,
Adoption,
agile,
agile adoption,
Agile Alliance,
Agile Business Analyst,
Agile certification,
agile data,
agile governance,
agile lifecycle,
agile metrics,
agile principles,
agile transformation,
Agile2018,
Agile2019,
Agile20Reflect,
AgileData,
Analogy,
announcement,
Architecture,
architecture,
architecture owner,
Articles and publications,
Asset Management,
Atari,
Backlog,
Barclays,
being agile,
benefits,
bi,
blades,
book,
Branching strategies,
Browser,
Business Agility,
business intelligence,
business operations,
capex,
Case Study,
Certification,
certification,
charity,
Choose your WoW,
CMMI,
cmmi,
Coaching,
Collaboration,
Communications Management,
Compliance,
Compliancy,
Conference,
Construction,
Construction phase,
Context,
Continuous Improvement,
coordination,
COVID-19,
Culture,
culture,
Cutter,
DA,
DAD,
DAD Book,
DAD discussions,
DAD press,
DAD roles,
DAD supporters,
DAD webcast,
DADay2019,
Data Management,
database,
dependencies,
Deployment,
Development Strategies,
DevOps,
disaster,
Discipline,
discipline,
Disciplined Agile,
disciplined agile delivery,
disciplined agile delivery blog,
Disciplined Agile Enterprise,
disciplined devops,
Documentation,
Domain complexity,
dw,
DW/BI,
Energy Healing,
Enterprise Agile,
Enterprise Architecture,
Enterprise Awareness,
enterprise awareness,
Essence,
estimation,
Evolving DA,
Executive,
Experiment,
facilitation,
FailureBow,
feedback-cycle,
finance,
Financial,
FLEX,
Flow,
foundation layer,
Funding,
GCI,
GDD,
Geographic Distribution,
gladwell,
global development,
Goal-Driven,
goal-driven,
goals,
Governance,
GQM,
Guideline,
Hybrid,
Improvement,
inception,
Inception phase,
India,
information technology,
infosec,
Introduction,
iterations,
Kanban,
large teams,
layer,
lean,
Lean Startup,
learning,
Legal Project Management,
LeSS,
Lifecycle,
lifecycle,
Manifesto,
mark lines,
marketing,
MBI,
Metaphor,
Metrics,
metrics,
mindset,
Miscellaneous,
MVP,
News,
News and events,
Non-Functional Requirements,
non-functional requirements,
Non-solo development,
offshoring,
Operations,
opex,
Organization,
Outsourcing,
outsourcing,
paired programming,
pairing,
paper,
People,
People Management,
phases,
Philosophies,
Planning,
PMBoK,
PMI,
PMI and DA,
PMI Chapter,
Portfolio Management,
post-format-quote,
Practices,
practices,
Principle,
Process,
process improvement,
process tailoring,
Product Management,
product owner,
Product Owners,
productivity,
Program Management,
Project Management,
project-initiation,
Promise,
Quality,
quality,
rational unified process,
Refactoring,
Reiki,
Release Management,
release management,
Remote Training,
Remote Work,
repeatability,
requirements,
Requirements Management,
research&development,
responsibilities,
retrospectives,
Reuse,
Reuse Engineering,
ride for heart,
rights,
Risk Management,
Risk Management,
Risk management,
Roles,
RUP,
SAFe,
sales,
Scaling,
scaling,
scaling agile,
Scheduled Workshops,
SCM,
scorecard,
Scrum,
ScrumMaster,
SDLC,
Security,
security,
self-organization,
SEMAT,
serial,
skill,
solutions software consumable shippable,
Stakeholder Management,
strategy,
Support,
Surveys,
Teal organizations,
team development,
Team Lead,
team lead,
Teams,
Technical Debt,
Teleconferencing,
Terminology,
terraforming,
test strategy,
testing,
time tracking,
Tool kit,
Toolkit,
tools,
traditional,
Transformation,
Transition iteration,
transition phase,
Uncategorized,
Upmentors,
Using PMI Standards,
value stream,
velocity,
vendor management,
Virtual Training,
Workflow,
workflow,
workspaces
Date
| 
I recently wrote a detailed article summarizing my thoughts about Geographically Distributed Agile Teams. The article addresses a series of questions that I suspect you’ll find interesting:
- What does it mean to be geographically distributed?
- Are agile teams geographically distributed in practice?
- How does geographic distribution relate to other scaling factors?
- What are the potential benefits of geographic distribution?
- What are the risks associated with geographic distribution?
- How do we address those risks?
- How do we organize a geographically distributed agile team?
- How does geographic distribution affect tooling?
- Is geographic distribution a good idea?
- Where do we start?
- What other resources exist?
I hope you enjoy the article. Feedback is always welcome.
|
Posted
by
Scott Ambler
on: October 08, 2014 02:46 PM
|
Permalink |
Comments (0)
Posted
by
Scott Ambler
on: September 12, 2014 02:43 PM
|
Permalink |
Comments (0)
| 
At the end of July I spoke at the Agile 2014 conference in Orlando about what it means to be an agile enterprise. Part way through that presentation I spoke about the differences between producing potentially shippable software, one of the mantras of the Scrum community, and potentially consumable solutions as promoted by DAD. To do this I walked people through what I call the glass of water analogy. Here’s how it went:
I had a glass of drinking water. I took a sip from the glass to verify that the water was clean and the right temperature for drinking. The water was very refreshing and was something that I thought others would enjoy. It was my opinion that this glass of water was potentially shippable. I took another sip and then offered the water to the audience, there was over 200 people in the room, yet nobody was willing to drink from my glass. Shocking! I even singled someone out and tried to bully him into drinking my water (oops, I mean I aggressively marketed the wonderfulness of the water to him). Still, nobody wanted to drink the water. I took another sip and verified that it was in fact still refreshing. It was clear to me that my glass of water was potentially shippable. I could very easily have walked over to anyone in the room and they could easily have drunk from the glass. But everyone chose not to. It was potentially shippable from my point of view, but from the point of view of every single audience member it wasn’t consumable. In a venue where drinks are easily available, not a single person was willing to drink from my water glass (I assume due to a fear of catching my cooties). Had the venue been different, perhaps a desert with no other sources of drinkable liquids, someone might have been interested.
The point is that creating potentially shippable software isn’t sufficient. It needs to be something that people actually want to use, to consume. It must be a true solution that adds real value for them given their current situation. Cootie-laden water isn’t attractive when other drinks are readily available. Similarly, software that is difficult to use compared to other options, that isn’t well supported as other options, or that doesn’t enhance the way that people want to work isn’t going to be very attractive either.
Disciplined agilists focus on producing potentially consumable solutions. High-quality software is clearly part of this, but that software needs to be usable and something that people want to use. It needs to be supported with sufficient documentation. It needs to be supported with adequate hardware. It may even be part of an overall change to the business process and even organizational structure of the people using that software.
“Potentially shippable software” is a wonderful slogan, but we need to do a lot better than that.
|
Posted
by
Scott Ambler
on: September 02, 2014 07:45 AM
|
Permalink |
Comments (0)
| 
Like it or not, functional dependencies occur between requirements. This can happen for many reasons, as we discussed in Managing Requirements Dependencies Between Teams, and there are several strategies for resolving such dependencies. In this blog posting we explore what happens when a functional dependency between two requirements exists AND one requirement is implemented by an agile/lean team and another by a traditional/waterfall team.
In our example requirement X depends on requirement Y. Neither requirement has been implemented yet (if requirement Y had already been implemented, and better yet deployed into production, the point would be moot). When we refer to the “agile team” this team may be following any one of the lifecycles supported by DAD (Basic/Agile, Advanced/Lean, Continuous Delivery, or Exploratory/Lean Startup).
Scenario 1: An Agile/Lean Team Depends on a Serial Team
In this scenario X is being implemented by an agile team and Y is being implemented by a serial/traditional team. From the point of view of the agile team, this is very risky for the following reasons:
- The serial team is likely working on a longer time frame. Disciplined agile teams produce a potentially consumable solution (potentially shippable software in Scrum parlance) on a regular basis, at least every few weeks. A serial team typically delivers a working solution over a much longer time frame, often measured in quarters. The implication is that because Y is being developed by a serial team it may be many months until it is available, compared to several weeks if it was being developed by an agile team. This potentially adds schedule risk to the agile team.
- The serial team may not make their deadline. According to the Standish Group’s Chaos Report, the average traditional team comes it at almost twice their original estimate (e.g. a project originally estimated at 6 months of work takes almost a year). Similarly, the December 2010 State of the IT Union survey found that serial teams were much more likely than agile teams to miss their deadlines. By having a dependency on the deliverable of a serial team, an agile team effectively increases their schedule risk.
- The serial team may struggle to deliver something that is “agile friendly”. Agile teams routinely develop well written, high-quality software that is supported by a robust regression test suite and where needed concise supporting documentation. Although serial teams can also choose to deliver similar artifacts very often their code isn’t as well supported by regression tests and their documentation may be overly detailed (and thereby more likely to be out of date and difficult to maintain). In other words, there is potential for quality risk being injected into the agile team.
- The serial team may not deliver. There is always the risk that the serial team doesn’t implement Y, serial teams often need to reduce the scope of their deliveries in order to meet their commitments, or if they do implement Y it is done too late to be useful any more.
There are several strategies the agile team may decide to take:
- Negotiate a delivery date with the serial team. Once the agile team has identified the dependency they should collaborate with the traditional team to determine the implementation schedule for Y. The agile team now has a release/schedule dependency on the traditional team which is a risk and should be treated as such. The agile team’s high-level release plan should show a dependency on the delivery of Y and their risk log (if they have one) should also capture this risk. The agile team should stay in contact with the serial team throughout construction to monitor the progress of the development of Y. The agile team should also attempt to negotiate early delivery of Y so that they may integrate with it, and test appropriately, as soon as possible.
- Collaborate to develop Y. One way for the agile team to make it attractive for the serial team to implement Y earlier than they normally would is to pitch in and help to do the work.
- Rework X to remove the dependency. One of the general strategies discussed in Managing Requirements Dependencies Between Teams was to rework X so that it no longer depended on Y. This may mean that you reduce the scope of X or it may mean that you deliver part of X now and wait to deliver the rest of X once Y is available.
- Reschedule the implementation of X. Another general strategy is to deprioritize X and implement it after Y is eventually deployed. This is a realistic option if Y is about to be implemented soon, say in the next few months, but often unrealistic otherwise.
- Implement Y. When the lead time is substantial, the agile team may choose to do the work themselves to implement the functionality. This can be viable when the agile team has the skills, experience, and resources to do the work. This strategy runs the risk of Y being implemented twice, once by each team, potentially inconsistently. To avoid this sort of waste the agile team will want to negotiate with the serial team to take the work over from them.
Scenario 2: A Serial/Traditional Team Depends on an Agile/Lean Team
In this scenario X is being implemented by a serial team and Y by an agile team. From the point of view of the serial team, this might be seen as risky for the following reasons:
- They may not understand how a disciplined agile team actually works. Many serial teams are still concerned about the way that they believe agile teams work. This is often because they perceive agile to be undisciplined or ad-hoc in nature, when the exact opposite is true. The implication is that the agile team will need to describe to the seraial team how they work, why they work that way, and describe the types of deliverables they will produce.
- They may want traditional deliverables from the agile team. Disciplined agile teams will produce high quality code, a regression test suite for that code, and concise supporting documentation. Serial teams may believe that they also want detailed requirements and design specifications, not realizing that the tests produced by the agile team can be considered as executable specifications for the production code. The implication is that the two teams will need to negotiate what the exact deliverable(s) will be.
- They may struggle with any changes to the interface. Agile teams are used to working in an evolutionary manner where the requirements, design, and implementation change over time. Serial teams, on the other hand, will often strive to define the requirements and design up front, baseline them, and then avoid or prevent change to them from that point onwards. These different mindsets towards change can cause anxiety within the serial team, the implication being that the agile team may need to be a bit more strict than they usually would be when it comes to embracing change.
The fact is that scenario 2, a serial team relying on a disciplined agile team, is very likely an order of magnitude less risky than the opposite (scenario 1). Either scenario will prove to be a learning experience for the two teams, particularly the one that relies on the other team. Going into the situation with an open mind and a respectful strategy will greatly increase the chance that you’ll work together effectively.
|
Posted
by
Scott Ambler
on: July 21, 2014 07:49 PM
|
Permalink |
Comments (0)
| 
Sometimes functional dependencies occur between requirements that are being implemented by different teams. For example, requirement X depends on requirement Y and X is being worked on by team A and Y is being worked on by team B. This generally isn’t a problem when requirement Y is implemented before requirement X, is a bit of an annoyance if they’re being implemented in parallel (the two teams will need to coordinate their work), and an issue if X is being implemented before Y. For the rest of this posting we will assume that X depends on Y, X is just about to be implemented, and Y has not yet been implemented. Previously in Managing Dependencies in Agile Teams we discussed strategies for addressing such dependencies, including reordering the work or mocking out the functionality to be provided by Y. In this posting we explore the implications of managing requirements dependencies between an agile team and a lean team.
Managing requirements dependencies between an agile and lean team is similar to that of managing dependencies between two agile teams, although there are important nuances. These nuances stem from differences in the ways that agile and lean teams manage their work. Figure 1 depicts how agile teams do so, organizing work items (including requirements) as a prioritized stack (called a product backlog in Scrum). Work is pulled off the stack in batches that reflect the amount of work they can do in a single iteration/sprint. With agile teams the entire stack is prioritized using the same strategy, Scrum teams will prioritize by business value but disciplined agile teams are more likely to consider a combination of business value and risk. Figure 2 shows that lean teams manage their work as an options pool, pulling one work item out of the pool at a time. Lean teams will prioritize work items on a just in time (JIT) basis, determining which work is the highest priority at the point in time that they pull the work into their process. As you can see in Figure 2, they will consider a variety of factors when determining what work is the most important right now.
Figure 1. Agile work management strategy.

Figure 2. Lean work management strategy.

When an agile team depends on a lean team challenge is relatively straightforward. Because lean teams take on work in very small batches, one item at a time, it gives them much more granular control over when they implement something. As long as the agile team lets them know in a timely manner that the functionality needs to be implemented it shouldn’t be a problem. For example, if the agile team is disciplined enough to do look-ahead modelling (an aspect of Scrum’s backlog grooming efforts) then they should be able to identify an iteration or two in advance that they have a dependency on the lean team. At that point the product owner of the agile team should talk with the appropriate person(s) on the lean team to let them know about the dependency so that the lean team can prioritize that work appropriately (perhaps treat it as something to be expedited).
When a lean team depends on an agile team it’s a bit harder, but not much, to address. This time the challenge is with the batch sizes of the work that the teams take in. The lean team is taking in work in a very granular manner, one at a time, whereas the agile team is taking in work in small batches (perhaps two weeks worth of work at a time). From a lean point of view this injects wait time into their process, even though it may just be two weeks, but this wait time is still considered to be waste (muda). Once again the solution would be for the lean team to identify the dependency ahead of time via look-ahead modelling and negotiate with the agile team.
To summarize, requirements dependencies do in fact occur. There are strategies to minimize their impact, in particular implementing and better yet deploying the functionality that is being depended upon before the dependent functionality is implemented, but sometimes it just doesn’t work out that way. So your team will need to be prepared to manage the requirements dependencies that it has on other teams, and similarly be prepared to support other teams with dependencies on them. In this series of blog postings we’ve seen how Agile<=>Agile and Agile<=>Lean dependencies can be managed, next up is Agile/Lean<=>Traditional.
|
Posted
by
Scott Ambler
on: July 07, 2014 04:49 AM
|
Permalink |
Comments (12)
|
"I'll do the stupid thing first and then you shy people follow..."
- Frank Zappa
|