Moving to Denver

We're relocating from KC to Denver at the end of the month. This has been in the works for a litle while but I'm super excited to announce this now.

I will be working full time at

One Day after RailsConf 2016

So much info. So many awesome moments. Still parsing all of the things…

RIP Apple Watch

So, I bought an Apple Watch back in November. After just over five months of ownership I've decided to leave it on the charger. I'm now wearing an entry-level automatic mechanical dive watch. There are plenty of us who have gone from an Apple Watch to a mechanical watch.

I've had an interest in mechanical watches for a long time but I'm also enthusiastic about new technology so I jumped on the Apple Watch. While it was okay, it felt a lot more like a gimmick. A mechanical watch on the other hand (no pun intended) impresses me to no end.

I'm in love with the engineering that allows a watch to operate without a battery. The mechanics are endlessly impressive. I appreciate great engineering and I feel much more appreciation for the details that go into building a mechanical watch. So, even though it doesn't show me my text messages, I'm not looking ahead at the future of smartwatches. I'll just look down at this old-fashioned, reliable timepiece.

Is this the single-responsibility principal manifesting in real life?

Static Analysis & You.

Static analysis assists in identifying objectively inconsistent and problematic areas within your codebase. I think whether you're building a small application or a large one, there's immense value in static analysis.

Using open-source tools like Reek you can identify code smells that might have slipped through into your codebase and address them before they become a problem. I like to use Reek as both a learning tool and a reminder.

Flay is great for helping you identify abstractions once duplication has become apparent. Remember, Sandi Metz taught us that the wrong abstractions can be more dangerous than duplication so it is still up to us as experienced engineers to know when to ignore these tools.

Rubocop is awesome when it comes to identifying style-related infractions. It's easy to downplay how important code style is but consistency is the key here. I strongly believe in following community-derived conventions so my code is approachable by the widest audience of developers as is possible.

CodeClimate makes great use of all of the tools I've mentioned above and they have their own proprietary measure for assigning a GPA to your project as well as to individual files. I recommend considering it for your organization. If that sounds like overkill or you're like me and get excited about the opportunity to deploy something like this tailored to your specific needs you should check out Pronto.

I like to use static analysis to keep me on my toes and to enforce consistency in my own projects and in projects at work it's beneficial for the same reasons in addition to saving your engineers from having to manually point out these issues and avoid any potential friction. Consistency and craftsmanship go a long way in writing maintainable code.

Code it like I'm 5.

I've worked on a lot of applications and seen how complexity manifests itself in many different ways. There are a slew of solutions to combat complexity that people infinitely smarter than I have figured out, named, written and given conference talks about.

Small objects and small methods are great. The smaller your chunks of code are, the more frequently you're given the opportunity to name concepts and provide breadcrumbs for the developers who will come behind you.

In the pursuit of simpler code I've heard the argument made that "senior developers should be able to reason about and interpret complex code quickly". While I do agree that a senior should be more skilled at this than a new developer, I think that misses the point.

All parts of your application should be accessible by all levels of developers within your organization. It's the responsibility of us, as experienced programmers to simplify the path forward and mark the trail with clear signage. This doesn't require dedicated time. This is our job. This is what we should be doing every single day.

Ignoring complex code and reserving it for your most senior developers is massively expensive. Not every developer is the same and it is unreasonable to think that all your engineers can hold the domain knowledge of a particular set of code in their head for weeks or months or sometimes years.

Reserving difficult to comprehend code for your most expensive resources is silly. It sets barriers within your organization where other people do not feel like they are inteilligent enough or trusted enough to work on those areas. And now you've said that the hardest things - which generally take the most time - now have to eat away at your most costly engineers.

My advice is to form the habit of writing code that requires as little friction as possible for your junior engineers to understand. If your juniors can ramp up easily, your intermediate and senior level developers certainly can too. Then you can stop worrying about comprehending code and get back to focusing on problems that actually matter to your customers.

Compose better commits and squash less often.

Some people ❤ to squash. I do not love to squash my commits. I like to be deliberate about what I’m committing and when I’m committing it. Because I am deliberate about this, I don’t like squashing. Squashing hides my history.

A feature was recently added to an app that I work on. That feature trickled down to 3–5 different places within our application. I’m very familiar with one of those sections of the application so it seemed logical to me to look for the commit that encapsulated the feature that was implementation for this section.

A little part of me died inside when I found out there was only 1 commit which encapsulated the creation of a new library and it’s implementation throughout the app. Now instead of seeing the changes in isolation I have to comb through the entire diff and hope that I don’t miss anything.

If your repo were a book, your feature branches would be your chapters, and your commits your paragraphs. Imagine reading a book that’s just a bunch of words with arbitrary indentation to provide the illusion of a paragraph.

The most valuable qualities of a software engineer are language agnostic.

Great employers know this already but it’s worth reiterating: years spent writing in a language do not equate to quality as a programmer.

A seasoned Java developer who has never written a line of Ruby in her life is not inherently a worse candidate for a Ruby job than the next guy who has been working alone for all ten years of his career DRY’ing up every class like a chamois because no one taught him that there’s such a thing as a bad abstraction.

There are concepts to learn that extend beyond your current tech stack. Don’t get stuck trying to learn all of the hot new languages, learn to write better software and you can transcend whichever stack you’re surrounded by.

Frankly, I don't understand "not invented here" syndrome.

Letting a community solve a common problem like handling accounting affords you so much additional time to focus on your domain and providing value to your customers and that’s likely what you’re getting paid to do.

If you feel like you really need to write some accounting code, give back to the library that you’re using. You can never have too much open-source software and you can never have too many helpful people.

On working remotely.

I recently had an injury resurface and I'm working from home for a prolonged period of time. Here's what I like about it.

It's worth noting that I've worked from home for different periods of time before. This isn't my first stint. I worked from home for a year during 2012-2013 and before that when I was consulting full-time. So i've gotten used to the little distractions and things that make it hard for some people during their initial transition to full-time working from home.

My home workspace

My favorite thing about working from home is getting to use my home office. I have a dedicated office that I share with my girlfriend, however I'm basically the only one that uses it. It's more comfortable than my work office because I own everything, and I'm able to customize it knowing that I'm not going to be moving it anytime soon.

Now if only I had bought that standing desk already…

No morning commute

I like driving, but I don't like my morning commute. It's too short to really enjoy my time in the car and traffic is really unpredictable. And in the morning drivers tend to be worse than the evening since they're barely awake.


I work at a company where dogs are allowed in the office, but I'm a cat person. Sometimes it's nice to take a minute and give your pet some attention.

Small breaks can become productive.

Sometimes at the office I'll get up and take a walk around the office and say hi to people. It would feel odd if I did that at home. Instead my breaks at home can consist of doing something small and thoughtless like cleaning the dishes.


I can cook lunch at home. Sometimes that just means heating something up in the freezer and other times it means making an omellete for lunch. Either way, it's cheaper because I already have the ingredients/food and it usually ends up being faster than stepping out to grab a bite.

It's peaceful

Maybe not if you have children. But I don't. Now that it's starting to feel like Spring I can crack the windows, have a slight breeze and it's quiet. I don't have the background noise and distractions of a typical open office environment.

No missed deliveries

Maybe it's because I was feeling especially bored after-hours during my first week in the house but I started buying several things off of Amazon and it was really nice to know that I'm able to be here when it arrives and I don't have to worry about delayed/missed deliveries.

Landlord visits/repair appointments

Our upstairs shower drain was leaking water which caused a wet spot in the ceiling above our kitchen. Since I was working from home I was able to let the repairman in and passively supervise my house while he did his thing

I'm enjoying working from home again. It's a nice break and while it will be nice being in an office again, I think remote work is something I will always feel passionately about.