Tuesday, November 25, 2014

As programmers why we never finish our projects

Every developer starts about 100 projects that never end up going anywhere. So many good ideas, so few executed ideas. Just about every software developer that I know has a folder structure that resembles the one shown. More than a handful of incomplete projects that seemed like a great idea once upon a time. Like many of you, I’ve had many ideas for great products / companies and even started down the path of implementation for some of them. A bot that determines arbitrage opportunities between eBay and Amazon. A social network for referral based businesses (plumbers, electricians, software developers, etc). A bitcoin search engine. A CSS framework for the days when Bootstrap wasn’t literally everywhere. A “hot or not” that found people from Instagram. A real-time visitor analytics engine. The list goes on. I’ve started on just about every one of these projects (and more), but never saw them through to completion. In talking with my developer friends and colleagues, I find that the story is oft repeated. Some folder on their computer that lives as a graveyard to high hopes and incomplete dreams. I’ve wondered why this is.

Success as an Obstacle


We, as an occupation, are blessed with high employability. Currently, the national unemployment rate is around 6.7%, while the unemployment rate for web developers is closer to 1%. Our salaries are also substantially higher than the average. In 2012, the median income for software developers was more than $90,000, now of course, if you’re any good, you can far exceed that. Having taught complete n00bs before and watching them become entry-level developers has brought me a great deal of personal satisfaction. But it’s also brought them financial satisfaction, with starting salaries ranging from $45,000 to $70,000.
So it’s clear that software developers are generally successful. Yes, there are thousands that completely suck. There are many that are not paid well at all and can’t hold a job for very long. But I’m making a generalization here, so allow me the liberty to be general. A halfway decent developer is a relatively (compared to the general population) successful person. This success can paralyze and inhibit the completion of goals, however. We are far from hungry and we’re too smart to think that we can ever be foolish.

The impediment of Knowledge


We know so much. We can talk about the shortest way to travel between multiple cities. We understand how to take large problems and break them into smaller sub problems. We can tell you the best way to “abstract” whatever your system is into discrete units. We are true polyglots as we can say “Hello World,” in any number of languages. We don’t shy away from situations that might require thousands of calculations since we understand the power of recursion. We know a lot, but is that enough? The great Einstein once quipped:
A little knowledge is a dangerous thing. So is a lot.
Sir Isaac Newton, one of the smartest men of his time, could accurately predict the movement of celestial bodies so many millions of miles away. He stood on the shoulders of giants to see farther than anyone else had. Physics wasn’t his only interest as he also (co)gave us calculus. Surely he could understand how money and markets work, right?

Wrong. During 1720, at the peak of the South Sea Stock Bubble, he threwdown a ton of cash and went broke. All of his knowledge didn’t help him one bit, because he failed to understand the dynamics of markets. His knowledge was not domain independent — he was a master of moving bodies, but that did not translate to the psychology of his fellow traders. We too are like that. While we can explain algorithms and data structures all day long, we may not inherently understand what people want. When the twitters first came about, I suspected it was just a fad that would disappear. I was wrong. We often seek sexy solutions without realizing the mundaneness of the problem.

Career ADHD


I’m sure the same holds true for any major city, but I am speaking of my experience and the experiences of my colleagues and friends in the New York City area. We jump around in our careers. We swing between startup, corporate, agency and “just taking time off.” I realize this doesn’t hold true for everyone, and the trolls of the internet will leave comments with how they’ve stayed at the same job for 19 years, but I have found that those with the passion / interest in having a side project, often don’t stay at one place for too long. I think that this Career ADHD leads to many abandoned side projects.
Sometimes a new job starts up and the demands of getting caught up there mean putting the side project on “pause.” Sometimes we lose interest because the side project was aligned with something that we were doing at our previous job. While logistics is a reason that switching jobs every few years makes it much harder to stick to a side project, there is something to be said about the mentality of switching. If you can change your job in 3 years, why not change your side project in 3 months? You’ll have a better idea at (seemingly) the exact moment that you hit a wall in your current side project.

Fixing It


So I’ve identified a few reasons that I think that I have so many unfinished “great ideas.” Admitting it is the first step. Understanding the reasons why is the second step. Now, for the third step — fixing it. It won’t be an overnight solution and many of my projects will remain forever abandoned, but after thinking through it a bit more, I think I’ve come up with some steps to help this from becoming a pattern.

You are Awesome


First, recognize that every side project makes you a slightly — or in some cases, substantially — better developer. Your skills are the sum of the times they’ve been applied, so the more you develop, the better you become. Learning new technologies / languages / frameworks is a great reason to start a side project. Even if it never finishes, something was accomplished. So, first realize that you don’t always have to finish every project — as long as you walk away with some gain.

Build parts of Projects


You’ve started so many projects and, as you got wiser with each, hopefully you learned to reuse code. Building modules and libraries instead of rewriting everything each time. Assume that whatever side project you’re working on now may not be the last one, so you’re better off grabbing components from it instead of of building specific things that ONLY this project can use. Documentation matters, so leave notes for yourself that can be easily applied to the next project.

Do it with Others


Now that we’ve gone through successful ways to fail completing a project, let’s try to complete some! It may be your brilliant idea, your baby, your future billion dollar empire, but as of right now — it’s nothing. Share it with other people, the more the merrier. The natural excitement will continue to propel the project forward. Maybe you can even open source it, to encourage community participation? Relying on others and having them rely on you keeps you foused and accountable.

Solve problems you Have


Rather than making your next project an iPhone app that lets you take pictures of food while you travel by bicycle in cities that have cloud cover 43% of the time where the nightlife consists of urban zoos that hold endangered genders of overpopulated species — try to make something that you would ACTUALLY use. If you’re a developer, solve developer problems. If you work for an agency, create something that agencies would like to use (see: 37 signals). Even in your personal life, you invariably have some small problem that technology can solve, so why not create something to solve it? That way, even if it doesn’t actually go anywhere big, at least you built something useful.

Size matters, so stay Small


Don’t create an enterprise XYZ when the timeframe to do so would be 8 months. Focus on something you can create in 4 weeks, part time. Scale your features back to keep a monthly release cycle, no matter how simple. Having something shipped has a strong psychological component that further encourages you to work on it. Something sitting on your laptop for 8 months that has never seen the light of day is almost depressing to work on. It’s all about the little wins, since the journey is a marathon instead of a sprint.

Brag until you Fail


Social pressure is a real thing. It’s why skinny jeans became a thing. Instead of working in secret, tell people what you’re working on. The feedback you get might help shape the product. I can assure you, no one is out to steal your idea. It’s extremely hard to execute even a simple idea, so don’t worry too much about that aspect. Share your idea, it’ll validate (or invalidate it), shape it and most importantly, commit you to it. We don’t want to let people down and we do want to save face, so tell people what you’re working on.

What about you? What tips and tricks do you have for getting your projects done?

2 comments:

  1. I have a large number of incomplete projects point accusing fingers at me, and I have a number of personal projects that I got to the point where other people took them over. If you find yourself losing interest on a project that is almost finished, see if you can find someone who will take it off your hands and make it good.

    I have found that some people are good at the early stages in projects but lose interest as things start to take form. Then there are others who struggle in early stages of projects, but are really good later on. You might find people who will take your incomplete work and turn it into something you can be proud of.

    ReplyDelete
  2. There's a number of side benefits to consider to a side project as well. Not only could it be problem solving, but it can be exercise for skills you need to stretch a bit. Start a project WITH someone if you need to learn to work with a team, especially if you can find a personality type you need to learn to work with. Stay disciplined on a regular basis to learn how to keep determination when you wouldn't normally want to (make it a labor, if you will). Pick the appropriate type of project for that.

    Essentially, you can learn things by doing projects in programming that have less to do with programming and more to do with being a good developer. I learned how to manage people by starting an HR department at a call center (an odd opportunity, not common and not exactly recommended). That's not a side project you would think a developer would pick up, but keeping in mind opportunities for learning such things is probably good. If you're not interested in that area, obviously you can skip it, but not every side project has to be tech and or at the very least all about tech =c)

    ReplyDelete