Multi-Factor Authentication

What is Multi-Factor Authentication Since the dawn of multiple user computer systems, we’ve used passwords to prove to computers that we are who we say we are. But, passwords are just one way we can assert our identity to a computer. Security experts generally recognize a few categories of identity assertion, something you know, something you have, something you are, even somehwere you are. Passwords fall into the something you know category, but this could...

Ratchets: Improving systems incrementally

A ratchet strap is a type of tie down strap used to hold large objects onto a vehicle for moving. No knots are required, unlike rope, and they have less give and room for error than bungee straps. The ratchet strap gets its name from the specially designed gear box that’s used to impart tension on the strap and hold down your stuff. During tensioning, the ratchet gear only moves in one direction, spooling slack...

The Coding Interview: Time Management

Time is your most valuable asset during a coding interview and it’s ticking away from go. Let’s talk about some tips for maximizing your time in a coding interview. I’ll preface this advice by saying that this is based soley on my experience being interviewed and giving interviews. It won’t necessarily be applicable to all interviews as some interviewers certainly look for different things. But, in my experience, these considerations have frequently helped me. Set...

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...

Weeks 1 and 2 in Edinburgh

My wife, Stephanie, and I have spent the past few weeks in Edinburgh, Scotland. I’ve decided to write about our experiences (with pictures!) to document them for the eager masses back home in the States to consume, mostly so I don’t have to repeat myself a bunch of times. :D This is the first of who knows how many entries in our Edinburgh journal. But first, some background. If you don’t care about how we...