Like many software developers, I have a lot of solo projects lying dormant in my computer's hard drive. Most of them are half-baked concepts that I began with good intentions; others are experimental spikes that went nowhere. The construction of that digital graveyard of forgotten projects is because real life got in the way of my plans. For instance, a new work project rolls my way, or a consulting project suddenly appears, and the side project gets put on the backburner for an indeterminate amount of time.
While most of these projects have remained forgotten, they're not always abandoned entirely. I occasionally come back to some of them. Getting back into a project is a challenge in itself, especially when I haven't been thinking about it for months. However, I found a way that has helped me get back into a project I haven't touched in a long time: an automated test suite.
Software developers and testers tend to follow healthy automated testing habits in work environments that support these practices. Some organizations make automated testing a requirement for daily work—for example, developers can't merge new code unless it has corresponding tests. Other times, team members already know the benefits of automated testing and put it into practice. But whether it's an obligation or not, I've seen that those same testing practices rarely transfer over to personal projects more often than not.
On the one hand, it's understandable. We tend to have limited time to work on most personal projects. We'd rather work on building new features and bringing our ideas to life instead of writing tests when all we have are a handful of hours throughout the week. However, on the other hand, automated testing can yield surprising results even when the project begins its life as a solo endeavor. Here are a few reasons why you may want to consider investing in test automation for your next side project.
Jump back into your project instantly
As mentioned above, real life always seems to get in the way of our best-laid plans when it comes to working on a solo project. Whether it's because of paid work that needs your full attention or personal obligations that you must take care of, your side work is typically the first thing that gets put on hold for a while when time is short. Eventually, we can return to working on the project after a bit, but the re-entry process is rough.
I don't know about most of you, but when I have to step away from any creative project for more than a couple of days, I need plenty of time to get my head back into what I was doing before my hiatus. The longer we step away from our work, the longer ramp-up time we'll need to remember what we need to do to proceed. If we're lucky, we might have some notes documented somewhere, but we often don't do much project management on our own either. Chances are that any notes you have are scattered, unorganized, and not practical.
That's where automated tests for these side projects serve us to return to our work. A well-built test suite helps us get back on track almost immediately in multiple ways. Automated test suites help keep us from breaking things as we get back into the flow. Also, the tests can serve as documentation of some of the more intricate parts of the project since it's easy to forget about small details and nuances. And as opposed to written notes and documentation that can quickly become stale, most automated tests prove how the system works.
I've been able to experience the benefits of having automated tests for a solo project that I was unable to work on for over three months. Some parts of the system involve third-party services, and when I returned to work on the project, I completely forgot how I integrated them into the codebase. Scanning and running my test suite not only showed me what I implemented previously but also reminded me of some crucial tasks I planned to work on next. It gave me the information I needed to become productive in less than an hour—much better instead of spending days to get back up to speed.
Gain clarity with your work and get unstuck quickly
Since most personal projects begin as solo efforts, everything rests on your shoulders. That means you probably won't have someone else to talk to about your project or bounce ideas to improve your work. Working along might help you start working on your ideas quickly, but you'll likely reach a point where you need help to gain traction with your project. Sometimes we get stuck because we don't have the experience or hands-on knowledge to build part of our project. But in reality, we spend too much time second-guessing our intentions on what we're doing.
Talking through the problems and mental blockers you run into with someone else virtually guarantees that you'll find a way through the issue. It's one of the reasons why pair programming is highly effective in software development shops, and why the "Build in Public" movement is popular among solo entrepreneurs and bootstrappers. These moments of collaboration expand our arsenal more than what each of us can do on our own. When we work alone, we lose these benefits.
Test automation can fill in the gap if you're working on a software project and can't find any trusted sources to riff off one another. The book The Pragmatic Programmer introduced the concept of rubber duck debugging, where they found that having to articulate your problem often leads the solution appearing almost magically. Writing tests allows you to simulate the same experience of explaining your work. It doesn't replace an actual human who can talk along with you, of course, but it does serve the purpose of getting you unstuck, and it serves the purpose brilliantly.
I don't regularly practice any test-first development strategy like TDD, but writing tests is my go-to strategy when I find myself making less progress than I'd like. When I hit a wall on building a feature or fixing a bug, I stop coding and move to testing. This switch forces me to try to express what I'm trying to do. If I can't clearly communicate what I'm trying to do or my tests become overly complex, it's almost always because I'm going about it the wrong way. These moments force me to take a step back to clarify my thoughts. Without fail, I end up with more elegant solutions to all my problems.
Help future contributors get up to speed
Even if your side project starts as a small, single-purpose utility, you never know if it has the potential to morph into something more significant in the future. For instance, what if you release your side project publicly, and it begins garnering attention and even generating a profit? Plenty of now-profitable businesses started as a small side project built by one person that solved a specific problem well. Your work can go through the same growth.
When you're fortunate to build a solution to a problem that people want to pay you for, you'll begin having ideas on expanding the scope of your original idea. Some businesses might stay small, but you'll probably want to bring more people to help develop your ideas or handle the parts where you're not an expert. However, that's easier said than done. The cost of bringing someone new into the fold is much higher than you expect. If your project isn't set up early to help new contributors know how your systems work, that cost increases exponentially in terms of time and money needed to get someone up to speed.
Test automation can play an integral role in keeping those costs from skyrocketing. No matter their experience level, everyone needs some time to onboard and become productive in a new project. A well-maintained test suite will help by serving as live documentation to show how the essential parts of your project work and keep new contributors from breaking critical sections of your systems while they learn its ins and outs. More importantly, these tests will significantly reduce the time you'll need to explain the functionality of your project. The time you will save with test automation pays off from the very first person you onboard.
As a freelancer, I've worked on various projects where I'm the first or second person to touch the codebase other than the original creator. The projects without any automated tests were always the slowest for me to feel productive. For the first month or two, I kept pinging others for clarifications and guidance and accidentally broke vital functionality way too often. On the other hand, projects with decent automated test coverage were easier to grasp. The test suite often yielded answers to my questions, and I quickly caught any defects to existing code. There's a drastic difference for new hires between having automated tests and not having any.
Summary
Most developers and testers will think that writing automated tests for solo projects is a waste of time and effort. Typically, the time spent on small side projects is minimal, and there's little time to spare for building new functionality. Using that precious little amount of time for test automation doesn't seem worth it. However, if you plan to work on these projects for an extended period, there are lots of benefits in taking the time to build automated tests, even if you think you'll be the only one working on them.
Often, we need to step away from our side projects for real-life duties. Automated tests will help quickly bring you up to speed when you come back. Writing tests can provide the clarity you need to unblock yourself when you work on projects with no one to talk through your issues. Finally, there's always a chance your small solo venture turns into a profitable business where you need to bring more people on board to help. If you're one of the lucky ones to reach this point, a well-constructed automated test suite will help your new hires and save you tons of time and money along the way.
Sometimes it won't make any sense to write any automated tests. For example, your solo project does a small task that you can test in seconds, or you plan to be the only one to use what you built without expanding beyond its initial scope. But for any project that can grow beyond a single-function use case, consider spending the time to include test automation as part of the work because it can pay off a lot more down the road.
Do you write automated tests for your solo projects, or do you think they're a waste of time? Let me know in the comments section below!