Coding Blocks

During today’s standup, we focus on learning all about Scrum as Joe is back (!!!), Allen has to dial the operator and ask to be connected to the Internet, and Michael reminds us why Blockbuster failed.

If you didn’t know and you’re reading these show notes via your podcast player, you can find this episode’s show notes in their original digital glory at where you can also jump in the conversation.


  • Datadog –  Sign up today for a free 14 day trial and get a free Datadog t-shirt after creating your first dashboard.

Survey Says

While in Slack, do you reply ...

Take the survey at:


  • Thank you all for the reviews:
    • iTunes: DareOsewa, Miggybby, MHDev, davehadley, GrandMasterJR, Csmith49, ForTheHorde&Tacos, A-Fi
    • Audible: Joshua, Alex

Do You Even Scrum?

Why Do We Call it Scrum Anyways?

Comes from the game of Rugby. A scrummage is when a team huddles after a foul to figure out their next set of plays and readjust their strategy.

Why is Scrum the Hot Thing?

  • Remember waterfall?
    • Plan and create documentation for a year up front, only to build a product with rigid requirements for the next year. By the time you deliver, it may not even be the right product any longer.
    • Waterfall works for things that have very repeatable steps, such as things like planning the completion of a building.
    • It doesn’t work great for things that require more experimentation and discovery.
  • Project managers saw the flaw in planning for the complete “game” rather than planning to achieve each milestone and tackle the hurdles as they show up along the way.
  • Scrum breaks the deliverables and milestones into smaller pieces to deliver.

The Core Tenants of Scrum

  • Having business partners and stakeholders work with the development of the software throughout the project,
  • Measure success using completed software throughout the project, and
  • Allow teams to self-organize.

Scrum Wants You to Fail Fast

  • Failure is ok as long as you’re learning from it.
  • But those lessons learned need to happen quickly, with fast feedback cycles.
  • Small scale focus and rapid learning cycles.
  • In other words, fail fast really means “learn fast”.

It’s super important to recognize that Scrum is *not* prescriptive. It’s more like guardrails to a process.

An Overview of the Scrum Framework

  • The product owner has a prioritized backlog of work for the team.
  • Every sprint, the team looks at the backlog and decides what they can accomplish during that sprint, which is generally 2-3 weeks.
  • The team develops and tests their solutions until completed. This effort needs to happen within that sprint.
  • The team then demonstrates their finished product to the product owner at the end of the sprint.
  • The team has a retrospective to see how the sprint went, what worked, and what they can improve going forward.

Focusing on creating a completed, demo-able piece of work in the sprint allows the team to succeed or fail/learn fast.

Projects are typically comprised of three basic things: time, cost, and scope. Usually time and cost are fixed, so all you can work with is the scope.

There are Two Key Roles Within Scrum

  • Project owner – The business representative dedicated 100% to the team.
    • Acts as a full time business representative.
    • Reviews the team’s work constantly to ensure the proper deliverable is being created.
    • Interacts with the stakeholders.
    • Is the keeper of the product vision.
    • Responsible for making sure the work is continuously sorted per the ongoing business needs.
  • The Scrum master – Responsible for helping resolve daily issues and balance ongoing changes in requirements and/or scope.
    • This person has a mastery of Scrum.
    • Also helps improve internal team processes.
    • Responsible for protecting the team and their processes.
      • Balances the demands of the product owner and the needs of the team.
      • This means keeping the team working at a sustainable rate.
    • Acts as the spokesperson for the entire team.
    • Provides charts and other views into the progress for others for transparency.
    • Responsible for removing any blockers.

Project owner focuses on what needs to be done while the Scrum master focuses on how the team gets it done.

Scrum doesn’t value heroics by teams or team members.

Scrum is all about Daily Collaboration

  • Whatever you can do to make daily collaboration easier will yield great benefits.
  • Collocate your team if possible.
  • If you can’t do that, use video conferencing, chat, and/or conference calls to keep communication flowing.

The Team Makeup

  • You must have a dedicated team. If members of your team are split amongst different projects, it will be difficult to accomplish your goals as you lose efficiency.
  • The ideal team size is 5 to 9 members.
  • You want a number of T-shaped developers.
    • These are people can work on more than one type of deliverable.
  • You also need some “consultants” you may be able to call on that have more specialized/focused skillsets that may not be core members of the team.

Team Norms

  • Teams will need to have standard ways of dealing with situations.
    • How people will work together.
    • How they’ll resolve conflicts.
    • How to come to a consensus.
    • Must have full team buy-in and everyone must be willing to hold each other accountable.

Agree to disagree, but move forward with agreed upon solution.

Product Vision

  • It’s the map for your team, it’s what tells you how to get where you want to go.
    • This must be established by the project owner.
  • The destination should be the “MVP”, i.e. the Minimum Viable Product.
    • Why MVP? By creating just enough to get it out to the early adopters allows you to get feedback early.
    • This allows for a fast feedback cycle.
    • Minimizes scope creep.
  • Must set the vision, and then decompose it.

Break the Vision Down into Themes

  • Start with a broad grouping of similar work.
  • Allows you to be more efficient by grouping work together in similar areas.
  • This also allows you to think about completing work in the required order.

Once You’ve Identified the Themes, You Break it Down Further into Features

If you had a theme of a User Profile, maybe your features might be things like:

  • Change password,
  • Setup MFA, and
  • Link social media.

To get the MVP out the door, you might decide that only the Change Password feature is required.

Resources We Like

  • Scrum: The Basics (LinkedIn)
  • Manifesto for Agile Software Development (
  • Epics, stories, themes, and initiatives (Atlassian)
  • Bad Software Engineering KILLED Cyberpunk 2077’s Release (YouTube)

Tip of the Week

  • Learn and practice your technical writing skills.
    • Online Technical Writing: Contents, Free Online Textbook for Technical Writing (
  • Using k9s makes running your Kubernetes cronjobs on demand super easy. Find the cronjob you want to run (hint: :cronjobs) and then use CTRL+T to execute the cronjob now. (GitHub)
  • Windows Terminal is your new favorite terminal. (
  • TotW redux: GitHub CLI – Your new favorite way to interact with your GitHub account, be it public GitHub or GitHub Enterprise. (GitHub)
    • Joe previously mentioned the GitHub CLI as a TotW (episode 142)
  • Grep Console – grep, tail, filter, and highlight … everything you need for a console, in your JetBrains IDE. (
  • Use my_argument:true when calling pwsh to pass boolean values to your Powershell script.
  • JetBrains allows you to prorate your license upgrades at any point during your subscription.
Direct download: coding-blocks-episode-155.mp3
Category:Software Development -- posted at: 9:18pm EDT

We dig into recursion and learn that Michael is the weirdo, Joe gives a subtle jab, and Allen doesn’t play well with others while we dig into recursion.

This episode’s show notes can be found at, for those that might be reading this via their podcast player.


  • Datadog –  Sign up today for a free 14 day trial and get a free Datadog t-shirt after creating your first dashboard.


  • Thank you all for the reviews:
    • iTunes: ripco55, Jla115
    • Audible: _onetea, Marnu, Ian

Here I Go Again On My Own

What is Recursion?

  • Recursion is a method of solving a problem by breaking the problem down into smaller instances of the same problem.
    • A simple “close enough” definition: Functions that call themselves
  • Simple example: fib(n) { n <= 1 ? n : fib(n - 1) + fib(n - 2) }
  • Recursion pros:
    • Elegant solutions that read well for certain types of problems, particularly with unbounded data.
    • Work great with dynamic data structures, like trees, graphs, linked lists.
  • Recursion cons:
    • Tricky to write.
    • Generally perform worse than iterative solutions.
    • Runs the risk of stack overflow errors.
  • Recursion is often used for sorting algorithms.

How Functions Roughly Work in Programming Languages

  • Programming languages generally have the notion of a “call stack”.
    • A stack is a data structure designed for LIFO. The call stack is a specialized stack that is common in most languages
  • Any time you call a function, a “frame” is added to the stack.
    • The frame is a bucket of memory with (roughly) space allocated for the input arguments, local variables, and a return address.
      • Note: “value types” will have their values duplicated in the stack and reference types contain a pointer.
  • When a method “returns”, it’s frame is popped off of the stack, deallocating the memory, and the instructions from the previous function resume where it left off.
  • When the last frame is popped off of the call stack, the program is complete.
  • The stack size is limited. In C#, the size is 1MB for 32-bit processes and 4MB for 64-bit processes.
    • You can change these values but it’s not recommended!
  • When the stack tries to exceed it’s size limitations, BOOM! … stack overflow exception!
  • How big is a frame? Roughly, add up your arguments (values + references), your local variables, and add an address.
  • Ignoring some implementation details and compiler optimizations, a function that adds two 32b numbers together is going to be roughly 96b on the stack: 32 * 2 + return address.
  • You may be tempted to “optimize” your code by condensing arguments and inlining code rather than breaking out functions… don’t do this!
    • These are the very definition of micro optimizations. Your compiler/interpreter does a lot of the work already and this is probably not your bottleneck by a longshot. Use a profiler!
  • Not all languages are stack based though: Stackless Python (kinda), Haskell (graph reduction), Assembly (jmp), Stackless C (essentially inlines your functions, has limitations)

The Four Memory Segments

source: Quora

How Recursive Functions Work

  • The stack doesn’t care about what the return address is.
  • When a function calls any other function, a frame is added to the stack.
  • To keep things simple, suppose for a Fibonacci sequence function, the frame requires 64b, 32b for the argument and 32b for the return address.
  • Every Fibonacci call, aside from 0 or 1, adds 2 frames to the stack. So for the 100th number we will allocate .6kb (1002 * 32). And remember, we only have 1mb for everything.
  • You can actually solve Fibonacci iteratively, skipping the backtracking.
  • Fibonacci is often given as an example of recursion for two reasons:
    • It’s relatively easy to explain the algorithm, and
    • It shows the danger of this approach.

What is Tail Recursion?

  • The recursive Fibonacci algorithm discussed so far relies on backtracking, i.e. getting to the end of our data before starting to wind back.
  • If we can re-write the program such that the last operation, the one in “tail position” is the ONLY recursive call, then we no longer need the frames, because they are essentially just pass a through.
  • A smart compiler can see that there are no operations left to perform after the next frame returns and collapse it.
  • The compiler will first remove the last frame before adding the new one.
  • This means we no longer have to allocate 1002 extra frames on the stack and instead just 1 frame.
  • A common approach to rewriting these types of problems involves adding an “accumulator” that essentially holds the state of the operation and then passing that on to the next function.
  • The important thing here, is that the your ONE AND ONLY recursive call must be the LAST operation … all by itself.

Joe’s (Un)Official Recursion Tips

  • Start with the end.
  • Do it by hand.
  • Practice, practice, practice.

Joe Recursion Joe’s Motivational Script


  • Recursion is a powerful tool in programming.
  • It can roughly be defined as a function that calls itself.
  • It’s great for dynamic/unbounded data structures like graphs, trees, or linked lists.
  • Recursive functions can be memory intensive and since the call stack is limited, it is easy to overflow.
  • Tail call optimization is a technique and compiler trick that mitigates the call stack problem, but it requires language support and that your recursive call be the last operation in your function.
  • FAANG-ish interviews love recursive problems, and they love to push you on the memory.

Resources We Like

  • Recursion (computer science) (Wikipedia)
  • Dynamic Programming (LeetCode)
  • Grokking Dynamic Programming Patterns for Coding Interviews (
  • Boxing and Unboxing in .NET (episode 2)
  • IDA EBP variable offset (Stack Exchange)
  • What is the difference between the stack and the heap? (Quora)
  • Data Structures – Arrays and Array-ish (episode 95)
  • Function Calls, Part 3 (Frame Pointer and Local Variables) (
  • How to implement the Fibonacci sequence in Python (
  • Tail Recursion for Fibonacci (
  • Recursion (
  • Structure and Interpretation of Computer Programs (MIT)
  • Tail Recursion Explained – Computerphile (YouTube)
  • !!Con 2019- Tail Call Optimization: The Musical!! by Anjana Vakil & Natalia Margolis (YouTube)

Tip of the Week

  • How to take good care of your feet (
  • Be sure to add labels to your Kubernetes objects so you can later use them as your selector. (
    • Example: kubectl get pods --selector=app=nginx
  • Security Now!, Episode 808 (
Direct download: coding-blocks-episode-154.mp3
Category:Software Development -- posted at: 10:10pm EDT

It’s been a minute since we last gathered around the water cooler, as Allen starts an impression contest, Joe wins said contest, and Michael earned a participation award.

For those following along in their podcast app, this episode’s show notes can be found at


  • Datadog –  Sign up today for a free 14 day trial and get a free Datadog t-shirt after creating your first dashboard.
  • DataStax – Sign up today to get $300 in credit with promo code CODINGBLOCKS and make something amazing with Cassandra on any cloud.

Survey Says

When you start a new project, in regards to the storage technology, do you ...

Take the survey at:


  • Thank you all for the latest reviews:
    • iTunes: peter b :(, Jackifus, onetea_
  • Getting BSOD? Test your memory with MemTest86.

Gather Around the Water Cooler

Resources We Like

Tip of the Week

  • Automated Google Cloud Platform Authentication with minikube.
    • Be careful about how you use ARG in your Docker images. (
  • Calvin and Hobbes the Search Engine (
  • 11 Facts About Real-World Container Use (Datadog)
  • Tips & Tricks for running Strimzi with kubectl (Strimzi)
Direct download: coding-blocks-episode-153.mp3
Category:Software Development -- posted at: 8:29pm EDT