Hermetic Python

Suppose we have some Python that depends on some 3rd-party libraries. How do ensure that those 3rd-party dependencies are stable over time, so we can get consistent results, in accordance with good engineering practice?

Read More

Understanding minidump debugging

Programs are just data in memory

Code is just data. Running programs are just data in memory. Debuggers just inspect that data. What if we take a snapshot?

(Part 5 of a series on Windows debugging.)

Read More

Finding source code in Visual Studio, with Source Server

When you build your source code locally on your development machine and then run it under the debugger, the debugger finds the debugging information automatically. What about when you didn’t build the program yourself?

(Part 3 of a series on Windows debugging.)

Read More

How the Visual Studio Debugger Finds Debug Information

When you build your source code locally on your development machine and then run it under the debugger, the debugger finds the debugging information automatically. What about when you didn’t build it yourself?

(Part 2 of a series on Windows debugging.)

Read More

The Toil Scorecard

Technical debt is hard to measure, but there is a subcategory we can measure: activities that consume our human capacity, but could be automated away. When a developer makes a code change to the software system, how long will it take to validate that the change is correct? What about rotating credentials or ensuring that all 3rd-party dependencies are up to date? How do we observe that production is healthy and operating correctly? The Toil Scorecard gives teams a way to measure these costs and make toil visible to the organization.

Read More

Decoupled Design with Events

When we try to apply unit testing, a question that often comes up is “how can we test this difficult-to-test code?”. That question has an important built-in assumption, that the code as currently written should not change for the sake of testing, and shall be tested as-is. That’s unfortunate, since a big potential benefit of unit testing is that it helps you detect and repair harmful coupling. Let’s look specifically at some options for decoupling for testability.

Read More

The 'Why?' of Arlo's Commit Notation

Arlo’s Commit Notation (ACN) is a tool which can be wielded to solve certain problems: I use it to speed up code review; remind myself to take smaller, safe steps; ship faster and more safely; quickly scan for risk; and make rollback easier. At the outset it can be really hard to clearly see those problems and how ACN addresses them. Let’s see what happens if I try to describe it all in great detail in article format.

Read More

If you can't TDD, your code needs TLC

You have just completed Test-Driven Development Training with an excellent instructor. The class was great and you feel like you really “get” TDD and how awesome it is. You are ready to put it to work. You are ready to preceed every behavior change with a test, and to refactor mercilessly under a green bar. You try to apply your new TDD skills to real work and you run in to trouble. Why is that?

Read More

What makes a great test?

Ideally tests would be fast, reliable, easy to own, easy to maintain, etc. Let’s make a list that we can use when creating, improving, or evaluating our tests.

Read More

Options when Implementing Game of Life at a Code Retreat

Having done Game of Life at Code Retreat a number of times, there are a few often-silent early choices which have a big impact on how the session goes. Neither of the options in each pair are the “right” or “wrong” option. My purpose is to encourage you to recognize that these options exist, and to pick consciously.

Read More

Refactor all the Things!

As I’ve practiced refactoring over the years, I continue to find new ways to solve problems better with refactoring. This is why refactoring is such a big deal to me.

Read More

Definitions of NoEstimates

I’ve noticed people argue for (or against) #NoEstimates in a bunch of different ways. They’ll often say “what #NoEstimates is really about is…”

Read More

Rewrite Or Refactor

I feel like this is already well-covered ground. We already know never to rewrite from scratch. The demise of Netscape has been discussed thoroughly. So I’m only going to be able to add a little.

Read More

Safely extract a function in any C++ code

Given arbitrarily-complex C++ code with incomplete test coverage (aka The Real World) how can you extract a function, without relying on complete understanding or complete test coverage to ensure correctness of the refactoring?

Read More

Mega Mobbing

This week we ran a #mobprogramming session with 35 people. Here are some notes about how that went:

Read More

Port And Transport And Port

I use Ports-and-Adapters to abstract away my application’s interactions with external systems. I bend the dependency’s interface to the shape that I want for my domain. This makes it easier to think about my code and to unit test it.

Read More

New Blog

This uses Jekyll Now to give me a no-administration, code-friendly blog. I love the combination of Markdown + Git.

Read More