Automated tests give us the speed and confidence we need to make quick changes without having to constantly check the thing we’re working on. They improve our code, make finding bugs easier, provide documentation and help us save money in the long run.

But automated tests are not enough to ship quality software. They focus on the happy path and don’t do much for the unknown scenarios. They cannot be compared to an actual human being going through the app, using it in all the ways a real user might.

Before deploying a project or a new feature to production, I split every screen into small components and describe how they work. I do that by writing checklists. Components are forms, buttons, lists, list items, whatever I can think of having its own set of actions.

I then go through each checklist and try to reveal any unwanted behavior. I simulate slow networks, click and drag things around, submit forms multiple times, make different actions on things no longer exist, etc. I do my best to go off the happy path and break the system.

It’s not only about finding the bugs. By disconnecting and using the software myself, I discover new ways to make it better. I can clear my head and look to improve things – both code and design wise.

Compiling those checklists takes a lot of time and effort. And if you write them on paper as I do, they’re gone as soon as your code hits production. I’d love having a place to keep them.