<content>
<h3>Hi, I'm Pauline.</h3>
<ul><li>Senior back-end developer (PHP),</li><li>Talks a lot, mostly about Git,</li><li>Werkspot in Amsterdam,</li><li>Hiphop, cocktails, the internet,</li><li>One cat, three plants,</li><li>Was attacked by a baboon once.</li></ul>
[[Continue->Welcome]]
</content>
<img src="pauline.png" />
<content>
"Welcome! So happy you're here. What's your name?"
(link: "Cilla")[(set: $name to "Cilla")(goto: "Meet Lisa")]
(link: "Artie")[(set: $name to "Artie")(goto: "Meet Lisa")]
</content><content>
"$name, we're so glad to have you. My name is Lisa, and I'm a product manager at DevCorp."
[[Continue->Meet the team]]
</content>
<img src="lisa-smiles.JPG" /><content>
You decide that a good start to get familiar with the team would be to have one-on-ones with each of them.
There's three developers on your current team.
[[Meet Yusef]]
</content>
(set: $velocity = 20)
(set: $budget = 100)
(set: $naomiHappiness = 100)
(set: $steffanHappiness = 100)<content>
<h3>Yusef (the Wizard)</h3>
* Has been with DevCorp since its inception.
* Responsible for setting up all current infrastructue.
* Bus-factor through the roof.
* Is usually fighting fires other people can't put out.
Catchphrase: *"... obviously."*
[[Meet Naomi]]
</content>
<img src="yusef-portrait.JPG" /><content>
<h3>Naomi (the Up-and-Comer).</h3>
* Started two years ago as an intern.
* Is usually fixing bugs.
* Has developed a keen understanding of the domain and product internals.
* A fast learner with strong opinions.
Catchphrase: *"I'm out of stuff to do."*
[[Meet Steffan]]
</content>
<img src="naomi-portait2.JPG" />
(set: $naomi to true)<content>
<h3>Steffan (the Heavy-weight)</h3>
* Recent hire.
* Many years of experience.
* A conference organizer.
* Knows most of the people behind the OSS DevCorp uses.
Catchphrase: *"I never get anything done around here!"*
[[[Next->First day]]]
</content>
<img src="daan-portrait.JPG" />
(set: $steffan to true)<content>
Your first day is filled with meetings and introductions. All seems relatively quiet, with the exception of Steffan grumbling from time to time.
You wonder what the problem is...
[[Go home.]]
</content><content>
After a good night's sleep you return to the office. You hear Steffan grumbling his catchphrase.
*"I never get anything done around here"*, he mumbles under his breath.
[[Go talk to him]]
</content><content>
*"Our CI pipeline is so unstable. This is slowing us down!"*
And so, you ask him what might be done to fix the issue.
*"Well, you should probably ask Yusef. He's set all of this up.*"
[[Talk to Yusef]]
</content>
<img src="daan-frustrated.JPG" ><content>
He jumps in his chair, as if you've just woken him up suddenly.
He hastily takes off his headphones.
*"Look, $name, I really don't have time right now,*" he snaps. *"I've got requests coming in from all over."*
[[[Press him to prioritize the pipeline.->Yusef investigates the pipeline]]]
[[[Tell him to handle his other tasks first.->Yusef does not fix the pipeline]]]
</content>
<img src="yusef-talking.JPG" /><content>
*"$name, did you take Yusef off that order data export I asked him to do?"*, asks Lisa.
*"I really need that data for a stakeholder presentation later."*
[[Explain your decision]]
(set: $pipelineFixed = true)
</content>
<img src="lisa-doubtful.JPG" /><content>
Lisa sighs. *"I guess that makes sense... I'll tell them we had to prioritize other work and I'll send them the report later."*
You nod in agreement.
As Lisa turns to walk away, she hesitates.
*"Would it make sense to add another member to the team if we're going to start building internal features..?"*
(link: "Agree and try to hire new talent")[(set: $hire1 to true)(goto: "check on naomi")]
(link: "Disagree. Work with the team you have")[(set: $hire1 to false)(goto: "check on naomi")]
</content>
<img src="lisa-doubtful.JPG" />
(set: $velocity += 5)<content>
*"Suit yourself,"* says Steffan. *"I'd investigate myself if I had any time, but Lisa's on my back constantly to deliver. And I can't! It's a never-ending cycle."*
Meanwhile, Yusef sits down at Naomi's laptop to try and fix her dev machine. She zones out and distracts herself on the phone in the meantime.
[[Next->Slow weeks]]
</content>
<img src="naomi-zoned-out.JPG" />
(set: $pipelineFixed = false)
(set: $steffanHappiness -= 20)
(set: $velocity -= 5)<content>
Over the next few weeks, work is slow. Features take long to be released, and Lisa is feeling the pressure from upper management.
*"Why are we so slow? Do we need to hire more people?"*
(link: "Agree and try to hire new talent")[(set: $hire1 to true)(goto: "Refinement")]
(link: "Disagree. Work with the team you have")[(set: $hire1 to false)(goto: "Refinement")]
</content>
<img src="lisa-annoyed.JPG" /><content>
In the following weeks, the team is shipping more and stressing out less. The team prioritized and delivered a reporting feature for Lisa, which has stopped her impromptu requests for the team.
[[Continue->Refinement]]
</content><content>
This could turn out to be a pretty interesting feature to build.
*"Maybe Naomi and I should pair on this one?"*, suggests Steffan.
(if: $pipelineFixed is true)[(set: $lisaResponse to "Sounds like a good learning opportunity")]
(else:)[(set: $lisaResponse to "Team... we really need to get this live.")]
[[Next->Lisas Response]]
</content><content>
*"$lisaResponse"*, responds Lisa.
[["I think you should pair on this."]]
[["Don't pair. This feature is high priority and we need to get it live."]]
</content><content>
*"On it,"* says Naomi, as she rolls her desk chair over to Steffan's desk.
(set: $paired to true)
[[Next->Second one-one-ones]]
</content>
<img src="pairing.JPG" /><content>
*"Noted"*, says Steffan, and puts his headphones on.
Naomi is out of things to do and picks up some tech debt.
[[Next->Second one-one-ones]]
</content>
(set: $paired to false)
(set: $naomiHappiness -= 20)
(set: $steffanHappiness -= 20)
<content>
It's time to check in with the team.
[[Talk to Yusef->Yusef 1 on 1 2]]
</content><content>
(if: $pipelineFixed is true)[*"I'm glad you pressed me on that pipeline issue. I'm much less stressed out.*]
(else:)[*"Can we keep this brief? I'm swamped."*]
[[Talk to Steffan->Steffan 1 on 1 2]]
</content>
<img src="yusef-talking.JPG" /><content>
(if: $paired is false or $vendorLockIn is true)[(set: $steffan to false)(set: $budget -= 20)(set: $velocity -= 5)*"What did they hire me for? I'm moving on."*]
(elseif: $steffanHappiness < 90)[*"My job could be more fulfilling."*]
(else:)[*"I finally feel like I can do my job."*]
[[Talk to Naomi->Naomi 1 on 1 2]]
</content>
(if: $steffan is false)
[<img src="daan-angry.JPG" />]
(elseif: $steffanHappiness < 90)[<img src="daan-impatient.JPG" />]
(else:)[*<img src="daan-smiling.JPG" />]<content>
You join a refinement session.
Lisa: *"There's demand for a customer loyalty system. We need to be able to enroll our users."*
*"Ooh, I read about a tool that does that!"*, offers Naomi.
*"A little pricey, but it looks like a good fit. Awesome."*, says Steffan.
[[Next->Abstraction diagram]]
</content>
<img src="lisa-happy.JPG" /><content>
*"Hm... I do think we should abstract the third-party tool away from our software."*, suggests Steffan. He quickly sketches a diagram.
[[Next->Vendor lock-in?]]
</content>
<img src="uml.jpg" /><content>
*"Ugh... again with the unnecessary complexity,"* grumbles Yusef.
You consider both of the options, and decide to...
(link: "... go with Steffan's solution.")[(set: $vendorLockIn to false)(goto: "Grind or pair?")]
(link: "... agree with Yusef.")[(set: $vendorLockIn to true)(set: $steffanHappiness -= 6)(goto: "Grind or pair?")]
</content>
<img src="meeting-stressed.JPG" class="flip" />
<content>
(if: $paired is false)[*"I guess I just don't really feel challenged, $name."*]
(else:)[*"I really feel like I can develop here, $name."*]
[[Next->Reflecting]]
</content>
(if: $paired is false)[<img src="naomi-sad.JPG" />]
(else:)[<img src="naomi-content.JPG" />]<content>
On your way home that night, you reflect.
<ul>
(if: $steffan is false)[<li>*How long will it take to find a new Steffan? And what will that do to the budget? Our velocity?*</li>]
(if: $paired is false)[<li>*How am I going to engage Naomi more? Are we going to lose her?*</li>]
(else:)[<li>*This mentorship dynamic is really paying off... We're investing in our team.*</li>]
(if: $velocity < 20)[*<li>We're still not working efficiently.*</li>]
(else:)[<li>*We're delivering value at a pretty good pace.*</li>]
</ul>
[[Next->Config issue]]
</content> <content>
When you get to work the next day, Lisa's waiting.
*"We got some calls in from a few users that are having trouble enrolling into our loyalty system. This is pretty critical right now."*
(if: $hire1 is true)[[[Next->Hiring update]]]
(else:)[[[Next->Yusef debugs]]]
</content><content>
*"Alright"*, you say.
*"Before we do that, I have an update on the hire we talked about. His name is Mike, and he should really be able to drive us forward.*"
"*Great!"*, Lisa responds enthusiastically.
(if: $steffan is false)[*"Having said that... Steffan has let me know he's moving on."*]
[[Next->Yusef debugs]]
</content>
(if: $steffan is false)[<img src="lisa-doubtful.JPG" />](else:)[<img src="lisa-smiles.JPG" />]
(set: $budget -= 20)
(set: $mike to true)<content>
Yusef's been debugging and has figured out what's happening.
*"Seems we've misconfigured one of the proxies."*, he mentions.
[[Next->Write prod config?]]
</content>
<img src="yusef-focused.JPG" class="flip" /><content>
*"I could just edit the config manually on production for now."*, Yusef suggests.
Wait, is this common practice here?
*"Sure,"* he says. *"We all do. We all know what we're doing."*
[["You're a smart bunch of professionals. I trust you as well."]]
[["People make mistakes. This goes through the pipeline like everything else."]]
</content>
<img src="yusef-talking.JPG" /><content>
You agree, and the configuration is fixed. All is well.
... but that night when you go home, it doesn't sit well with you. This sort of stuff might set an unhealthy precedent.
(if: $hire1 is true)
[[[Next->Meet Mike]]]
(else:)
[[[Next->vendor problems]]]
</content>
(set: $wroteToProd to true)<content>
(if: $pipelineFixed is false)[
Lisa frowns. *"The same pipeline that takes half an hour to run and randomly fails..? Come on."*
[[Next->"You're a smart bunch of professionals. I trust you as well."]]
]
(else:)[
*"That's fair,"* says Lisa. *"I guess it's a good thing we have a workable pipeline now."*
(set: $wroteToProd to false)
]
(if: $hire1 is true and $pipelineFixed is not false)[[[Next->Meet Mike]]]
(elseif: $pipelineFixed is not false)[[[Next->vendor problems]]]
</content><content>
*"Team, meet Mike,"* you say during stand-up the next day.
*"He's an experienced engineer who should really increase our output."*
*"Hey team!",* says Mike. *"Can't wait to dive into the domain and start helping you deliver."*
(if: $paired is true)[*"I can help you with that! Why don't we pair up?"*, offers Naomi, confidently.]
[[Next->vendor problems]]
</content>
<img src="mike.JPG" /><content>
That afternoon, Lisa returns from a meeting with tech management.
*"Sooo, that third party software... is there an alternative for it?"*
*"Let's do some research and see what we come up with,"* suggests Naomi.
[[Next->change library]]
</content>
<img src="naomi-bored-desk.JPG" /><content>
A few hours later...
*"Alright, so," Naomi starts. "There is actually a much cheaper alternative as it turns out."*
*"Well, let's get to it,"* says (if: $steffan is false and $hire1 is true)[Mike](elseif: $steffan is false)[Yusef](else:)[Steffan].
(if: $vendorLockIn is true)[[[Next->locked in]]]
(else:)[[[Next->not locked in]]]
</content><content>
Naomi walks up to your desk.
*"So... remember when we decided not to abstract this library away?"*
*"Yeah..."* adds Yusef from the other side of the room. *"I'll take full credit for that one. Sorry everyone."*
(if: $steffan !== false)[Steffan shrugs and gives you a look as if to say "I tried to tell you..."]
[["Oof... well, let's try to get this out of the way ASAP."->more slow weeks]]
</content>
<img src="yusef-talking.JPG" />
(set: $velocity -= 5)
(set: $budget -= 20)<content>
*"Wow, this has been a breeze,"* says Naomi after about 30 minutes. *"We've swapped out the entire thing."*
(if: $steffanHappines > 69)[
You notice Steffan's lip is slightly curled up. He can hardly hide how smug he is.
]
(if: $pipelineFixed is true)[*"Wow, and I see it's been deployed already,"* you note.]
*"Great job, team. Lisa's gonna be stoked."*
(if: $wroteToProd is true)[[[Continue->critical]]]
(else:)[[[Continue->critical2]]]
</content>
(if: $steffan is not false)[<img src="pairing.JPG" />]
(else:)[<img src="naomi-happy-desk.JPG" />]<content>
That week is really slow...
The dev team is working on removing the third party library, but keeps finding new usages and places where it's tied into the codebase.
Lisa seems frustrated, and the dev team is stressing out. Looks like we'll be stuck with this expensive license for a while...
(if: $wroteToProd is true)[[[Continue->critical]]]
(else:)[[[Continue->critical2]]]
</content><content>
You're a consultant hired to help DevCorp grow. They started as a start-up, but now they have investors that need them to scale up.
And you've been hired to help them do it.
Let's [[enter DevCorp]].
</content><content>
A few days later, Yusef is on vacation when a critical issue occurs. Lisa comes to you panicking.
*"Another bunch of entry points for new customers end in a 504, or a... 500, or whatever. Either way, this is. <strong>Not. Good.</strong>"*
Naomi walks over, looking flustered.
*"$name..? Do you... do you have a minute?"* she asks.
[[Follow her to a quiet corner.]]
</content>
<img src="lisa-doubtful.JPG" /><content>
A few days later, Yusef is on vacation when a critical issue occurs. Lisa comes to you panicking.
*"Something's broken on production,"* she says. *"We're losing orders because users aren't receiving their account confirmation email.*"
Naomi is listening and tries to reproduce the issue immediately.
(if: $paired is true)[[[Continue->Naomi fixes it]]]
(elseif: $steffan is true)[[[Continue->Steffan fixes it]]]
(else:)[[[Continue->All hell breaks loose]]]
</content>
<img src="naomi-focussed.JPG" class="flip" /><content>
*"So... the critical. That was me,"* she starts, visibly embarrassed.
*"How did this happen?*" you ask.
*"Well, I needed to change some configuration, and..."*
You know where this is going...
*"You did it straight on prod?"*
She nods.
[[Reassure her. Plan a post-mortem when Yusef's back.]]
[[Berate her. You expected more from her.]]
</content>
<img src="naomi-stressed.JPG" />
(set: $naomiHappiness -= 15)<content>
You facilitate the post-mortem when Yusef returns.
The team draws a few conclusions, one of which is that editing things on prod probably sets a dangerous precedent and we should stop doing it.
(if: $pipelineFixed is false)[
Another is that pressure is high to deliver, and waiting for the pipeline takes too long.
*"Yeah,"* agrees Lisa. *"I should have seen the impact on productivity sooner and given you the space to fix it. I apologise."*
Yusef agrees to spend some time fixing it.
]
[[Continue->time's almost up]]
</content><content>
*"We have to be able to trust our developers. You really cost us today,"* you tell her.
She says nothing, but seems to shrink into the chair.
You get up and give her a minute to herself.
[[Continue->time's almost up]]
</content>
(set: $naomiHappiness -= 20)<content>
That night, you reflect on the past few months. It's been almost half a year, and your time at DevCorp has almost come to an end.
You start to feel nervous. *"Have I made a positive impact?"* you wonder.
(if: $naomiHappiness < 81)[[[Continue->naomi quits]]]
(else:)[[[Continue->naomi raise]]]
</content><content>
That next day, Naomi asks to have a chat. She sits down opposite you, but avoids eye contact.
*"I wanted to let you know that I'm resigning,"* she starts.
*Oof...*, you think, but you're not all that shocked.
[[Continue->stressed]]
</content>
<img src="naomi-sad3.JPG" />
(set: $naomi to false)<content>
That next day, you take Naomi aside for a chat.
*"What's up?"* she asks, as she plops down opposite you.
Well, you explain to her, she's really stepped up these past few months and you've enjoyed watching her grow. You tell her that:
<ul><li>her knowledge about our product internals is invaluable,</li>(if: $naomiFixedIt is true)[<li>she's shown she can hold her own when thrown in the deep end,</li>]<li>she's picked up a lot of new skills through pairing, and</li><li>(if: $hire1 is true and $paired is true)[she's even passed on that knowledge to a new teammate](else:)[you'd love to see her pass her knowledge on to potential new teammates]</ul>
[[Continue->naomi raise2]]
</content>
<img src="naomi-happy.JPG" /><content>
*"That's why I'm happy to offer you a raise,"* you announce proudly. *"We appreciate your progress and I'm keen to see how you'll grow in the future."*
Her eyes light up and she thanks you.
[[Continue->board meeting]]
</content>
<img src="naomi-gets-raise.JPG" /><content>
(if: $naomiHappiness > 65)[*"I guess I just don't really feel challenged here. I feel like I'm stuck, like I'm not improving."*]
(else:)[*"I feel extremely stressed here. It seems I can't do anything right and I'm just bad at my job. Maybe development just isn't for me."*]
Panic starts to set in on you now, too.
You have a feeling you may have lost a lot of potential here. Besides, she had a lot of product knowledge.
*"I'm sad to see you go,"*, you respond.
[[Continue->board meeting]]
</content>
<img src="naomi-sad.JPG" /><content>
A few weeks later, you step into the meeting room with the nice view and the big conference table.
The board meeting.
Today you hear how you've done, and if DevCorp has improved or not under your leadership.
Lisa closes the door behind you. She looks nervous.
[[Continue->Final verdict]]
</content>
<img src="board.JPG" /><content><ul>(if: $velocity < 5)[<li>*"Delivery has been extremely slow. We have not been able to keep up with the market at all."*</li>](elseif: $velocity < 21 and $hell != true)[<li>*"We've been able to keep up with demand... but we're not delivering value at ideal speeds yet."*</li>](elseif: $hell != true)[<li>*"Our throughput is through the roof compared to before. We're shipping features and delivering value at unprecedented speeds."*</li>](if: $steffan is false)[<li>*"We've lost an extremely costly hire who had a lot of experience. We're now going to have to spend a lot to replace him."*</li>](if: $naomi is false)[<li>*"We've lost a junior who didn't really contribute much. We're probably only going to hire seniors from now on."*</li>](else:)[<li>*"You've managed to keep the team together, challenge them and develop their skills further."*</li>](if: $hire1 is true and $naomi is false)[<li>*"We did another very expensive hire who didn't seem to do much at all. How is that possible?"*</li>](elseif: $hire1 is true and $naomi is true)[<li>*"The hire you did was expensive, but it seems he was onboarded quite smoothly and was able to hit the ground running. Good call there."*</li>](if: $budget < 61)[<li>*"We have been bleeding money. What happened to the technology budget?! This is unacceptable."*](elseif: $budget < 81)[<li>*"There's been a few expenses which look to have been necessary, but nothing too crazy."*</li>](else:)[<li>*"We're very impressed with how you've kept spending to a minimum while improving overall speed and quality of work."*</li>](if: $hell is true)[<li>*"We recently had a major outage and it wasn't fixed for days! What kind of show are you running here?!"*</li>](if: $naomiFixedIt is true)[<li>*"The speed at which that critical outage was fixed recently is commendable."*</li>]
</ul>
[[The end->Thanks for playing]]
</content>
<img src="board.JPG" />(set: $bad to 0)(set: $good to 0)(if: $velocity < 5)[(set: $bad += 1)](elseif: $velocity > 15)[(set: $good += 1)](if: $steffan is false)[(set: $bad += 1)](if: $naomi is false)[(set: $bad += 1)](else:)[(set: $good += 1)](if: $hire1 is true and $naomiHappiness < 81)[(set: $bad += 1)](elseif: $hire1 is true and $naomiHappiness > 80)[(set: $good +=1)](if: $budget < 61)[(set: $bad += 1)](elseif: $budget > 80)[(set: $good += 1)](if: $hell is true)[(set: $bad += 1)](set: $balance to $bad - $good)
<content>
<h3>The final verdict</h3>
(if: $balance > 1)[*"Unfortunately, we're going to have to withdraw funding."*]
(elseif: $balance > 0)[*"We're surviving... but we're not out of the woods yet."*]
(else:)[*"We're happy with the improvements you've made."*]
[[Final score]]
</content>
<img src="board.JPG" /><content>
<h2>Thank you for playing!</h2>
Special thanks to:<ul><li>My coworker Thijs for telling me about Twine</li><li>Werkspot for the use of our Menti license.</li><li>My friend Naomi for playing Naomi.</li><li>My coworkers Sophie, Daan, Anton, and Stephen for playing the other characters.</li><li>Hackconf for inviting me.</li>
</ul>
</content>
<img src="qr.png" /><content>
When you check on Naomi, she's figured out how to fix her own machine.
You smile and go about your day.
[[Continue->Fast weeks]]
</content>
<img src="naomi-focussed.JPG" class="flip" /><content>
*"Ah"*, she says. *"I see what's going on here. There's something wrong with the email service. Yusef showed me how to fix it one time."*
She brings the service back up.
*"Should be back up in a few minutes."*
(if: $mike is not false)[After she's done, she walks Mike through what she did.]
[[Continue->time's almost up]]
</content>
(set: $naomiFixedIt to true)
<img src="naomi-happy-desk.JPG" /><content>
*"I think the email service is down,"* Steffan suggests. *"Naomi, do you know how to bring it back up?"*
Naomi shrugs. *"Hey, don't look at me."*
Steffan grumbles something about Yusef keeping everything to himself and starts poking around. It takes him about an hour, but he brings the service back up.
[[Continue->time's almost up]]
</content>
<img src="naomi-daan.JPG" class="flip" />
(set: $naomiFixedIt to false)<content>
Naomi starts to panick as well. *"I have no idea what's going on."*
(if: $mike is true)[
Maybe Mike knows how to solve this? *"Well, it seems like whatever sends the emails is down... But I don't have access to anything."*]
This is a disaster.
*"If only Steffan was still here,"* Naomi mutters.
You have no choice but to wait for Yusef to come back. In the meantime, new users will have to call in to support to make purchases.
[[Continue->time's almost up]]
</content>
<img src="naomi-stressed.JPG" />
(set: $naomiFixedIt to false)
(set: $naomiHappiness -= 20)
(set: $hell = true)
(set: $budget -= 50)