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?
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.
ReplyDeleteI 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.
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.
ReplyDeleteEssentially, 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)