2023-05-23 20:51:40 +02:00
|
|
|
<!doctype html>
|
2022-08-12 08:19:15 +02:00
|
|
|
<html lang="en">
|
2023-05-23 20:51:40 +02:00
|
|
|
|
|
|
|
<head>
|
|
|
|
<meta charset="utf-8">
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<title>Why Can't We Deploy This Today?</title>
|
2023-05-23 20:51:40 +02:00
|
|
|
|
|
|
|
<link rel="stylesheet" href="dist/reset.css">
|
|
|
|
<link rel="stylesheet" href="dist/reveal.css">
|
|
|
|
<link rel="stylesheet" href="dist/theme/black.css">
|
2023-05-26 00:02:09 +02:00
|
|
|
<link rel="stylesheet" href="lineicons-4.0-basic-free/web-font-files/css/icons.css">
|
|
|
|
<link rel="stylesheet" href="why-cant-we-deploy-this-today.css">
|
2023-05-23 20:51:40 +02:00
|
|
|
|
|
|
|
<!-- Theme used for syntax highlighted code -->
|
|
|
|
<link rel="stylesheet" href="plugin/highlight/monokai.css">
|
|
|
|
</head>
|
|
|
|
|
|
|
|
<body>
|
|
|
|
<div class="reveal">
|
|
|
|
<div class="slides">
|
2023-05-25 06:29:16 +02:00
|
|
|
<section data-markdown="" id="cover-page">
|
|
|
|
# Why can't we deploy this today?
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section data-markdown>
|
|
|
|
# About me
|
|
|
|
|
|
|
|
* Dirk Nederveen, [@dirk@blog.ndrvn.nl](https://blog.ndrvn.nl/u/dirk)
|
|
|
|
* Husband, father of 3, Streaming Engineer (QA) @Jet-Stream
|
|
|
|
* Interests:
|
|
|
|
- Theology
|
|
|
|
- Neurospychology
|
|
|
|
- Reading
|
|
|
|
- Beer brewing
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
|
|
|
|
|
|
|
<section data-markdown="" id="bluf">
|
|
|
|
# Why can't we deploy this today?
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
2023-05-26 00:02:09 +02:00
|
|
|
<section id="story-bug">
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
|
|
|
|
<p>Starring</p>
|
|
|
|
<p>
|
|
|
|
🦹🏻♂️<br>
|
|
|
|
🦸🏼♂️<br>
|
|
|
|
🧑💼<br>
|
|
|
|
👩🏾💻 👷🏻♂️<br>
|
|
|
|
👩🏼🚒
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
🦹🏻♂️ Customer<br>
|
|
|
|
🦸🏼♂️ Support Hero<br>
|
|
|
|
🧑💼 Company/Product Owner<br>
|
|
|
|
Dev team: 👩🏾💻 Sr. Dev and 👷🏻♂️ Jr. Dev<br>
|
|
|
|
Ops team: 👩🏼🚒 System Operator<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
2023-05-25 06:29:16 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
1 May: 🦹🏻♂️ →📞→ 🦸🏼♂️<br>
|
|
|
|
4 May: 🧑💼 👩🏾💻 🦸🏼♂️ → 🐛<br>
|
|
|
|
5 May: 🧑💼 👩🏾💻<br>
|
|
|
|
8 May: 🧑💼 🦸🏼♂️ 👩🏾💻 👷🏻♂️<br>
|
|
|
|
</p>
|
|
|
|
<aside class="notes">
|
|
|
|
🦹🏻♂️ Customer calls with a question about sending an invoice on Mon 1 May, 🦸🏼♂️ Support Hero logs ticket BS-1234 in Jira<br>
|
|
|
|
🧑💼 Product Owner, 👩🏾💻 Sr. Dev and 🦸🏼♂️ Support Hero have triage meeting on Thu 4 May, bug confirmed, priority 'Highest'<br>
|
|
|
|
🧑💼 Product Owner and 👩🏾💻 Sr. Dev have backlog grooming meeting on Friday 5 May <br>
|
|
|
|
🧑💼 🦸🏼♂️ 👩🏾💻 👷🏻♂️ Team has Sprint Planning meeting on Mon 8 May, commit to BS-1234 for 1 Story Point <br>
|
|
|
|
</aside>
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
|
|
|
|
<section data-markdown>
|
2023-05-25 06:29:16 +02:00
|
|
|
# Closed sprint
|
|
|
|
|
|
|
|
- Two weeks is fast in context of 6 month CD-ROM releases!
|
|
|
|
- How long does shipping take for your application?
|
|
|
|
|
|
|
|
---
|
2023-05-23 20:51:40 +02:00
|
|
|
|
2023-05-25 06:29:16 +02:00
|
|
|
# Closed sprint
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
- 👍 Shared control over workload
|
|
|
|
- 👍 Predictible cadence
|
|
|
|
- 👎 Limits response time to `sprint_length`
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="pull-requests">
|
2023-05-26 00:02:09 +02:00
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
<p>
|
|
|
|
10 May: 👷🏻♂️, 🤷♂️; 👷🏻♂️ →📧→ 🦹🏻♂️<br>
|
|
|
|
11 May, 4 PM: 🦹🏻♂️ →📧→ 👷🏻♂️<br>
|
|
|
|
15 May: 👷🏻♂️ →<i class="lni lni-github-original"></i>→ 👩🏾💻<br>
|
|
|
|
16 May, 4 PM: 👩🏾💻 →<i class="lni lni-github-original"></i>→ 👷🏻♂️<br>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
👷🏻♂️ Jr. Dev picks up BS-1234, needs clarification and sends 🦹🏻♂️ Customer an email on Wednesday 10 May<br>
|
|
|
|
🦹🏻♂️ Customer responds Thursday 11 May, 16:00<br>
|
|
|
|
👷🏻♂️ Jr. Dev starts implementation on Monday 15 May, opens PR #2345 in GitHub<br>
|
|
|
|
👩🏾💻 Sr. Dev responds to PR #2345 on Tuesday 16 May 16:00, needs improvement<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
<section data-markdown="">
|
2023-05-25 06:29:16 +02:00
|
|
|
# Pull Requests
|
|
|
|
|
|
|
|
- Untrusted contributer send in patch
|
|
|
|
- Trusted maintainer chooses what to merge
|
|
|
|
- Communication through centralised repositor
|
|
|
|
---
|
|
|
|
# Pull Requests
|
2023-05-23 20:51:40 +02:00
|
|
|
|
2023-05-25 06:29:16 +02:00
|
|
|
- 👍 Multiple people look at the code
|
2023-05-26 00:02:09 +02:00
|
|
|
- 👎 Time between action and response
|
2023-05-25 06:29:16 +02:00
|
|
|
- 👎 Focus on code level, not product level
|
|
|
|
- 👎 Value spends a lot of time waiting
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="handoffs">
|
2023-05-26 00:02:09 +02:00
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
<p>
|
|
|
|
17 May: 👷🏻♂️ →<i class="lni lni-github-original"></i>→ 👩🏾💻<br>
|
|
|
|
17 May, 3 PM: 👩🏾💻 →<i class="lni lni-slack"></i>→ 👷🏻♂️<br>
|
|
|
|
18 May: 👷🏻♂️ → 🕺⛺️🍻<br>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
👷🏻♂️ Jr. Dev processes feedback on Wed 17 May, 10:00<br>
|
|
|
|
Oh no! 💥 Merge conflict!<br>
|
|
|
|
👩🏾💻 Sr. Dev checks PR #2345 and Slacks 👷🏻♂️ Jr. Dev on Wed 17 May, 15:00<br>
|
|
|
|
It's the Ascension Day weekend! 👷🏻♂️ Jr. Dev is off to a festival 🕺<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
22 May: 🧑💼 🦸🏼♂️ 👩🏾💻 👷🏻♂️<br>
|
|
|
|
30 May: 👷🏻♂️ →<i class="lni lni-github-original"></i>→ 👩🏾💻<br>
|
|
|
|
30 May: 👩🏾💻 →✅→ 👷🏻♂️<br>
|
|
|
|
2 June: 👩🏾💻 👷🏻♂️ →📦→ 👩🏼🚒<br>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
Mon 22 May: another Sprint Planning meeting. The team commits to BS-1234 again (0 Story points now, "it's basically done")<br>
|
|
|
|
Tue 30 May: 👷🏻♂️ Jr. Dev picks up BS-1234 again, fixes the merge conflict<br>
|
|
|
|
Tue 30 May: 👩🏾💻 Sr. Dev approves PR #2345 and 👷🏻♂️ Jr. Dev gets to click the ⛙ Merge button!<br>
|
|
|
|
Friday 2 June: Sprint end! 👩🏾💻 👷🏻♂️ Dev team sends the release candidate to 🙅 👩🏼🚒 Ops team<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
<section data-markdown="">
|
2023-05-25 06:29:16 +02:00
|
|
|
# Handoffs
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
- Teams with distinct responsibilities
|
|
|
|
- Changes move in discrete steps
|
|
|
|
---
|
|
|
|
# Handoffs
|
2023-05-25 06:29:16 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
- 👍 Specialisation
|
|
|
|
- 👍 Clear responsibilities
|
|
|
|
- 👎 Pipeline speed
|
|
|
|
- 👎 Adversarial relationships
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section id="time-to-value">
|
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
6 June, 7 AM: 👩🏼🚒 →📦→ ☁️<br>
|
|
|
|
6 June, 9 AM: 🧑💼 →📧📧📧→ 🦹🏻♂️🦹🏻♂️🦹🏻♂️
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
👩🏼🚒 System Operator prepares release after Sprint end, and deploys update on Tue, 6 June 07:00<br>
|
|
|
|
🧑💼 Product Owner sends the update newsletter Tue at 09:00<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
2023-05-25 06:29:16 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section data-markdown="" class="unfinished">
|
|
|
|
# Time to value
|
|
|
|
|
|
|
|
- The bug is fixed, 🦹🏻♂️ Customer can send their invoices again!
|
|
|
|
- Took 5 weeks
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section class="unfinished">
|
|
|
|
<h1>Processes are there for a reason!</h1>
|
|
|
|
|
|
|
|
<ul>
|
|
|
|
<li>Quality assurance</li>
|
|
|
|
<li>Pace</li>
|
|
|
|
<li>Delivering software reliably</li>
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
In the end, all processes are born to get the chaos of life under control
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="pom-pom-pom">
|
|
|
|
<section>
|
|
|
|
<h1>The story of a bug</h1>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
6 June<br>
|
|
|
|
🦹🏻♂️🤬 →📞→ 🧑💼<br>
|
|
|
|
🧑💼😱 🦸🏼♂️ 👩🏾💻 👷🏻♂️<br>
|
|
|
|
👩🏾💻 →🩹→ 👩🏼🚒<br>
|
|
|
|
👩🏼🚒 →🩹→ ☁️<br>
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<aside class="notes">
|
|
|
|
🦹🏻♂️ Customer calls angrily: the bug is not fixed!<br>
|
|
|
|
🧑💼 Product Owner calls an urgent meeting: Why is BS-1234 (zero points!!) open for over a month?<br>
|
|
|
|
👩🏾💻 Sr. Dev drafts a patch release<br>
|
|
|
|
👩🏼🚒 System Operator deploys the patch<br>
|
|
|
|
</aside>
|
|
|
|
</section>
|
|
|
|
<section data-markdown="">
|
|
|
|
# What just happened?
|
|
|
|
- High stress: angry phone calls
|
|
|
|
- Value discovery, implementation, delivery
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section>
|
|
|
|
<section data-markdown="">
|
|
|
|
# Value stream mapping
|
|
|
|
|
|
|
|
- How the *value* flows through an organisation
|
|
|
|
- *Who* holds responsibility
|
2023-05-26 00:02:09 +02:00
|
|
|
- Time to value
|
2023-05-19 20:08:46 +02:00
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<aside class="notes">
|
|
|
|
asdfasdf
|
|
|
|
</aside>
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section>
|
|
|
|
<section id="continuous-delivery">
|
|
|
|
<h1>Continuous delivery</h1>
|
|
|
|
|
|
|
|
<div style="width: 80%; float: left" data-markdown="">
|
|
|
|
* Build quality in
|
|
|
|
* Work in small batches
|
|
|
|
* Computers perform repetitive tasks, people solve problems
|
|
|
|
* Relentlessly pursue continuous improvement
|
|
|
|
* Everyone is responsible
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div style="float: right; width: 20%; height: 8em">
|
|
|
|
<a href="https://www.bol.com/nl/nl/p/accelerate/9200000080652224">
|
|
|
|
<img src="accelerate.jpg" style="height: 50%;">
|
|
|
|
</a><br>
|
|
|
|
<a href="https://www.informit.com/store/continuous-delivery-reliable-software-releases-through-9780321770424?ranMID=24808">
|
|
|
|
<img src="cd-book.png" style="height: 50%;">
|
|
|
|
</a>
|
|
|
|
</div>
|
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:04:57 +02:00
|
|
|
<section id="deployment-pipeline">
|
|
|
|
<h2>The deployment pipeline</h2>
|
|
|
|
|
|
|
|
...!!!
|
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section id="build-quality-in" data-markdown="">
|
|
|
|
## Build quality in
|
|
|
|
|
|
|
|
- Test Driven Development
|
|
|
|
- Pair programming
|
|
|
|
- Infrastructure as code
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="work-in-small-batches" data-markdown="">
|
|
|
|
## Work in small batches
|
|
|
|
|
|
|
|
- Continuous integration/Trunk based development
|
|
|
|
- Feature flags
|
|
|
|
- More frequent releases
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="people-solve-problems" data-markdown="">
|
|
|
|
## Computers perform repetitive tasks, people solve problems
|
|
|
|
|
|
|
|
- Continuous deployment
|
|
|
|
- Tacit knowledge → Text runbook → Script → Deployment pipeline
|
|
|
|
</section>
|
|
|
|
|
|
|
|
<section id="relentlessly-pursue-improvement" data-markdown="">
|
|
|
|
## Relentlessly pursue improvement
|
2023-05-23 20:51:40 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
- Do one step at a time
|
|
|
|
- Find out (measure!) what works
|
|
|
|
- "Make the change easy, then make the easy change"
|
|
|
|
</section>
|
|
|
|
<section id="everyone-is-responsible" data-markdown="">
|
|
|
|
## Everyone is responsible
|
|
|
|
|
|
|
|
-
|
|
|
|
</section>
|
2023-05-23 20:51:40 +02:00
|
|
|
</section>
|
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
<section id="homework">
|
|
|
|
<section data-markdown="">
|
|
|
|
# What to do this Monday?
|
|
|
|
|
|
|
|
* Sketch the value stream for a 1-hour
|
|
|
|
- Discovery
|
|
|
|
- Selection/prioritisation
|
|
|
|
- Implementation
|
|
|
|
- Verification
|
|
|
|
- Delivery
|
|
|
|
---
|
|
|
|
# What to do this Monday?
|
2023-05-23 20:51:40 +02:00
|
|
|
|
|
|
|
* Build quality in
|
2023-05-26 00:02:09 +02:00
|
|
|
- test-drive a larger user story
|
|
|
|
- pair program for an hour daily
|
|
|
|
- codify a text runbook
|
|
|
|
---
|
|
|
|
# What to do this Monday?
|
|
|
|
|
2023-05-23 20:51:40 +02:00
|
|
|
* Work in small batches
|
2023-05-26 00:02:09 +02:00
|
|
|
- build a story on `main` behind a feature flag
|
|
|
|
---
|
|
|
|
# What to do this Monday?
|
|
|
|
|
|
|
|
* Computers perform repetitive tasks, people solve people-solve-problems
|
|
|
|
- improve the automation of one repeating task
|
|
|
|
---
|
|
|
|
# What to do this Monday?
|
|
|
|
|
2023-05-23 20:51:40 +02:00
|
|
|
* Relentlessly pursue continuous improvement
|
2023-05-26 00:02:09 +02:00
|
|
|
- got TDD? Go TCR: `(test && commit) || revert`
|
|
|
|
- got a deploy script? Bring it to the deployment pipeline
|
|
|
|
- got automated builds? Release each working build to acceptance
|
|
|
|
- Refactor before implementation
|
|
|
|
---
|
|
|
|
# What to do this Monday?
|
|
|
|
|
2023-05-23 20:51:40 +02:00
|
|
|
* Everyone is responsible
|
2023-05-26 00:02:09 +02:00
|
|
|
- have lunch with the 🦸🏼♂️ Ops team
|
|
|
|
- need review? Sync with 👩🏾💻 Sr. Dev at your desk
|
|
|
|
- need to review? Pair with 👷🏻♂️ Jr. Dev
|
|
|
|
- propose process improvements
|
2023-05-23 20:51:40 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
---
|
|
|
|
# What to do this Monday?
|
2023-05-25 06:29:16 +02:00
|
|
|
|
2023-05-26 00:02:09 +02:00
|
|
|
Ask *"Why can't we deploy this today?"*
|
|
|
|
and automate the answer
|
|
|
|
</section>
|
2023-05-25 06:29:16 +02:00
|
|
|
</section>
|
|
|
|
</div>
|
2023-05-23 20:51:40 +02:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<script src="dist/reveal.js"></script>
|
|
|
|
<script src="plugin/notes/notes.js"></script>
|
|
|
|
<script src="plugin/markdown/markdown.js"></script>
|
|
|
|
<script src="plugin/highlight/highlight.js"></script>
|
|
|
|
<script>
|
|
|
|
// More info about initialization & config:
|
|
|
|
// - https://revealjs.com/initialization/
|
|
|
|
// - https://revealjs.com/config/
|
|
|
|
Reveal.initialize({
|
|
|
|
hash: true,
|
|
|
|
|
|
|
|
// Learn about plugins: https://revealjs.com/plugins/
|
|
|
|
plugins: [RevealMarkdown, RevealHighlight, RevealNotes]
|
|
|
|
});
|
|
|
|
</script>
|
|
|
|
<script>
|
|
|
|
document.querySelectorAll('.slides section a[href^="http"]').
|
|
|
|
forEach(a => a.setAttribute('target', '_blank'))
|
|
|
|
</script>
|
|
|
|
</body>
|
2023-05-19 20:08:46 +02:00
|
|
|
|
2012-08-04 06:33:27 +02:00
|
|
|
</html>
|