This is a continuation of the series of articles on the valuable lessons I've learned while working at Flite.
You can find a list of the articles in the series here.
Nice and Clean on the Outside
Here's a scenario. You're at an interview for a company you'd really like to work for. You ask them a question about some standard practice in the software industry. These could be something like:
- Do you practice continuous delivery?
- Do you practice TDD?
- Do you do code reviews?
- Do you let developers have 20% time?
- How do you handle performance evaluation?
- How do you handle mentorship and growing engineering skills?
- Do you do UAT's or AB testing?
- Do you collect KPI and usage metrics?
- Do you have an industry space competitive analysis?
- What is your process for design?
- How do you handle a struggling employee?
In most cases, I've found that the interviewer answers in the affirmative in some way or another. As an organization, I think most people want to assume that when viewed from the outside, we are doing things "the right way" or a novel and innovative way that complements the right way.
Now, unless you have worked in the CIA and are a human lie detector, you're probably inclined to believe what is being said to you. It makes sense to want to trust people that they are doing things "the right way".
An Episode of "Hoarders" on the Inside
Some unspecified time after joining an organization, you will have the moment. Dan Luu in his article wat, captures the experience we are all likely to have.
new person joins
new person: WTF WTF WTF WTF WTF
old hands: yeah we know we’re concerned about it
new person: WTF WTF wTF wtf wtf w…
new person gets used to it
new person #2 joins
new person #2: WTF WTF WTF WTF
new person: yeah we know. we’re concerned about it.
Now, I'm not advocating that we as an industry try to prevent this. It's much like a house where you throw all your knick-knacks from vacations into the closet and don't ever speak of that closet's existence. You will find corners of your codebase or organizational processes that simply don't gel with what what you were sold on that first day.
The most important things are to
1) not forget the level of WTF you are experiencing at that moment and 2) not lose sight of the fact that you will likely also create wtf moments for others given a long enough timeline.
Cleaning One Closet at a Time
When I came to Flite, I found those old back rooms no one talks about as well. WTF moments ensued and I felt compelled to share my opinion about them. One of these chief concerns was a lack of robust testing. Being a big proponent of TDD and having been thrilled that Flite had a large suite of unit and integration tests, I was quite let down when I discovered how antiquated and substandard many of the tests were. Unsurprisingly, the engineering manager responded with "well, why don't you fix it?".
I realized at that point that presented a good point. Not just that I should fix it by myself, but that I should keep bringing it up as well. This is a salient point that I think many engineers should recognize. It is important to consistently present a point you are trying to change. Others may get tired of it even if you present good reasons and examples but it is important to not slide back into the apathy that others hold.
It took quite a while but I managed to increase test coverage, moved tests to more of a single responsibility model and created a better behavior based structure for tests at Flite.
Keep Track of What is Slipping
It's easy to be passionate about something until you have to switch context. One of the other back rooms I wandered into when was metrics tracking. We had brought on an interaction designer and they wanted to know how our analytics were collected and collated so they could draw conclusions about how the product was used. I found that the metrics we collected for platform usage were mediocre at best and in some cases, completely and utterly wrong.
Considering I also had a boatload of other work to do, while not insignificant, this had to wait. I had features that would actually make us more money to finish. I did, however, set up a log that sent me reminders to investigate and fix this issue. This gave me a reminder every day of "Hey, this stuff needs fixing!" and kept it fresh in my mind.
And that is how I slowly changed our metrics infrastructure. I refactored the library for collecting our metrics to make it easier and more accurate. I talked with PMs and developers to help them connect on what needed to be tracked when it was implemented instead of as an afterthought. It took a while but our interaction designer got the data that they wanted.
Call to Cleaning
The only thing that is worse than having one of those dirty closet moments is forgetting about having it and then rediscovering how disgusting it was later.
Do not assume you are the only one that cares. You're probably just the only one that is motivated at that moment. Don't let it fade away for another person to make that unpleasant discovery. Do what you can to remind yourself, work slowly towards solving parts of the problem and let others know you care about fixing it. That's how you keep a clean house.