-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGARAGE_METHOD.txt
4437 lines (2212 loc) · 408 KB
/
GARAGE_METHOD.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Garage Methodology
Cloud is more than just a set of technologies. You can’t separate using cloud technology from the organizational, cultural, and process transformation necessary to make use of the technologies to drive your desired business outcomes.
As you modernize your existing applications, move to the cloud, and start to develop new cloud native applications, it can be challenging to know where to start. What areas can you improve upon and what new ways of working do you want to adopt? To meet that challenge, you need a prescriptive approach based on industry best practices and experience in cloud and transformation to guide you through the changes that will enable you to take best advantage of the cloud, to modernize your existing applications, and to develop new cloud native apps. That is what is provided in the Garage Methodology.
The method is rooted in well-recognized and established practices and provides guidance showing the steps you need to take and the tools you need to use to achieve specific outcomes. It provides a unique, holistic point-of-view that is distinctive in the cloud marketplace.
These practices are easy to consume, complete, prescriptive, and open and extensible. The practices are grouped into seven categories that represent the complete transformation lifecycle for cloud with enhancements made to support wider applicability and scale.
The result is a method approach that is proven, aligned with industry best practices, and scalable to any size of engagement.
The method in action
Most journeys to the cloud conclude in a slightly different place than originally envisioned when the journey first began. The prescriptive approach defined in the Garage Methodology guides you in that journey.
Culture. Transform your organization by combining business, technology, and process innovations that help you create teams that quickly learn from market experiences.
Discover. Dig deep into your problem domain, align everyone on common goals and business outcomes, and identify potential problems and bottlenecks.
Envision. Incrementally deliver awesome apps by using Enterprise Design Thinking and related design practices to establish a repeatable approach to rapidly deliver innovative user experiences. Gain an understanding of your user’s needs and frustrations then define the minimum viable product (MVP) needed for your user to have a delightful experience. An MVP helps you to understand the issues, resolve the risks, and begin to experience the benefits that can be derived from the journey to the cloud. MVP’s can be delivered for any entry point; from building a small cloud-native application to show something really quickly, to migrating an application to the cloud, to showing how you can implement Site Reliability Engineering.
Develop. Using test driven development and pair programming, produce high-quality code that you can confidently deliver to production. Accelerate time-to-market by using continuous integration, continuous delivery, and automation to deliver in a fully tested production environment. Adopt a build to manage approach enabling your developers to instrument your application and provide manageability aspects from the beginning.
Reason. Build a solid information architecture that enables you to turn data into knowledge. Develop analytic models using machine learning approaches. Integrate AI into your solutions and into the execution of the method practices.
Operate. Ensure operational excellence with continuous application monitoring, high availability, and fast recovery practices that expedite problem identification and resolution.
Learn. Continuously experiment by testing hypotheses, using clear measurements to inform decisions, and driving your findings into the backlog so that you can pivot to react to customer feedback and requirements.
The practices that you rely on during the delivery of your first MVP can be expanded and used in the next MVP for the same project and across your enterprise. Likewise, a simplified migration of a single application uses the same tooling and processes, such as application affinity analysis, that will scale to thousands of VM’s. The key is that everyone shares the same vision, the same roadmap and workflows, and the same prescriptive guidance through the practices.
Transform and innovate with speed
Culture is key to the success of an agile transformation. Your culture must support small, colocated teams that are autonomous and that can make decisions that are based on efficiency and knowledge. Your squads have a diverse set of skills that support your transformation and enable the team to pivot in response to market feedback.
Why change?
Does your team still use the waterfall method of development, completing one or two major releases each year? Or maybe you adopted agile principles and removed a few barriers but still have silos between development and the operations teams that run the software in production.
The shift to continuous delivery might seem daunting, but it's possible, especially if you focus on shifting the culture and mindset in your team, and ultimately, your organization.
One key to culture change is adopting the startup mindset. To move fast, startups eliminate the barriers between innovative ideas and production. They aren’t afraid of redefining everything from development practices to operations, from testing to production, and from tools to management. A radical transformation requires a culture that is focused on innovation.
Cultural evolution enables key business advantages. When you shift to small, empowered teams with the right organizational roles—including product owner, design, and DevOps—team members can gain a deep understanding of the customers who use their products. Each team can deliver new and improved features that the customer wants and change course based on feedback. Pivoting with speed isn't possible when you deliver quarterly or annually.
What changes?
Change is challenging. Overhauling the culture of a team and then expanding that culture shift to an enterprise starts with team organization.
Culture is key to the success of an agile transformation.
Organize the teams
It used to be common for teams to be hierarchical and spend much of their time creating status charts and communicating their status through the organization. In recent years, innovative companies defined new ways of organizing software development teams.
With the introduction of autonomous, colocated squads, the way that status is collected and communicated changed. Teams have the power to do their jobs and determine the best way to get their work done. As a result, roadblocks and wasteful work are eliminated.
It's ideal to have the team be colocated. Colocation streamlines communication and encourages the team to build a sense of camaraderie. When colocation isn't possible, the team must include all members in the daily standup meeting and in playbacks.
Another key to building a successful team is diversity. A team needs members with various skills, including designers, developers, and testers. A team also needs members who vary in style. You need people who jump in and try things first, people who think things all the way through before they start, and people who think differently than everyone else.
In agile development, a common set of organizational roles exists. Each role has specific responsibilities. Everyone on the team has some level of autonomy, and it's best to create an environment where extensive meetings and consensus building aren't required.
When a team is changing its culture, it takes time to adjust to the different roles and their boundaries. Team members adopt roles and adjust responsibilities as needed.
Understand the fail fast philosophy
Teams must recognize that obstacles are often in the way of getting the right idea. The key is failing fast. Experiment with an idea to see whether it's what the customer wants. Implement only what is necessary to prove the idea, get customer feedback, and learn whether the idea is successful. Even if the idea fails, the team learns from the experience.
Adopting the failing fast mentality doesn't mean a lack of fun. People who work in a fun environment enjoy their work more and produce better results. A little laughter goes a long way!
Adopt the methodology
Transformation to continuous delivery starts with understanding agile principles:
Satisfying the customer through early and continuous delivery
Delivering new function on a short timescale that the team agrees to
Fostering communications across the team through daily standup meetings and playbacks
Developing at a sustainable pace
Reflecting, at regular intervals, on how the team can improve
Depending on how your team wants to organize and work, you can combine agile principles with aspects of Lean development. For example, your team might deliver time-boxed iterations, as prescribed by an agile approach, or it might work in a Kanban approach. The important thing is that the team decides what works best.
Expand the new culture to the entire enterprise
When you're transforming at the enterprise level, establish a center of competency (COC) to educate teams about new practices and tools and to address any problems. A COC is an independent body that consists of representatives from all areas that are affected by the changes. The COC develops common solutions and acquires new skills that are then adopted throughout the enterprise.
Boot camps are a common way to train teams in an organization that is transforming. In a boot camp, a team can acquire deep skills in new technologies and processes in a short period.
Communicate efficiently
Start each day with a daily standup meeting to ensure that the team knows what work is underway and whether any blocking issues exist.
While the daily standup meeting aligns everyone once a day, team members need to stay in constant communication. To enable constant communication, use a collaboration tool, such as Slack. Ideally, a collaboration tool has these capabilities:
Allows both communication in real time and the option to leave a message if someone is away
Stores a history of messages between one or more team members
Allows for the creation of groups so that you can share information across an entire team
Throughout the cultural transformation, make sure that your team stays excited about the change and views it in a positive way.
Build a DevOps culture and squads
The Garage Methodology, including DevOps, is a cultural movement; it's all about people. An organization might adopt the most efficient processes or automated tools possible, but they're useless without the people who run the processes and use the tools. Therefore, building a culture is at the core of adopting the Methodology.
Build culture
A DevOps culture is characterized by collaboration across roles, focus on business instead of departmental objectives, trust, and value placed on learning through experimentation. Building a culture isn't like adopting a process or a tool. It requires the social engineering of a squad of people, each with unique predispositions, experiences, and biases. This diversity can make culture-building challenging.
Improve velocity and quality by adopting a DevOps culture.
Building a DevOps culture requires the leaders of the organization to work with their squads to create an environment and culture of collaboration and sharing. Leaders must remove any self-imposed barriers to cooperation. Typically, operations professionals are rewarded for uptime and stability, and developers are rewarded for delivering new features. As a result, those groups are set against each other. For example, operations professionals know that the best protection for production is to accept no changes, and developers are encouraged to provide new functions quickly, sometimes at the expense of quality. In a DevOps culture, squads have a shared responsibility to deliver new capabilities quickly and safely.
The leaders of the organization must further encourage collaboration by improving visibility. Establishing a common set of collaboration tools is essential. Build trust and collaboration by giving all stakeholders visibility into a project's goals through agile planning discussions and playback meetings.
Sometimes, building a DevOps culture requires people to change. People who are unwilling to change, that is, to adopt the DevOps culture, might need to be reassigned.
Build a squad
The most important thing to remember when you build a squad is that a squad in the most basic sense is a group of people who work together to accomplish a common goal. In a DevOps squad, the goal is usually the delivery of a product or a microservice that is part of a product.
What makes a squad successful? Think about the squads that you've worked with. Several might stand out as favorites. Successful squads demonstrate a few key behaviors.
First, successful squads communicate well. They don't always agree, but everyone contributes. Each person respects the ideas and opinions of other squad members, and when the squad gets together, squad members can freely discuss ideas without regard to hierarchy.
Remember that squads are made of people. Pretending that life doesn't impact work isn't realistic. Often, you spend more time with your co-workers than with family and friends. Be sure to consider how your squad members feel on a personal level. Although the squad has a goal to accomplish, squad members shouldn't feel like cogs in a machine. On a successful squad, squad members can discuss both good and bad topics and maybe even have fun and develop friendships.
Finally, having a common goal is key to the success of a squad. Every member of the squad must understand that goal. To understand your squad's common goal, use Enterprise Design Thinking to define a minimum viable product (MVP), the infrastructure to build the MVP, and the related rank-ordered backlog of stories. By planning work from the backlog and participating in playbacks, everyone stays in sync as the squad moves toward its goal.
Squad characteristics
When you build a squad, several more characteristics are critical to its success as it strives to adopt DevOps in the Method:
Diversity
Autonomy
Colocation
Productivity
Transparency
Blameless root-cause analysis
Peer recognition
Fun
Diversity
The following content is based on "Building diverse teams" by Adrian Cho.
Diversity is an essential characteristic of a healthy, resilient, high-performance squad. People tend to hire and promote others who think like they do; it's natural to want to be around people who are like you. However, to successfully innovate at scale, squads must be able to run at full speed and pivot without tripping. Without diversity, squads might sink into groupthink and are less likely to pivot when they should. When you build a squad, consider three aspects of diversity: diversity of skills, diversity of style, and diversity of thinking.
A common way to think about diversity of skills is to think of multi-disciplined squads that bring together designers, developers, testers, operations, and so forth. Increasingly, though, many organizations are now building squads of full-stack developers where each person must be multi-disciplined.
Achieving diversity of mindset and culture is harder than achieving diversity of skill. In any squad activity, some people tend to move quickly. Others are cautious, waiting for others to move first. If too many people in a squad rush forward, the squad will take unnecessary risks. If most of the squad tends to wait, the squad won't be competitive enough. A well-balanced squad must have a mix of both styles.
When it comes to getting things done, some people are good at starting tasks and others are good at finishing them. Without strong starters, a squad is slow to build momentum. Without strong finishers, the squad might never achieve its goals. A mix of both styles ensures a high degree of collective productivity.
When someone on your squad thinks differently than everyone else, it can be easy to reject that person's opinion. However, think of it this way: the squad is a box. If thinking outside the box powers innovation, embracing the outliers can be the best path to success.
While diversity is important, the size of a squad must remain small. Ideally, a squad's size follows the two-pizza rule and is no larger than 10 people.
Autonomy
The following content is based on "Autonomous, colocated squads" by Scott Will.
What does it mean to be an autonomous squad? It doesn't mean that a squad can do whatever it wants to. Squads should always be working on items that are in alignment with the overall goals of the project. For example, when the project needs the squad to complete a microservice so that the offering can go live, the squad doesn't get to say, "Let's build another version of Solitaire instead." However, the squad does get to determine the way that they will complete the work on the microservice.
In autonomous squads, "autonomous" means that the squads are responsible to figure out how best to do the work that needs to be done. Autonomous squads get to make these kinds of decisions for themselves:
Should we adopt pair-programming, or use formal code reviews?
Should two people pair together for an entire week, or should we switch pair assignments daily?
Should Sally work on the GUI, or should we let Steve, the new guy on the squad, work on the GUI for this story?
Should we all plan to show up at 8:30 AM so we can begin our day together, or should people come in whenever they want to?
Colocation
Most of the time, it's preferable to have a face-to-face conversation with a subject-matter expert rather than read an article. When squad members are colocated, they spend less time writing and reading emails, sitting on long calls trying to convey ideas, and worrying about network outages that keep squad members from checking in code from remote locations. In colocated squads, time-zone problems don't exist. Colocation improves both communication and efficiency.
Colocated squads might be together in a shared, open space. Although having squad members with their own offices in the same building is better than having people scattered all over the place, the goal is to have everyone in the same room so that the squad can build the synergy to improve productivity and morale.
Overcome the obstacles to colocation
Unfortunately, colocation is not always easy to accomplish. The following problems are common obstacles that squads face.
Problem: The squad already has members who are remote. If remote squad members are forced to move to another city, several might quit.
Suggestion: Typically, the reason why squad members are remote from each other is because of skills issues: the right mix of skills is not available at one location. To address this problem, the long-term goal is to create the right skills mix at each location. Obviously, this goal takes time and involves folks learning new skills. In the short-term, the remote employees with the needed skills can train employees who are local. Don't forget: the remote employees will also likely need to learn new skills so that they can become part of a squad that is local to them.
Problem: There is not enough open space to bring squad members together in one place.
Suggestion: Squads have solved this problem in different ways. One squad took over a conference room. Another squad went to one of their other buildings that had a modular floor plan and several unoccupied offices and formed their own squad area. Another squad pursued funding to rent space at a nearby office building that was looking for tenants.
Problem: One of the squad members lives in a city with no option to join another squad; that member is the only employee who lives there. The squad member doesn't want to move. The member is also in a time zone that is 5 hours different than the rest of the squad.
Suggestion: In this case, the best solution depends on the squad. To reach a decision, the squad might consider these suggestions:
Try to find times to work with the remote member so that no one is inconvenienced all the time. For example, if the squad has an 8:00 AM call, move it to noon. Attending a call during your lunch hour is inconvenient, but it's better than forcing the remote squad member to attend a call when it is 3:00 AM in that member's time zone.
Experiment with remote pair programming.
Depending on the budget, the remote employee can travel to the location where the rest of the squad is on a semi-frequent basis.
If squads are motivated to gain the benefits that colocation offers, they will come up with the ideas to make it happen.
Productivity
The following content is based on "Minimizing distractions" by Jan Acosta.
All too often, people reach the end of the day and realize that they haven't accomplished even a small percentage of what they set out to do. Why? Email, interruptions from coworkers, meetings, or a barrage of conference calls are often to blame. Minimizing distractions is a key cultural principle and one that many squads struggle with.
Minimizing distractions focuses on looking at how squads spend their time and then empowering the squad members and their managers to act to reduce the noise, thus allowing them to focus on the critical tasks at hand. The benefits are enormous. Squads report higher job satisfaction because they can focus on doing what they love to do. Productivity is higher because developers can get much more done than they would if they were dealing with constant interruptions. The quality of the code developed is higher as well because a developer's train of thought doesn't get derailed, leading to coding errors or omissions.
How do you minimize distractions? Consider these tips as a starting point:
Decline meetings that are not essential.
Limit meeting attendance to the smallest number of participants possible.
Block time on your calendar to do uninterrupted work. Start with a two- or four-hour block each day. No email, no calls, no getting pulled into discussions; this time is reserved so that you can focus on the tasks you must accomplish that day.
Schedule meetings for the minimum amount of time needed. If you schedule a call for an hour, then you're more likely to spend the hour talking. Challenge yourself and others to see whether you can cover the same material in 30 minutes, or even better, 15 minutes.
Designate an "interrupt pair" for the squad each day. This pair is responsible for handling questions from other squads, attending meetings, and handling any emergencies that might arise. Then, the rest of the pairs on the squad are free to focus on their tasks.
Seek support from your management. Managers want their squads to be as effective, efficient, and happy as possible. If you're struggling with interruptions, or things that take you away from your tasks, lean on your manager for help with blocking out the noise so you can have more time without interruptions.
Transparency
Transparency in the workplace means operating in a way that makes it easy for everyone in your organization to see what's going on. Transparency creates trust across virtual squads and dissolves the boundaries between them. Make sure that your squads operate transparently in these areas:
Code: Everyone in your extended squad must have access to source code. When you define the scope of your organization, consider securing coding practices.
Backlog: Everyone in your extended squad must have access to functional and nonfunctional requirements and their prioritization. By providing details on your decision-making process, you can get the support that you need from the members of your extended squad.
Metrics: Your extended squads must have access to availability and metrics data. Depending on what you're working on, you might also need to ensure that the consumers of your services can access that data.
Incident investigation and problem management: Document information about incidents and lessons learned. Make that information available so that your squad and others can benefit from your experience.
Establishing trust through transparency is key to successful teamwork
Blameless root-cause analysis
Things go wrong. People make mistakes. You need an environment where squad members can share lessons learned to prevent others from making the same mistakes. To create that environment, address any disincentives, such as fear of punishment or reprimands.
Peer recognition
The following content is based on "Peer recognition" by Donna Fortune and Carlton Mason.
People love recognition; it's part of human nature. Recognition builds self-confidence and is an intrinsic workplace motivator.
Different people prefer being recognized in different ways—some people are not fond of public recognition while others are. However, most everyone appreciates peer recognition, and it often has more impact than recognition from leaders or managers. Whether it is for creating outstanding code, fixing a complex bug, or completing an otherwise undesirable challenge, knowing that your peers recognize and appreciate your work feels good.
Peer recognition is a symptom of a healthy squad. Healthy squads are typically far more engaged, collaborative, innovative, and productive.
Establishing a culture of meritocracy, where employees are recognized for their achievements, dissolves the formal hierarchy of an organization. Meritocracies thrive on trust, transparency, and consistency. The silos and political barriers that prevent the sharing of information, balancing workloads, and responding to inevitable failures are broken down. Peer recognition promotes teaming, where once it was "us vs. them." Talent and leadership are recognized within the squad, and the people who are recognized naturally assume greater responsibility within the squad and for the organization's success.
This emergent leadership is prevalent in many open source communities where the engineers who are actively engaged in contributing to and improving the project can gain committer status. The value of your contributions, the mastery of your craft, and your technical credibility, prowess, and knowledge are more important than a title or positional authority.
DevOps cultures thrive instead of stalling, even when faced with disruptions. Fostering peer recognition is an excellent way to enhance a squad's culture.
Fun
When employees have fun in the workplace, they enjoy their work and produce better results. Managers in DevOps environments strive to create an atmosphere that is challenging, creative, and fun for employees and for themselves. For more information about how to create a great work environment, see Fun in the workplace.
Create a social contract
Many squads use a social contract to document their decisions about how to behave and interact. A social contract is a squad-designed agreement for an aspirational set of values, behaviors, and social norms. Think of it as a vision for working on an incredibly safe and powerful squad.
The social contract identifies dysfunctional behaviors and addresses them quickly to mitigate long-term damage. Anyone on the squad can and must enforce the contract by identifying deviations, as people invariably forget agreements over time.
Follow these tips to create a successful social contract for your squad:
Gather all squad members to create the contract. Use a facilitator to ensure that all perspectives are heard.
Make sure that the facilitator asks many questions to encourage conversation: What do we value? What's important? What would make this squad powerful? What can we count on from one another? Think about negative experiences you had on projects and identify ways to avoid those problems in the future.
Allow the participants to voice their thoughts by using sticky notes, either literally or virtually. Give participants 15 - 20 minutes of time to record their thoughts.
Group similar ideas into an affinity-type map.
Prioritize the top 5 - 10 groups and agree on a group label. Those labels become the elements of your social contract.
Squad organization
Each autonomous squad must fit into a larger organization. Spotify defined common terminology that is used in the industry to describe squads and combinations of squads.
Tribes
While autonomous squads must be able to do their work their way, they also fit in a larger organization. Typically, delivering an enterprise-grade application requires work from multiple squads, each of which are responsible for a microservice. When those microservices are combined, the entire product is created.
Spotify uses the word tribe to describe a set of squads, and people from disciplines such as Marketing and Finance, that are aligned around the goal of delivering a product or service.
Guilds
Autonomous squads consist of diverse squad members who have a wide variety of skills. Sometimes, it's important for people who share a common skill to discuss ideas and solve problems within their specialty. Guilds gather people from multiple squads around a common discipline.
For example, each squad has one or two people who are familiar with the continuous delivery tools that are used to build, deploy, and manage the product that the squad is delivering. A Continuous Delivery guild brings together people who do that job from each squad. The guild drives best practices in continuous delivery and acts as a forum where people who are struggling with a problem can find answers from fellow guild members.
Squad leadership
In a self-managing, cross-functional squad, everyone is a leader of some sort at some point. What does it mean to serve your squad as a leader? How do you know whether you're a good leader? In an autonomous squad of 10, each person has plenty of leadership opportunities.
Product ownership: Each squad must have one person who is defined as the product owner. This person is responsible to understand the product that is being delivered. The product owner must ensure that work is represented in the rank-ordered backlog and must set the priorities so that the squad knows what it needs to deliver.
Technical leadership: On a 10-person squad that is responsible to deliver a product, each person has a unique set of skills that he or she uses to reach the common goal. Leadership in this respect is not reporting status, but being the best at a skill and using that skill to help the squad succeed.
Coordination and status reporting: The goal of each autonomous squad is to spend as little time on coordination and status-reporting as possible. However, those tasks still must be done. Squads can strive to minimize the effort on those tasks by using playbacks to convey status to management and by using the rank-ordered backlog to surface plans for upcoming work.
Dynamic leadership
The following content is based on "Self-organized teams" by Adrian Cho.
The concept of self-organized squads might be new in the business enterprise, but many examples can be found in other domains. Unlike the permanent leadership and well-defined hierarchy of a symphony orchestra, a group of jazz musicians might start with one member picking the tunes and counting off the tempo, but then the role of leader moves freely throughout the group, in real time and typically with no explicit communication. How do they do this without avoiding situations where people fight for leadership, or even worse, where no one leads?
In jazz, anyone can take the initiative to explore new possibilities that can lead to moments of wonderful creativity. The risk of failure exists, but the same dynamic leadership means that someone is always there to help preserve the stability. The musicians are adept at practicing leadership on demand because they are equally comfortable leading, following, and switching fluidly between the two. This mindset requires a willingness to let others lead.
Software development squads must be willing to work beyond simple static organizational structures. In a modern dynamic organization, it is common for virtual squads to form for one purpose and disband after they accomplish that purpose. Guilds that exist across multiple squads bring together people of like interest or expertise. People often work simultaneously in many squads, in multiple guilds, and in matrix reporting structures.
Static structures are often ill-equipped to respond to the constant change, chaos, and confusion of the new business world. Where squads are trying to design, build, and operate many microservices instead of a single monolithic application, they must similarly organize into decentralized, independent, loosely coupled squads. Otherwise, as Conway's Law suggests, a monolithic organization is constrained to create monolithic software.
This delicate balance between individual and group performance is the difference between a group that works in synergy, performing as more than the sum of its individuals, and one that is just a group of high-performance individuals. People with the squad-first mindset understand that their individual contribution is vital to the squad's success. They also know that without the rest of the squad, they alone cannot achieve the same success.
In software development, certain indicators of stability must be prized above all else. These indicators include the health of the current build based on the main stream of code, the health of running services with zero downtime as the target, and the health of each squad.
Developers must put these things first to ensure that even as they work independently, explore possibilities to innovate, and push boundaries of personal productivity, the squad and its most prized assets are never compromised. These indicators of stability must be quantified, treated as actionable metrics, and shared widely throughout the squad. In many cases, the squad can use tools and services to monitor and report such metrics as build failures, code complexity quality, uptime, incidents in production, and more.
Summary
Your most important goal in building a squad is to ensure that the squad can collaborate without adding a layer of bureaucracy—a development that would defeat the purpose of adopting a new culture.
Build effective squads
To meet the growing need for high-quality customer experiences and rapid business concept introduction, development organizations must change. Adopting the Garage Method for Cloud can help an organization make the transformation. The Method uses Enterprise Design Thinking, Lean Startup, and agile DevOps concepts to enable continuous design, delivery, and validation of new function. A good way to begin to change is to organize your teams into collocated, autonomous squads before you start to build code.
Many types of squads exist. In a large-scale cloud development project, you can organize into many separate squads or create squads with combined responsibilities.
A squad is a small independent team
A squad is a small, independent team made up of these roles:
A squad leader, who acts as an anchor developer and agile coach for the squad
3 or 4 development pairs who practice pair programming
Each squad has an associated designer, an associated product owner, and can have an associated application architect. These associated roles can come from specialized support squads. An example of a specialized support squad might be the content squad that handles overall design and UX creation for your squads.
Although it's ideal to embed designers and UX content creators directly into a squad, not every organization has enough of those skills to do so. You can centralize that work, which is often related to the work of several squads anyway, into one squad.
Squads that are responsible for developing application functions might be called build squads.
A squad is responsible for chunks of function
Squads implement epics, which are groups of related user stories that describe higher levels of system functions. A single squad can implement one or more epics within a chunk, but an epic is the smallest element of implementation responsibility for a squad. The user stories that define that epic are added to a rank-ordered backlog of user stories. The organization might choose to use Kanban or other tracking methods to manage and maintain that backlog, but the backlog must be kept up-to-date constantly and reprioritized daily.
One way to size user stories is to make them implementable by a single development pair within a single day. Because the team’s implementation speed can change over time, you might need to adjust the sizing. Stories can be broken up or combined as necessary and added to the backlog.
Squads work by using best practices
A squad can benefit from implementing pair programming. When pairs write all the code, it undergoes continuous code review, making it possible to reduce or eliminate formal code reviews. Rotating programming pairs daily spreads the knowledge of individual system elements across the entire squad. The code is continually read, revisited, and revised as new user stories are implemented. This practice has the added benefit of reducing the dependence on any single person on the squad. Using pair rotation with test-driven development makes it possible for any squad member to participate in a pair with confidence.
Pair programming can be a key advantage of the squad model for large-scale organizations. As a squad gains experience and maturity, you can divide it into two squads. A senior squad member becomes the squad leader of the new squad, which is made up of some original squad members plus some newly trained developers. The new squad begins work on a new chunk. The original squad also adds new developers to gain experience with the squad’s code as they work on epics within the original chunk or in a related chunk. In this way, a team can grow quickly.
This combination of practices, plus practices such as daily standup meetings, speaks to the need for squads to be autonomous and completely own an epic or chunk from end-to-end, and colocated. It is difficult to separate pairs across locations. While the overall project team can have squads in different locations, the individual members of each squad should be colocated.
The role of testing in the squad model
In the squad model, the use of automated testing, test-driven development, and pair programming means that you do not need a large, dedicated testing staff embedded in the teams. The skills of the testing staff are needed, but the people can take on different roles. Instead of acting only in a test role, some testers become developers and others use their deep domain knowledge as product owners.
Teams should follow the practice of test-driven development. Test-driven development requires that you write the test before you write any code, using the concept of tests as specifications. This practice ensures that any member of a squad can understand the code. If developers can read a suite of functional tests, they can understand how a particular code element is implemented. The test suite that is developed through this practice must encompass all of the major forms of testing that are required: functional testing, user interface testing, and performance testing. Fully embracing automated testing can dramatically improve the quality of code and can markedly reduce the time spent running manual tests.
A need still exists for a smaller, more specialized testing squad to conduct types of testing that require specialized skills, such as cross-device mobile testing and end-to-end performance testing.
Summary
Adopting the squad model and adopting the principles of Garage Method for Cloud can help your organization stay competitive in today's fast-paced environment.
Follow agile principles
Culture is the starting point for innovation and agile transformation. The Garage Method for Cloud has embraced and evolved a number of core principles advocated in the Agile Manifesto. Agile methodology started with a focus on software development as a way of working that keeps everyone focused on quickly producing working software that meets customer needs.
The "Agile Manifesto" dates to 2001, when software development practices were nothing like they are today. Back then, it was typical to spend a year planning and writing specifications and another year writing and testing code. By the time any software shipped, it was already 2 years behind what customers were looking for.
According to the manifesto, an agile culture values individuals, interactions, working software, collaboration with customers, and response to change. The principles of the Agile Manifesto can guide teams to define, design, develop, and deliver innovative solutions across the entire lifecycle, roles, and disciplines.
Your team or organization might expand on those principles depending on its experience with other practices and methodologies, like Enterprise Design Thinking and Lean Startup, but the manifesto and principles have proven themselves for more than 14 years.
Get started
To adopt agile principles, you need an executive sponsor who actively supports the transformation and who will build a team of people who are passionate about these principles, or the variation that your team decides to adopt.
It's easy to say "these are good principles that we want to embrace." However, many of the principles are harder to adopt than they seem to be. Some of the challenges for this type of cultural transformation include:
Tearing down walls and building collaborative spaces: Even outside the usual corporate buildings, this idea can be tough to sell. However, more enterprise companies are recognizing the need for collaborative spaces.
Building a diverse team: Diversity can take many forms, but most people tend to want to hire people like themselves. As you have more "alike people" on a team, the less appealing that team is to people who aren't like them. Whenever possible, seed your team with diversity in the leadership and with leaders who actively value and pursue diversity.
Keeping a sustainable pace: Agile teams work intensely and collaboratively, even more so if pair programming is being used. Meetings are primarily on demand and as needed; they have focused purposes and are held face-to-face. Social media and personal distractions are minimal because you're intensely collaborating with other people and impacting them if you are not present. When you work at that level of intensity, working long hours is not sustainable. Yet in many corporate cultures, if you're working hard or contributing highly, you're working long hours. That is one of the more difficult cultural norms to change.
Alternatives and related practices
Many of the agile methodologies have taken the Agile Manifesto and done their own interpretation. And other disciplines have similar sets of principles that are applicable to agile methods as applied to the entire product lifecycle.
Fail fast and learn fast
At the heart of every startup and every new product is that "one great idea" that someone thinks the market needs. But not every great idea is that great. Sometimes an idea needs a few changes to become great. Other times, it's hopeless. In the early stages, it's hard to distinguish the good ideas from the not-so-good ones.
Every team's objective is to deliver high-quality function—that great idea that customers love—and to do it fast. One technique to meet this objective is to quickly change course when something isn't working instead of continuing down the wrong path. This technique is known as failing fast.
When you develop applications, you have a limited amount of time, people, and money to get an idea right. The longer it takes you to realize that an idea isn't a winner, the more resources you waste. Conversely, the faster you can verify that an idea is great, the faster you can get more investment to make the idea a reality.
The key to failing fast is to develop enough of your idea to determine whether it's useful to customers. You can have customers validate the function with as little investment as possible, reducing business risk. If a customer doesn't like the new function, you can find out before you invest more time or resources into developing the function and move on to the next idea.
Failing fast requires a culture where the team has the freedom to fail but can learn something from each failure that helps the team succeed faster the next time.
Imagine yourself in a 10-week beginner's pottery course. Half of the students spend the entire 10 weeks working on one clay pot. For those students, the overall grade for the course is based on the quality of that one pot. The other half of the students make as many pots as possible; their grades are based on the quality of pots that they create. At the end of the 10 weeks, an independent expert is brought in to see which pots are the best.
Which half of the class will likely have a higher percentage of great pots? Experiment after experiment suggests that the "trial and error" group will have more great pots. Because the second group of students must try different ideas and techniques, they can more quickly find ideas that work and then use those ideas to produce amazing results.
This idea is at the heart of Enterprise Design Thinking. In the words of David Kelley, "Enlightened trial and error beats the panning of the lone genius."
How to fail fast
You can fail fast—and learn fast—in many ways.
The costliest failure that you can make is investing in a project that your customers don't want. The first step in failing fast is to prove that your intended customers want and need what you're planning to create. Work with your stakeholders and validate your idea.
During the workshop phase of a project where the team and stakeholders define the application features and minimum viable product (MVP), mandate that participants explore "crazy" ideas to see whether elements of those ideas lead to good ones. In this way, teams can quickly separate the good ideas from the others.
In a hypothesis-driven development process, the entire team—design, development, and business—identifies the riskiest assumptions that underpin an idea. Then, the team builds experiments to test them. If the idea is based on flawed assumptions, it fails, and the team can pivot and avoid wasting its limited resources. When the team tests the riskiest parts of the project at the beginning, the cost, risk, and design of the project become more predictable.
When you work with a new project that requires a large infrastructure and hardware investment, such as an Internet of Things (IoT) project, you must validate how the platform and devices affect your design. Implement as little of your infrastructure as possible to validate an assumption and then implement a bit more to validate the next assumption. If a significant part of your IoT platform isn't built before you encounter a failure, you'll have a better idea about where the failure is happening.
From an application-delivery point of view, development teams that use DevOps can get immediate feedback to find out whether code or a deployment is flawed. In this way, a team can move to higher-quality code and a more stable deployment environment.
As your team embraces the notion of failing fast, it gets used to experimenting and recovering from unexpected circumstances as part of the development cycle. Everyone becomes confident that discovering the unknown and reporting on it is respected and treated as a contribution to the project's success. What counts is a great solution that is achieved by making failure and correction part of the team's culture.
Manage your work by using a Kanban
Many development teams use the Kanban method to manage their work. At its core, kanban is a visual representation of work in progress. A kanban board can be as simple as sticky notes and lanes on a whiteboard or your team may adopt web based tools that can be accessed by everyone on your team. On-line kanban boards are especially useful if your team is not colocated.
Kanban has two essential principles: the workflow is visible to the entire team and the work in progress is limited to the capacity of the people who are doing the work. You can't keep adding work to the queue and expect it to get done—or done well.
By following the Kanban method, teams can deliver features quickly, reduce the inefficiencies of multitasking, and identify bottlenecks and dependencies.
The basic kanban workflow is as follows:
New: Work that is new to the team and has not yet been added to the backlog.
Ranked backlog: Work that is waiting to be started, ranked in order of importance and size.
Work in progress: Work that is in progress by a team member.
Under review: Another member of the team checks the work.
Done: If review goes well, the work is complete and ready for production.
Repeat: A team member takes the next item from the backlog.
Types of kanban boards
The format of your kanban board might vary depending on the group you're working with. For example, a management team might use a board to track broad ideas or epic stories. A development team might use its board to track the backlog and work that is in progress and completed.
Three types of kanban walls and headers are common:
Portfolio walls: For management-level tracking of whole projects or epics across a larger organization
Headers: Idea, In Discovery, In Delivery
Program walls: For project-management-level tracking of a project across several teams
Headers: Backlog, In progress, Under review, Done
Team walls: For team-level tracking of work
Headers: Backlog, In progress, Under review, Done
Create a kanban board
Keeping the basic workflow in mind, gather your team, grab a few sticky notes and a whiteboard, and create a kanban board:
Draw columns and rows by using tape or a marker on a whiteboard. Alternatively, stick paper or plastic to a window or empty wall.
Put headings on the columns that correspond to your workflow. The headings depend on the work that you're tracking. You might use headings like Backlog, Doing, and Done, or Idea, In Discover, and In Delivery.
Write a short description of each piece of work on cards or sticky notes.
Use magnets, pins, or adhesive to arrange the cards or sticky notes on the board to show the status of the work flow.
You can also use tools such as ZenHub or Trello to create a web-based kanban board for your team.
Use your board to keep everyone on your team in sync and moving forward on their work.
Kanban for the enterprise
If you're orchestrating work across dozens of teams, you need more than a whiteboard and sticky notes. To meet the needs of a complex organization, you must scale up more than the tool. You must adjust the Kanban method, too.
For a large organization, you need a complete kanban system: a kanban of kanbans. You must apply the kanban process at the highest level first so that hundreds of tasks aren't haphazardly assigned to the teams. If the organization applies and coordinates the kanban processes at each level, the teams can understand the priorities and the decision-makers have a clear view of progress and capacity.
Run daily stand-up meetings
Each day, your team must discuss how things are going and whether any issues are blocking progress. This discussion is accomplished through the daily stand-up meeting.
The value of stand-up meetings
Conducting daily stand-up meetings provides value in many ways. The daily discussion:
Improves team building and collaboration
Exposes blockers that affect team members
Facilitates knowledge sharing across the team
Gives team members a few minutes away from their work
How to run an effective stand-up meeting
Before the meeting starts, team members must be ready to commit to a daily goal and answer three questions:
When answering the daily stand-up questions, each team member's answers must align with the tasks that are assigned to them in the kanban board or your other work-item tracking system.
Answers are given in past or future tense. For example, "I completed this" or "I will complete this." Using the present progressive tense, such as "I am working with XYZ," are considered poor form. The idea is to report commitments to the team, not current status, which is already represented in the kanban board.
Answers must cover only one day or the time that has passed since the last stand-up meeting if several days have passed. If a task is too big to be contained in a day, report what part of it will be or was completed. For example, instead of "I am working on task X," say "Tomorrow, I will complete the unit tests for work item X, which is the coding task for the multi-threading story."
Here are some examples of good and bad responses to the daily stand-up questions.
Work with your team to stay on track and answer the questions so everyone is in sync and blockers can be addressed quickly to keep everyone moving forward on their work.
Effective meetings also follow these practices:
The goal is to keep your daily stand-up meetings concise and no longer than 15 - 20 minutes.
Good participation happens in fewer than 90 seconds. Questions from others or the squad lead are asked and addressed after all other team members participate.
Discussion about blockers and questions about what is being done happen outside of the meeting. To discuss those matters, schedule additional time at the end of the meeting or hold another meeting to discuss issues that are more involved. The key is that any person who is not involved in the issue can leave the meeting and return to their work.
Use the daily stand-up meeting to ensure that there is always open and honest communication across your team. In doing so, your team will become stronger over time.
Discover
Define your problem domain and align on goals
You can't solve a problem without first understanding it. The Discover practices help your team dig deep into your problem domain, align everyone on common goals, and identify potential problems and bottlenecks. They also help you self-assess and understand how prepared you are to tackle issues.
Why change?
In the past, you likely had key deliveries on a quarterly, semi-annual, or even an annual schedule. You built a business case that was based on upgrading your applications in a new release. New features had a long lead time. If you didn't deliver exactly what your customers wanted, they had to wait until the next scheduled release to see their new function requests implemented.
As you shift your culture and way of working to embrace the cloud, continuous integration and delivery, and related practices, your organization adapts to the new way of working. It's important to align your business operations with your new way of delivering application features. You must ensure that you define clear objectives to guide what is being delivered, when, and by whom. You must also ensure that you have a clear understanding of the total cost of ownership for your cloud platform.
What changes?
To become aligned, your team needs to dig deep into your problem domain, establish common goals, and identify potential problems and bottlenecks. By using the Discover practices, you can complete a self-assessment to understand how prepared you are to tackle the issues that you're trying to solve.
Understand your problems and align on common goals.
Define business objectives
Define business objectives with measurable outcomes and an identified business sponsor. As you define your objectives, you need to identify any perceived risks and potential rewards outside the stated qualitative or quantitative measures. While you no longer create a huge business case that is based on knowing the full function of a release, you can react fast to the changes in the market and the functional and nonfunctional requirements that your customers need.
Identify bottlenecks
As you define your business objectives, it's important to review your DevOps process. Work with the team to create value stream maps to identify bottlenecks and waste in your process flow and identify new practices to adopt.
Waste and bottlenecks include these examples:
Developing functions that aren't required by your stakeholders
Manually deploying your infrastructure
Unnecessary tasks, such as repeatedly communicating status
Identify changes that are critical to resolving the bottlenecks and waste. Determine how you can improve your processes to become more efficient. At the same time, you must ensure that your whole organization agrees on a solution. By doing so, you can be certain that by fixing a bottleneck in one place, you're not creating one in another.
Define organizational roles
DevOps at scale calls for several specific roles, each of which requires unique skills and domain knowledge. Build the team that helps you meet your business objectives. In the most basic sense, a team is a group of people who work together to accomplish a common goal. For a DevOps team, the goal is usually the delivery of a product or a microservice that is part of a product. To achieve success, make sure that the key roles are filled.
After your team is established, team members must have a common understanding that the goal is to minimize distractions and deliver a product that delights customers. Distractions include lengthy meetings, generating status reports, and doing any other activities that distract the team from delivering its work.
Be sure to encourage the entire team based on business outcomes instead of creating conflicting individual team incentives. When people know what their common goal is and how their progress toward that goal is measured, fewer challenges exist from teams or practitioners that have their own priorities.
Communicate efficiently
As you define the roles on your team, ensure that all participants, including the product owner, development, operations, and management, clearly understand the business goals that the team must meet. The goals must be measurable and reflected throughout the method, from defining the MVP to delivering the application into production to running experiments that validate that what you delivered meets the business goals.
Define your business objectives
In many ways, a business objective is like a hill. A hill communicates an intent for a project through statements or diagrams that can provide both direction and purpose. You use a hill to frame a problem in terms of a user outcome, but the hill doesn't describe or prescribe any type of implementation.
In a hill, the statement of purpose identifies a user to be rewarded and describes the end state that you want to achieve. The user and the end state are the "who" and the "what." Finally, a hill includes a statement of differentiation. The differentiation is either a qualitative or quantitative measure of "wow." Therefore, a hill is a statement of purpose that is oriented around who, what, and wow.
An entry point to dialogue
Although they're alike, a business objective serves a different purpose than a hill. A business objective presents an anchor point for beginning a dialogue or holding a discussion. The business objective might represent a hypothesis or postulate an area of need. You craft a business objective as a single atomic-level business-oriented statement. In this case, atomic means a fine-grained level of purpose within a business context, not a technical context.
While you can decompose a hill into a series of sub-hills, you craft a business objective at its atomic level. Within the lifecycle process, a vetted business objective can be recast into a series of hills or sub-hills when you need to define a technical project.
While a business objective doesn't need to specify or be oriented toward a specific user or community of interest, the business objective must have a sponsor.
The focus on "why"
A business objective must center on a measurable outcome, or the "why." In the hill terminology, the "why" is the "wow." If the outcome is oriented toward the near-term, construct the measure in quantitative terms. If the outcome is oriented toward long-term needs, construct the measure in qualitative terms.
A business objective must center on a measurable outcome.
An example of a quantitative measure is a gain of USD 1 million. An upward trend is an example of a qualitative measure.
Identify your business objective during a brainstorming session. In later discussions, you can evaluate the business objective and replace or refine it as needed.
A path to broader understanding
You might state a business objective as a need to evolve a capability, replace a capability, or establish a new capability. In your discussion to evaluate the why-centered business objective, you must understand why the measurable outcome must be met.
This discussion is a natural means to bring in other necessary areas of interest:
Who benefits? Who participates? Who is impacted?
When is something triggered? When does something participate in the business cycle?
Where are all the places of business activity? Where are the customers? Where does the computer processing occur?
How is something to be achieved? How should a process work?
When you understand the "why," you gain an in-depth, holistic view of the business purpose. That view helps you understand what is known and what can be known: the data or information, the metadata, and the data provenance that you need to support the business.
Work toward stability and viability
Some of the data or information to support a business objective can be directly generated during the normal course of business. Other data might need to be generated or even acquired. Potentially, some information might remain unattainable.
Part of the evaluation of a business objective is to identify any perceived risks and potential rewards outside the stated qualitative or quantitative measures.
In any computer application, the aspects of data management represent a challenge. By understanding a need and how it correlates to a dependency on data and information, you can yield a hill or an MVP that is more stable because the underlying data schemas are more stable over time. This means that the efforts to build a data store, a database, or a data platform might naturally follow a different scope than the application code counterpart.
For some, it's all about the data
By starting with a business objective, you can uncover the knowledge that your organization must build and cultivate. That knowledge is the data or information, depending on your preferred viewpoint.
In the modern enterprise, data is critical. Most organizations require computer systems, and all that an organization knows exists within its databases. An organization can't know anything more than what it stores. To avoid data management becoming burdensome and expensive to maintain, take a long-term view of data management. That view begins with discussions on each atomic business objective.
Identify bottlenecks by using value stream mapping
Many of you are no doubt familiar with Gene Kim's book, The Phoenix Project. In that book, Gene mentions Eliyahu Goldratt, who created the Theory of Constraints. One of Goldratt's observations is that any improvement that is made to a process either before or after a process bottleneck only makes the overall efficiency of the process worse.
When you think about that, it makes sense. However, do you know where your bottlenecks are? You might be familiar with a few bottlenecks that you're regularly confronted with; for example, it might take 5 hours for a build to finish. But is that bottleneck the biggest one in the entire flow of getting value to your customers? Even if it takes 5 hours for a build to complete, does that matter if it takes a full week to deploy the code into production?
A value stream map is a tool for evaluating processes to identify bottlenecks, waste, and improvement opportunities. Identifying the biggest bottlenecks in a process stream is where value stream mapping shines.
Evaluate your processes using value stream mapping.
The benefits of value stream mapping
Identifying bottlenecks is the most readily-apparent benefit of value stream mapping. It helps the entire organization see where the biggest bottleneck is and how it negatively affects getting value to customers. To use the previous example, if you're aware only of the 5-hour build time, you might be inclined to focus effort on improving that alone. If you don't understand the more significant bottleneck—the week required for deployment—improving the build time will likely make the downstream bottleneck even worse. However, if the bigger bottleneck is understood by everyone in the organization through the use of a value stream map, it is clear that the organization must focus on reducing that delay to the benefit of everyone, especially customers.
How to get started with value stream mapping
The steps to create and use a value stream map are straightforward:
Identify the steps of the entire process. Keep it simple by identifying the most typical scenario through the process.
Collect data: record the average time to complete each step and the average wait time between each step.
Create a simple flow diagram that shows the "value add" times for each step and the "wait times" between each step. For an example, see the following image.
Identify the biggest delay in the flow and determine why the delay is as long as it is. Then, create a plan to reduce the delay and act on it.
In the example value stream map, you can see that the biggest delay is the week between when a defect is added to the queue and work starts on the defect. By having this value stream map available, the organization can ask questions and come up with solutions:
Is the delay due to skills issues?
Is the delay due to not having enough people available to fix defects? For example, is our backlog too large?
If the backlog is large, do quality issues need to be addressed?
Is there too much emphasis on creating capabilities at the expense of fixing defects?
For example, if the problem is due to not having enough people to handle the defect backlog and create capabilities, the organizational leadership could repurpose an open headcount requisition (req) from sales, support, or administration and give it to development to solve the long delay in getting defect fixes to customers.
If an open headcount req is not available, the leadership can agree that slowing down the delivery of new features is needed so that the team can drive down the backlog of defects. Without a value stream map that shows the need for a change, a shared understanding and agreement on the solution is less likely to happen.
In sum, value stream maps are a simple and effective way to identify bottlenecks in an end-to-end process flow. They also help everyone see where changes are most critical so that the whole organization can agree on a solution.
Roles in a DevOps organization
A common misconception about agile development is that everyone can do everything. In fact, the opposite is true. To run a disciplined agile process, well-defined roles and responsibilities are essential.
Although the names of these roles might differ from what you call them, you'll likely find that their descriptions match roles that you're familiar with. A key aspect of being agile is that people are empowered to make decisions without extensive meetings and building consensus. This aspect can be a significant challenge in some enterprise organizations. Project cadence with playbacks to all interested parties is key to making the whole organization more comfortable with decisions.
Core roles in an agile squad
In the most basic sense, a team is a group of people who work together to accomplish a common goal. For a DevOps team, the goal is usually the delivery of a product or a microservice that is part of a product. To achieve success, make sure that the key roles are filled.
Product manager (product owner)
The role of the product manager is critical. The product manager ensures that the team creates an engaging product and delivers business value by meeting the needs of the markets. Product managers must understand company strategy, market needs, the competitive landscape, and which customer needs are unfulfilled.
The product manager has these responsibilities:
Owns the scope of the project, works with sponsor users, identifies personas, defines the minimum viable product (MVP), and defines hypotheses
Collaborates with designers on the overall user experience, attends playbacks with sponsor users and stakeholders, and collaborates through user testing
Defines, writes, and ranks the user stories that direct the design and development work
Accepts user stories; that is, decides when a user story has delivered the MVP
Decides when to go to production and owns or collaborates on the "Go To Market" plan
Larger projects might have more than one product manager. Ideally, the project is divided into components or services that individual squads can work on, and each squad has a product manager who provides direction.
The product managers must understand and coordinate requirements from other components of an overall solution. Ultimately, one voice must direct the design and development work of a squad.
Sponsor
The sponsor is typically an executive who has the vision and owns the overall delivery and success of the project. Ideally, the squad has playbacks and brings any issues to the sponsor each week. Part of the sponsor's job is to ensure that the squad has everything it needs to succeed and to support it in its use of agile methods.
User experience (UX) design lead
The UX design lead is responsible for all aspects of the project's user experience. The goal of every project is to create experiences that delight users. Reaching that goal requires a strong and experienced design leader who can oversee all aspects of the design, from the initial workshop through visual design and user testing.
The UX design lead has these responsibilities:
Leads design thinking practices, such as persona definition, empathy mapping, scenarios mapping, ideation, and MVP definition.
Creates great user experience concepts and produces wireframe sketches to communicate the experience with the broader team.
Drives collaboration with the extended design team, development team, and product management team to maximize innovation.
Collaborates with visual designers to deliver high-fidelity designs.
Ensures a consistent user experience across all facets of an offering, working with UX leaders in other squads when necessary.
Plans and runs user testing to ensure that real-world feedback is injected in all phases of the project. In some projects, a dedicated user researcher assumes this responsibility.
Larger projects might have a UX designer or dedicated user researcher who works with the UX design lead. In those cases, the UX design lead is responsible for all aspects of the experience, but the UX designer might create a few of the design artifacts.
Visual designer
The visual designer converts the user experience concepts into detailed designs that emotionally connect with users.
The visual designer has these responsibilities:
Uses his or her understanding of color, fonts, and visual hierarchy to convert conceptual designs into detailed designs that developers can build
Creates all the necessary visual artifacts, including images, illustrations, logos, and icons
Ensures a consistent application of corporate styles and branding, or where appropriate, suggests deviations from styles and branding
Sponsor user
A product that doesn't satisfy a real user need is a failed design. The best way to ensure that your project meets users' needs is to involve users in the process.
A sponsor user is a real user—someone from outside your organization—who will use the product that is being built. A sponsor user must be carefully selected so that he or she accurately represents the needs of the widest possible user base. In some cases, you might want more than one sponsor user.
The sponsor user has these responsibilities:
Represents the needs of the user throughout the process
Participates in all phases of the project, from the initial design workshop through design, development, and user testing
Ensures that all decisions reflect the needs of the user
In some cases, the sponsor user might be the person who demonstrates the design or prototypes to other stakeholders. What better way to show the value of a design than to have a real user show it and explain why it matters?
Developer
Developers build code by using core agile practices such as "keep it simple," test-driven development (TDD), continuous integration, polyglot programming, and microservice design. Agile development requires more collaboration than is required in the waterfall model.
As part of a modern, agile DevOps team, developers must be adept at rapidly learning and using new technologies. In a DevOps approach, the developer role is merged with quality assurance (QA), release management, and operations.
A developer has these responsibilities:
Collaborates with the designers and product managers to ensure that the code that is developed meets their vision
Designs the solution to meet functional and nonfunctional requirements
Writes automated tests, ideally before writing code
Writes code
Develops delivery pipelines and automated deployment scripts
Configures services, such as databases and monitoring
Fixes problems from the development phase through the production phase, which requires being on call for production support
In order for developers to have such broad roles, they rely on cloud technologies to free them from many—and sometimes even all—infrastructure tasks. In an ideal DevOps organization, the developers take on operations fully and are on "pager duty" for production problems. In many companies, including virtually all enterprises, an operations team provides the first response to production issues. However, you can still have a DevOps culture if the second call is to a developer to fix the problem. For more information about the operations roles that developers take on, see Cloud Service Management and Operations roles.
Teams might need developers with specialized skills, such as analytics or mobile. In those cases, use pair programming to spread the skills throughout the team.
In a DevOps approach the developer role is merged with quality assurance (QA), release management, and operations.
Anchor developer (technical team lead)
An anchor developer is an experienced developer who provides leadership on architecture and design choices, such as which UI framework to use on a project. Even with the use of agile tracking tools, sponsors and stakeholders often want a direct report on progress, issues, and key technical decisions. The anchor developer is that technical focal point who also does development work.
Agile coach
The agile coach leads the organization in agile methods. The coach must have the knowledge and experience to recommend changes to various practices in response to unique circumstances within the organization. The coach identifies problems and misapplications of the agile principles and suggests corrections and continuous improvements.
One approach that works well is for the agile coach to be part of the squad that has delivery responsibilities. In that way, the coach can provide guidance about the method and practices as part of the day-to-day work. The agile coach usually has experience with agile projects and is passionate about the process and practices. Alternatively, an agile coach can work across several squads and mentor them on the process and practices.
Depending on your squad structure and project size, the day-to-day responsibilities of facilitating daily standup meetings, planning, and playbacks might be the responsibility of either the agile coach or the anchor developer.
Cloud Service Management and Operations roles
When you move to the cloud, the resulting culture change requires modifications to the structure and roles of your project teams. Some DevOps team members can play more than one role, and groups might be merged to create a cohesive, diverse squad. As you form the Ops side of your squad, consider the addition of several new roles.
Service management introduces processes that teams must implement to manage the operational aspects of their applications.
Incident management roles
Incident management restores service as quickly as possible by using a first-responder team that is equipped with automation and well-defined runbooks. The incident management team members define the incident process and build a tool chain that implements ChatOps across the organization. Incident management roles include the first responder, incident commander, subject matter expert, and site reliability engineer.
First responder
The first responder solves problems by using runbooks and working with subject matter experts (SMEs). This role has these responsibilities:
Receives alerts through collaboration tools
Researches to determine the nature of the problem
Evaluates and adjusts the urgency and priority of the problem, if needed
Contacts and communicates with the incident commander when a major incident occurs
Reviews known issues to determine whether the problem is a known issue
Tries to resolve the issue by using the prescribed runbooks, collaborating with SMEs, or both
Gains concurrence from the customer when the incident is resolved
Incident commander
The incident commander manages the investigation, communication, and resolution of major incidents. This role has these responsibilities:
Receives incident information and collaborates with SMEs to restore services as fast as possible
Updates key stakeholders with status and expected resolution times
Seeks senior leadership support and endorsement, if needed
Interfaces and works with vendors to isolate problems and drive resolution
Keeping stakeholders up to date with the status of an incident is a key responsibility of the incident manager.
Subject matter expert (SME)
SMEs apply the deep technical skills that are needed to resolve application issues. Their skills support either specialized application expertise or a specific technical field or domain, such as database administration. An SME has these responsibilities:
Investigates a problem by using monitoring tools to get more details
Inspects logs
Tests and verifies issues
Recommends fixes if instruction is missing for the first responder, or fixes the problem
Proposes changes if they're needed and requests change management
Implements change
Provides data for the Site reliability engineer (SRE) review
SMEs use their skills to resolve problems as quickly as possible.
Site reliability engineer (SRE)
An SRE takes operational responsibility for supporting applications and services that run on a global scale in the cloud by using a highly automated service management approach. The SRE pays particular attention to removing toil, which is repetitive manual labor that doesn't add real value to a project.
An SRE spends approximately 50% of his or her working time on engineering project improvements. Fundamentally, the role is a combination of software engineering and operations design.
Problem management roles
Problem management aims to resolve the root cause of an incident to minimize its adverse impact and prevent recurrence. The problem owner and problem analyst ensure that problems are fixed and not repeated.
Problem owner
The problem owner oversees the handling of a problem and is responsible to bring it to closure. As needed, this role enlists the help of analysts and specialists. The problem owner is essentially the same role as the traditional IT role. However, the tools that those roles use to identify and solve a problem and ultimately provide a root cause analysis are different. Typically, the problem owner has a strong personal interest in the resolution.
Problem analyst
The problem analyst discovers incident trends, identifies problems, and determines the root cause of a problem. They're SMEs in one or more areas. This role is radically different from the traditional IT because business analytics, runbooks, and cognitive techniques play a major role. However, human supervision and creative thinking are still important in this role. Typically, an SRE takes this role.
Change management roles
The purpose of change management is to successfully introduce changes to an IT system or environment. The roles that are associated with change management are change owner, change manager, and change implementer.
Change owner
The change owner is the person who requests the change. The change owner has these responsibilities:
Raises the change within the change management tool
Creates the business case that justifies the change
Sets the priority
Determines the urgency
Input from the change owner is used to rank the change against all the other work that the DevOps squad does.
Change manager
The change manager completes the preliminary assessment of a change record to ensure that it contains the correct information. That information includes an accurate description, correct classification, and correct change type of standard, normal, or emergency.
Before the change is implemented, the change manager verifies that all the authorizations are obtained. After implementation, this role reviews changes to ensure accuracy and quality.
Change implementer
This role implements changes. Typically, the change implementer is an SRE or associated SME.
Other possible roles
Your project might need additional roles such as architect, project manager, and user researcher.
Architect
In projects that have experienced developers and a strong anchor developer, those roles provide "just-in-time" architecture. The use of "just-in-time" architecture is typical for greenfield projects, which are not imposed by preexisting architecture. However, if enough complexity exists, you need an architect who is separate from the developers so that development work isn't impacted. You might need an architect if a project is integrating to existing systems by using a wide range of services, security, or movement of data, or if you're coordinating with many other technical teams.
The architect works closely with the anchor developers across squads. This role also works with other architects to ensure architectural consistency across an offering portfolio. The architect creates only the architectural designs, diagrams, and documents that are actively used by the squads to guide their development. As in all other roles, the focus must be on communication and collaboration that is effective for the squads.
Project manager
Tracking within the squads' day-to-day work is done through user stories and tracking software, but often, dependencies exist on groups outside the squad.
Project managers do a wide variety of tasks:
Procure software
Coordinate dependencies on systems, exposing APIs
Report summaries beyond the tracking software