Skip to content

The Art of Finishing

Published: at 08:10 PM

It’s a quiet Saturday afternoon. I’ve carved out a few precious hours for coding, armed with a steaming cup of coffee and the familiar urge to dive into a project. As I settle into my chair and open my terminal, I’m confronted with a challenge that’s become all too familiar: deciding which of my many unfinished projects to tackle.

I navigate to my project directory, greeted by a graveyard of half-implemented ideas and stalled works-in-progress. Each one represents a different problem I’ve tried to solve, a different technology I’ve attempted to master. They’re all interesting, each with its own purpose and potential. But as I scan through them, I can already feel my enthusiasm waning. I know that whichever one I choose, I’ll be facing not just the original problem, but a hydra of new challenges that have sprouted since I last looked at the code.

After some deliberation, I make my choice and fire up my IDE. As I pull the latest changes and begin the archaeological dig through my commit history, I brace myself for what I know I’ll find. Sure enough, there it is: an unfinished frontend task, more wireframe than polished UI. Or perhaps it’s a library integration that’s hitting limitations I hadn’t anticipated. Or, in classic over-engineering fashion, I’ve built a complex architecture for a problem that could have been solved with a simple script.

I roll up my sleeves and dive in, determined to make progress. The next couple of hours fly by in a flurry of activity — refactoring code, debugging integration issues, or wrestling with CSS to get that one component to align just right. Before I know it, my allocated time is up.

As I prepare to step away from my desk, I can’t shake a feeling of frustration. I started the session full of optimism, ready to make significant headway. Now, I’m left with a nagging sense of inadequacy. Despite my efforts, it feels like I’ve barely moved the needle. The codebase is still a maze of TODO comments and half-implemented features. The Hydra of software development has grown two new heads for every one I managed to address.

This cycle of enthusiasm, struggle, and disappointment has become all too familiar. It’s the Hydra Project Effect: no matter how much progress I make, new challenges always seem to sprout in their place. But while this pattern may seem unbreakable, I’m determined to find a way to tame this beast. In this post, I’ll explore strategies for breaking out of this cycle of endless beginnings and unsatisfying middles. It’s time to learn the art of finishing, to slay this Hydra once and for all, and to finally experience the satisfaction of a completed project.

My Hydra looks amazing, I am fantastic at drawing

The Allure of the Endless Project

There’s a certain comfort in the realm of infinite possibility. When a project is ongoing, it can be anything. It’s Schrödinger’s1 project — simultaneously perfect and flawed until you actually finish it and put it out into the world. The moment you declare a project “done,” you open it up to criticism, both external and internal. What if it’s not good enough? What if I missed something crucial?

This fear of finality, combined with the excitement of new ideas, creates an ideal environment for project procrastination. It’s always easier to start something new than to push through the final, often tedious stages of completion of a project. But there’s more to it than just fear.

An unfinished project is full of intoxicating potential. It could be the next big thing, a revolutionary idea, or your magnum opus. This potential often feels more exciting than the reality of a finished product. There’s also comfort in the familiar territory of an ongoing project. You know the codebase, you understand the problems, and you’re in your element. Starting something new means facing the unknown, which can be daunting.

The illusion of productivity plays a significant role too. As long as you’re working on something, you feel productive. Jumping from project to project gives you a constant stream of “new project energy,” which can feel more invigorating than the grind of finishing a single project. It’s a way of avoiding difficult decisions that come with completion. Do you cut that feature you spent weeks on but isn’t quite right? Do you release now or spend another month polishing? By keeping projects ongoing, you can sidestep these challenging choices.

The absence of deadlines in personal projects adds another layer to this complexity2. Without the external pressure of a due date, it’s all too easy to fall into the trap of perfectionism. We find ourselves endlessly tweaking and refining, always chasing that elusive “perfect” solution. The irony is that this pursuit of perfection often leads to imperfect results — or no results at all. In our professional lives, deadlines force us to prioritize and make pragmatic decisions. But in personal projects, the luxury of unlimited time can become a curse, allowing us to justify spending hours, days, or even weeks on minor details that, in reality, make little difference to the project’s overall success or usefulness. It’s a stark reminder that sometimes, “good enough” truly is perfect, especially when the alternative is never finishing at all.

Paradoxically, sometimes we fear success as much as failure. A successful project might lead to increased expectations, more responsibility, or a change in identity that we’re not quite ready for. The unfinished project becomes a safety net, protecting us from the unknown consequences of success.

My typical project timeline graph

The Cost of Never Finishing

But this cycle of endless beginnings comes at a steep price. There’s a unique satisfaction in seeing a project through to completion that no amount of starting can match. Moreover, unfinished projects carry a mental weight. They linger in the back of your mind, quietly draining your mental energy and enthusiasm.

Perhaps most importantly, we learn different lessons from finishing projects than we do from starting them. Starting teaches us about ideation and initial implementation. Finishing, on the other hand, teaches us about perseverance, attention to detail, and the art of knowing when to let go. These are invaluable skills that can only be honed through the act of completion.

The costs of never finishing extend far beyond just missed opportunities. While starting projects might expose you to new technologies or concepts, it’s in the act of finishing — of solving those last, trickiest problems — where real skill growth often occurs. Each unfinished project can chip away at your confidence. Over time, you might start to doubt your ability to complete anything substantial, creating a self-fulfilling prophecy of incompletion.

The end stages of a project often involve optimization, refactoring, and really understanding the intricacies of your code. By not finishing, you miss out on these valuable learning experiences. In professional settings, being known as someone who starts things but doesn’t finish them can be detrimental to your career. Employers and clients value those who can deliver completed projects, making the ability to finish a crucial professional skill.

Every unfinished project takes up mental space. It’s like having dozens of browser tabs open — each one uses a little bit of your mental RAM, leaving you with less capacity for new ideas and focused work. This mental clutter can be a significant drain on your creativity and productivity.

Perhaps most importantly, you deny yourself the incomparable feeling of satisfaction when you release a finished project into the world. There’s a joy in shipping that can’t be replicated by starting something new. Finished projects also invite feedback, and without shipping, you miss out on valuable insights from users or peers that could significantly improve your skills and future projects.

Understanding both the allure of endless projects and the cost of never finishing is crucial. It’s not about dismissing the excitement of new beginnings, but rather about finding a balance — learning to channel that initial enthusiasm into the equally important (if sometimes less glamorous) work of seeing things through to completion. By recognizing these patterns in ourselves, we can start to develop strategies to overcome them and finally slay the Project Hydra.

Strategies for Taming the Project Hydra

So, how do I break this cycle? How do I learn to finish what I start? Here are some strategies I’m implementing to tame my own Project Hydra:

  1. Define “Done” from the Start: Before diving into a project, I’ll clearly define what “finished” looks like. What are the core features that constitute a complete project? I’ll write them down and resist the urge to expand this list as I go. This clarity helps prevent scope creep and gives me a clear target to aim for.

  2. 🚀 Embrace MVP: Instead of aiming for perfection, I’ll aim for “good enough.” I’ll get a basic version working and out into the world. I can always iterate and improve later. This approach helps maintain momentum and provides early feedback opportunities.

  3. Time-Box My Projects: I’ll give myself a deadline. It doesn’t have to be short, but it should be finite. Having an end date creates urgency and helps me prevent endless feature creep. I find that breaking larger projects into smaller, time-boxed phases helps maintain a sense of progress.

  4. 🧩 Practice Finishing Small Things: I’ll build my “finishing muscle” by completing small projects or tasks regularly. I recognize that the skill of finishing is like any other — it improves with practice. This could be as simple as finishing a blog post or completing a small coding challenge each week.

  5. 💡 Separate Ideation from Implementation: I’ll keep a separate idea log. When new features or project ideas pop up during implementation, I’ll jot them down for future consideration instead of immediately acting on them. This helps maintain focus on the current project while still capturing potentially valuable ideas.

  6. 🎉 Celebrate Completions: I’ll make finishing a big deal. I’ll celebrate when I complete a project, no matter how small. This positive reinforcement can help shift my mindset towards completion. Whether it’s treating myself to a nice dinner or simply sharing my accomplishment with friends, acknowledging these wins boosts motivation for future projects.

  7. 👥 Embrace Accountability: I’ll find ways to make myself accountable for finishing projects. This could involve finding an accountability partner, making public commitments about project milestones, or joining a group of fellow developers. External accountability adds motivation and support to the often solitary journey of personal projects.3

These strategies provide my personal roadmap for overcoming the challenges of the Project Hydra. By implementing them consistently, I hope to develop better habits and increase my chances of seeing projects through to completion. It’s about creating a supportive structure around my work, balancing internal motivation with external accountability, and gradually building the skill of finishing.

Of course, strategies are just the beginning. The real challenge lies in consistently applying these approaches to my work. It’s a process of trial and error, of learning what works best for my personal style and the specific demands of each project. But with each small win, with each project pushed a little closer to completion, I’m building the habits and mindset needed to finally tame the Project Hydra.

The Path Forward

The path ahead will be challenging. I know that changing ingrained habits and thought patterns will take time and consistent effort. There will likely be setbacks along the way – moments when the allure of a new project tempts me away from finishing the current one, or when the fear of imperfection makes me hesitate to declare something “done”. But I’m committed to pushing through these obstacles and building my “finishing muscle”.

This journey isn’t just about completing code; it’s about growing as a developer and creator. Each finished project, no matter how small, is a step towards becoming someone who not only starts with enthusiasm but finishes with satisfaction.

The Project Hydra has loomed over my work for too long. Armed with new strategies and determination, I’m ready to face this beast head-on. It’s time to stop planning and start doing.

Now, if you’ll excuse me, I have a project to finish – and this time, I intend to see it through.4

Footnotes

  1. Unlike the cat, however, most unfinished projects are neither alive nor dead - they’re just taking up space on our hard SSD NVMe drives.

  2. This phenomenon is closely related to Parkinson’s Law, which states that “work expands so as to fill the time available for its completion.” In personal projects, the available time is often infinite, leading to endless expansion.

  3. A study by the American Society of Training and Development found that people have a 65% chance of completing a goal if they commit to someone else. That chance increases to 95% when they have a specific accountability appointment with the person they’ve committed to.

  4. I finished this article in one sitting, fueled by determination and an alarming amount of coffee. No Hydras were harmed in the making of this blog post.