How Google Implemented Automated Testing

I have been spending a lot of time thinking about the hows and whys of implementing automated testing in our workflows, and thought this Mike Bland video was great:

Time is a Constraint

From coding to organizing one of the most frequent ideas I see raised when attempting to solve a vexing challenge is “what if we throw more time at it?” It usually is phrased something more like “what if we do more of X” or “what if we do more of Y” where X or Y is some idea that on its own merits is a good idea. Sadly ideas do not exist in a vacuum and we only have twenty-four hours in a day. So either we find ideas that do not require tons of time or we eliminate them.

In software one of the key decisions a team has to make is where they are going to spend their time. In many cases the decision usually rests with the front or back end of the website. There exist pluggable modules that largely abstract away the complexity of the front or back ends. In the case of the back end it involves using something like Airtable. In the case of the front-end it involves using Bootstrap. In many cases a hosted Content Management System like Wordpress or Squarespace abstracts the entire thing away. We can choose where to use off-the-rack components and where we want to custom tailor the things we build. In order to decide this we should ask where we add our special sauce, and what the cost is of going custom over off-the-rack.

The magic of off the rack components is they can be used to easily create a protosketch:

For many ideas there is a shorter version of the idea that can be built. It may not comport with the product owner’s exact idea of what their thing should look like. However it will at least be close and often functional. In software, like everywhere else, the Pareto principle applies. The last 20% of functionality will require 80% of the effort. If a product owner is willing to accept a simpler version of it to start then they can get more value for the time and money developers spend.

Single Process People

What is the most efficient and productive way to get work done? People are inherently single process. The research is clear. Finding focus for the single thing is the subject of many software hacks. Pair programming holds you accountable to focus only on software development. Apps like iA Writer used in full screen mode cause you to tune out the rest of background noise. Now Apple has added do not disturb and notification management features to iOS because they worry the notifications are addictive and negatively impacting their brains. Collectively we recognize this problem and have found solutions for it. Yet we still have so far to go.

One place that remains a challenge is dealing with asynchronous communication. While the telephone is coming out of fashion and folks are using tools like email and Slack, there still is not always a culture that allows it to work and occur. Recently when dealing with a credit card dispute I filed the dispute online, they responded that I should fax them the evidence of my dispute, I would receive information on it via snail mail, and I should call them with questions and to learn about the status. The surface area of communication mechanisms here is very large and inconsistent. The mental work required to manage this task is large and having to call them means that during my Sunday evening review of my inbox I cannot simply email them for a status update. I now have to engage them on their own terms and be interrupted.

When it comes to focus at work one tool that is a sharp knife is the meeting. I have written in the past that meetings are effective attention capture and focus mechanisms. They force people to be accountable. However too many meetings or ill timed meetings can be a denial of service attack against a single persons productivity.1 Some software companies will declare a specific day to be meeting free. However given the deep concentration software development requires, for them, it should be a red flag if a specific day needs to be without meetings. The better tactic would be to declare one or two days to be meeting allowed. Or to have a time block at the beginning or end of the day where meetings can be scheduled once development work is over.

  1. The exception to this is of course for folks whose job is primarily attending meetings. Folks in sales or management probably need to be in a lot of meetings. However given that meetings do not scale well, figuring out how to move work from a meeting to a non-meeting paradigm can be a big win for anyone. 

Code for America Summit 2018

Much of the break in blogging for the past week has been the result of spending the latter part of last week at Code for America Summit in Oakland, CA. I traveled to California on Wednesday with co-workers from my group at MAPC and friends from Code for Boston. It was great to see many facets of Boston’s civic technology ecosystem represented in the talks and sessions. Conferences are important both for taking time to meet and learn from peers, and to take time to be reflective. I was lucky to experience both.

One session that stood out was one on agile software development put on by the Code for America engineering team. One of my goals for my own engineering team has been to adopt more agile practices. Having an example in the civic technology world of another team that follows these practices is a helpful role model. In government it can be challenging to be the first one to adopt something, so having peers that have adopted it first makes a big difference when going to management. While I am a strong believer in meeting people and organizations where they are, sometimes people and organizations need to realize they are not special exceptions where the best practices will not work.

I also experienced my first AirBnb. It was not a bad experience but certainly less convenient than a hotel room. While we had a very nice apartment, the apartment we rented for the weekend was not in the convention center and only had two pairs of entry keys for three people. While the price and value of the apartment we rented was fantastic, having an entire apartment with a big kitchen felt like overkill merely for sleeping at night. Finally in a conference situation there is lots of time with people, and while I enjoy my co-workers company, it would have been great to have a space to be completely alone. Overall while I am willing to use an AirBnb again, I will likely prefer a regular hotel room in the future.

Getting to Inbox Zero

For the most part I try to keep my inbox “near zero” but know that getting to real zero can be a challenge. The first part of the challenge is mental. No matter how hard you try it can be difficult to stop your inbox from becoming the “place where important stuff stays you do not lose it” which it should not be. The second challenge is that it can also become your to-do list. Most people suffer from the worst possible scenario: it becomes the place where important stuff stays and also your todo list and it becomes hard to distinguish how much is from one bucket or the other.

I have a few components to processing my inbox. First I have mastered GMail’s keyboard shortcuts. With single keystrokes I can open, reply to, and file away emails. This lets me rip through them at a much more aggressive pace than with other clients. Second is I take time to unsubscribe and filter emails I receive regularly from vendors. This part sucks but it pays dividends down the line. Each unsubscribe lowers the daily noise of my inbox. Third is I use filters to “skip the inbox” for things I want a record of and receive regularly. Most often these are recurring bill notices that are already on auto-pay. I wish I could have a “negative filter” on these that would alert me if I did not receive an expected one. Ultimately the goal is to automate as much as possible and find signal in the noise.

The weirdest part of email is that while it appears to have been solved in a web client, mobile remains a free for all. Apple’s Mail app on iOS works fine but lacks some of the polish and features of the Gmail app. However the Gmail app struggles to work well with Siri and contain all the offline archiving of my messages that the iOS app has. Personally I miss the Mailbox app.

Ultimately the state of my inbox is usually a reflection of how on top of things I am in life. The more frazzled the inbox is, the more behind I usually am in life. It always feels good to get back on top of the inbox and todo list. Spending time to do this pays many dividends as I go through my week.

Follow Zagaja.com posts: RSS Feed
This work by Matt Zagaja is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.