Race Conditions Like I'm Five

A friend recently asked for an explanation of race conditions in computing. I came up with a quick definition and a short example that I really liked so thought I’d share: Explanation Say you have two (or more) threads of execution (threads, processes, background workers, async callbacks). If there’s a situation that could happen where a resource (file, object in memory, row in the database) could be modified by one in such a way that...

Inclusivity must be built in to the system

In software development, we have this idea of certain attributes that must be built in to systems at the start of design and development. That is, these are aspects of software systems that are far easier to build in at the beginning than to bolt on to an established system later on. Some common examples are security, performance, user experience, and accessibility. These are attributes that are intrinsic to software systems in ways that are...

On the Importance of Meaningful Success Metrics in Software and Business

Regardless of the type of application you’re building it’s valuable to define user goals and measure those goals. It’s even more valuable to define success metrics essential to the core principals your business is founded upon and create user goals that measure progress toward those metrics. For example, typical goals for an e-commerce site might be: If a user visits the site, how often do they end up on a product page? If a user...

Introducing Stopplicht

The feedback loop is an integral part of the process of Test Driven Development. Red, Green, Refactor… and hopefully still Green. The faster you can move between the states in the cycle, the better. To help visualize those states and continue tightening the feedback loop, I built Stopplicht. For web development, I generally like to have my editor, a terminal session, and a browser open at a minimum. This is all in an effort to...