Crafting Code Podcast


$ cd episodes/012-learning-from-our-mistakes

~/podcast/episodes/012-learning-from-our-mistakes $ ls -1a
. .. episode-summary.txt
~/podcast/episodes $ cat episode-summary.txt

Mistakes are inevitable. In this episode, your hosts share some of the lessons we've learned the hard way through the mistakes we've made. Our hope is that some of you may be able to avoid making these same mistakes. But if not, at least know you're not alone and we can all improve.


[00:00:00] Host introductions. Failures we caused in production. Use pipelines and other guardrails to make your system safer; avoid doing things by hand. Beware the emergent properties — small changes can make a big difference.

[00:07:50] Identifying your biases doesn't mean you've overcome them. It's hard to learn from the mistakes of others.

[00:09:12] Static code analysis tools can help or hurt depending on how you use them. Are you chasing the right problem? Avoid rigidity.

[00:13:40] Coercion vs cooperation. Tools were created in a context and have a purpose. Misusing a tool leads to bad outcomes.

[00:17:29] Don't start with a solution and then try to bend it to fit the problem. Talk to the "non believers" to challenge your assumptions. Resume driven development. "This is the way we've always done it."

[00:23:41] Justifying work and complexity because later, AT SCALE, "we're going to need this."

[00:25:54] Software estimation is basically impossible to get right. Having empathy for people asking for and giving estimates. Estimates are potential solutions in search of a problem. Focus on the most important problems and maximizing value.

[00:34:00] Planning is necessary but the plan is irrelevant. Understanding the problem is the value in planning. Embrace the volatility.

[00:38:12] Scrumming so hard because it's what the formula says we're "supposed to do." Don't miss the principles behind the practices. Getting caught up in the ceremony and practices instead of what actually brings value.

[00:41:42] Code reviews, fever dreams, and bad attitudes. Treat people well; breaking production isn't nearly as bad as hurting someone. The people in your software network could help you in the future if you don't alienate them.

[00:47:54] Beware of your own hubris. "Move fast and break things" isn't an excuse, neither is a "Scrum hangover." Arrogance shouldn't get in the way of solving the customer's problem instead of the problem you want them to have.

[00:53:34] Utilize feedback loops. Demonstrate value. Test the market. Don't write code for hours and then try to compile it and realize it doesn't work.

[00:56:52] How you give feedback matters regardless of whether you're "right." Understand the audience (who you're trying to communicate with) and the audience (who is privy to what you're saying). Radical Candor and such books aren't an excuse to be a jerk.

[01:01:33] It can be a mistake to not leave a job soon enough. Watch out for bad relationships and toxicity. Once you're being mistreated, or worse: you are mistreating others, is it time to leave?

[01:04:16] Do not architect a system that is not a good solution for the context. What if the people can't build it? Don't try to pre-solve problems or design a framework ahead of time.

[01:09:09] We build up an expectation of correctness. We believe the lies we tell ourselves. Observe the emerging pattern before you try to create the the framework.

[01:11:48] Outro

Books mentioned during this episode: ~/podcast $ cat copyright.txt

Copyright © 2022 - Crafting Code Podcast