How Your Tech Stack Changes Your Team Culture & Efficiency
The complexity of your deployment process directly affects the culture of your teams, and choosing the right tech stack, architecture, and deployment processes can make (or break) your company's ability to stay competitive.
If shipping is hard, people will avoid shipping until they have to.
If shipping is easy, people will ship as quickly as they can.
Heads up! I gave a talk about this at the GraphQL Summit, so if you prefer video you can watch most of what I'll say in this article in this recording.
Our goal is to ship value to customers as quickly as possible.
Every company needs to provide value to its customers or it won't survive. The speed with which they can deliver that value has a direct impact on its growth. An immediate, measurable improvement to your company's bottom line is to invest in the way your team builds and ships software.
We need to create a culture of shipping.
Teams have a culture of shipping when they confidently ship iterative improvements frequently and autonomously. We can help create this culture by providing our teams with a technical foundation and processes that improve their ability to ship rather than slowing them down.
The tools, tech stack, and infrastructure we choose greatly impact team culture.
Our systems, tech stack, and infrastructure need to be carefully selected for how they affect our team's near-, mid-, and long-term ability to ship high quality software quickly.
If we choose infrastructure and a tech stack that unblock our teams, we can realistically create a culture of shipping that goes to production multiple times per day instead of once every week or two.
What stops teams from shipping?
The 2019 DORA report shows a strong correlation between continuous delivery and organizational performance. Automated deployment, loosely coupled architecture, and lightweight processes all improve organizational performance as well.
There are reasons your infrastructure can't control — most importantly, it's critical that we prioritize the team's psychological safety — but it was clear taht heavyweight processes and a lack of continuous delivery directly contribute to higher burnout and lower performance. This means that our processes and deployment infrastructure directly contribute to the performance (or lack thereof) of our teams.
Heavyweight processes and slow, manual release engineering all create unnecessary complexity in our infrastructure, and that complexity compounds over time.
Complexity leads to a snowball of slowness. A slowball.
The more complex our infrastructure is, the easier it is for it to become a blocker for our teams:
- High complexity makes makes it hard to have confidence that a change won't have unexpected side effects, which increases risk
- Extra risk means more manual checks are required for deployment
- More checks means a slower deployment process
- Slower deployment makes iteration slower
- A slow iteration cycle encourages putting more code into each PR
- Larger PRs make code reviews more difficult
- Difficult code reviews mean a higher likelihood that things get missed
- When things get missed, production breaks
- When production breaks, people get paged, checks get more intense, and the process gets even slower
It requires a conscious effort to short circuit this cycle.
You're architecting more than just code.
Unnecessarily complex systems lead to demoralized, unhappy teams that don't ship as quickly as we want them to.
We create happy, empowered teams that ship quickly with confidence and low risk when we invest in a our team culture to keep it healthy. We can do this structurally by adopting software architecture that creates autonomy, trust, and visible wins.
Let's talk about how the Jamstack helps avoid unnecessarily complex systems.
Decoupled systems melt the slowball.
Because it has fewer moving parts, strong decoupling of systems, and lower complexity to deploy, Jamstack sites start a virtuous cycle that speeds teams up:
- Low complexity means changes can be made with high confidence that there are no unexpected side effects
- Higher confidence means more checks can be automated
- Automating checks speeds up deployment
- Faster deployment makes iteration faster
- Fast iteration makes it easier to create small PRs
- Small PRs are faster to review and understand
- More understandable reviews mean fewer things slip through the cracks
- Fewer production issues increases confidence, making it easier to push for true CI/CD
The Jamstack takes advantage of making the right thing the easy thing so developers have strong defaults and patterns in place that systemically encourage a culture of shipping. Jamstack web apps build trust and autonomy through firm boundaries and painless error recovery.
To build a culture of shipping, we need architecture that supports it.
The way we manage and deploy code directly influences the culture of our teams. The more complex a system becomes, the harder it is for a team to ship quickly — and the slowball grows with each frustrating, fragile, slow iteration.
If we focus on reducing complexity by adopting an architecture like the Jamstack to create clear boundaries and decoupled systems, our teams are able to work quickly and confidently, and our processes can be automated to enable low-risk continuous deployment.