How can I get my side software projects off the ground?
May 28, 2015 12:37 PM   Subscribe

I'm interested in developer diaries, ideas from software engineers about how they manage their personal projects, and other resources for self project management in the software space.

I'm a front end engineer with a good job and a fairly busy non-work life. I feel like I've mastered my day job from a technical perspective; I really like it for lots of reasons and I don't want to move on, but I want to continue learning on my own so my skills aren't stagnating. Independently, I also have a ton of ideas for side software projects that I'd like to work on just because I want to see them exist, but I have a hard time getting from the idea phase to the point where I can spend an hour a day working on the next thing in a particular project.

My job doesn't ask me to do much project management: I'm generally given a feature and asked to break the feature down into parts, estimate a timeline, and then execute the work. I do this fairly well, with the pressure of a paycheck and a deadline, but when I sit down with my own ideas I have a hard time getting from zero to moving. I feel overwhelmed by the scope of whatever it is that I'm trying to set out to do and don't often succeed at getting myself moving on writing code. If I can get over the first hurdle, I feel like I generally can keep myself moving-but it's now been kind of a while before I've gotten over the first hurdle.

I'm particularly interested in a developer diary kind of thing where an engineer writes a little bit every day about her process: what she's accomplished that day, and most especially at the beginning planning phase, how she got from idea to actually doing the work. But, I'm willing to listen to any ideas that others have in this vein: as a programmer working on a self-directed project with no particular deadline, how do you get from the idea phase to the execution phase, and then see it through to the end?
posted by Kwine to Computers & Internet (7 answers total) 17 users marked this as a favorite
Not diaries, but three sources of keen insight into the development process.

The Mythical Man Month. From IBM, circa 1968.
The Soul Of A New Machine by Tracy Kidder. About hardware and firmware development under pressure.
Joel Spolsky. Lots of great essay.
posted by SemiSalt at 1:02 PM on May 28, 2015 [1 favorite]

Background: Professional developer since 1991. Huge breadth of experience at starting personal projects; somewhat less stellar record at finishing them.

Work projects give you extrinsic motivation: I do this, I get paid (and I probably have to show timely progress to keep getting paid). Personal projects can lack that -- you have to find other motivations. So:

Solve a problem you need solved. Make something you'll use, that'll make life better in some little way or remove some annoyance. (One of my pet projects right now is a clock radio built around an Adafruit Trinket and an RDA5087 FM receiver chip because all commercial clock radios suck and are terrible and there's no way I will ever consider bringing a smartphone in the bedroom. Another: Digital car compass; nobody makes one I like.)

Make the smallest, simplest, quickest thing that can possibly work. That way, you give yourself a reward (being able to see something for your effort) early on. Then, as you iterate and polish, each improvement will be another reward.

Work projects often involve working with other people; personal projects seldom do. For me, a big motivation is not wanting to let those other people down. If that motivates you too, use it as a tool on your personal projects. It can be as simple as telling a spouse or friend about this thing you're working on -- you want to have some progress to tell them about when they ask you about it next week.

There's a group of cow-orkers with whom I lunch on (most) Fridays, and we do a "show and tell" where we show off the progress on our personal pet projects. That's a useful goad for me: if I get <milestone< working by the end of the week, I can show it off.

Document and share on the Internet. (I'm a proponent of "host it yourself on a domain you own", but I know smart people who use things like Instructables or github.) That way you get other people complaining about the flaws and suggesting (or offering!) improvements and building on your efforts. YMMV, but for me that adds an extrinsic motivation to make it finished and polished and good.

Don't re-invent the wheel! In the world of FLOSS-y stuff, putting together a bunch of "off the shelf" software components in a clever way has a way better reward-to-effort ratio than trying to do everything yourself. "Not invented here" is your enemy (especially and particularly if you're talking about cryptosystems!).

Exception: If all the wheels are square, re-inventing the wheel is a great idea.

The perfect is the enemy of the good. Is it better than the alternatives (which may be "nothing")? If so, get it implemented, get it out there and start living with it. If it really needs that extra bell or whistle, you'll know soon enough.

Abandoning projects can be a good thing. If you find a better solution "off the rack" or realize you've taken on something insurmountable or if you get to a point where you'd rather eat a bug than think about That One Project for one more second, walk away and build something more rewarding. As long as it's not happening every time...
posted by sourcequench at 1:29 PM on May 28, 2015 [3 favorites]

Best answer: You might enjoy this deck by Tyler Sticka about Side Projects That Ship.
posted by fifteen schnitzengruben is my limit at 9:15 PM on May 28, 2015 [5 favorites]

Best answer: This may be a little off the wall, not what you're looking for, but I'll throw it out there. In the town I used to live in, I started up a Recreational Computer Programming meetup which was (is) kind of like a Show and Tell for programmers to show off what little side projects, or, not even projects, just little experiments that they've been working on to an audience of people who have some chance of understanding and enjoying it. (It is most emphatically *not* a startuppy, VC pitch-your-idea kind of thing). There were usually about 5 to 10 people at each of the meetings, which were held once a month. As the instigator of this meeting, I felt an obligation to come up with something to show, in case nobody else had anything to show (which happened a time or two, but mostly other people would bring things.) As the meeting was on the 2nd Sunday of each month, typically, on the 2nd Saturday of each month, I'd be scrambling to scrape something together to show the next day -- usually some little procedural art kind of thing. This meant I tended to create a new github project about once a month for each of these little projects that I pressure-cooked up. Most of those things didn't really go anywhere or have any life beyond that month's meeting, but one of them kind of grew over time into something I am pretty proud of. And I wouldn't have even begun that thing if it weren't for that monthly little kick in the ass to do *something*, and even in the course of doing the projects that never really went anywhere beyond being fodder for one meetup, I typically learned something interesting.
posted by smcameron at 10:16 PM on May 28, 2015 [6 favorites]

I'm sort of in the same position as you. I have a busy day job that doesn't require any programming but is now so familiar that it doesn't eat away all my energy during the day. At home there is the usual chores and we have a 5 year old, so there's only a small bit of time left. Still I've managed to create a few software projects that we now use at work, and that are sort of successful. What I do:

- Create something that just barely works first and beta test it myself for a while. That way at least you see something that's no longer just an idea.

- During my commutes, I scribble down ideas. If there is some time and energy left, I might implement such a feature. Like you say, there is no deadline, so I treat it as such: a personal project that can grow.

- I'm keeping it close to what I know. I have done a lot of C++ in the past, so I continue with that for those projects to avoid that they get frustrating. I also only use open source software (Code::Blocks, wxWidgets, etc.) so it's only a time investment.

So my "successful" project is a drag and drop sound effects manager for Windows that we use at work exclusively, because it is so much faster and more reliable than the commercial software we used to have. Isn't that fun? There are even post production companies in the Netherlands that use it now. So if you release your software with an open source license, you may get positive responses which keep you motivated.

Good luck and have fun!
posted by hz37 at 6:02 AM on May 29, 2015

I am in a very similar situation and am struggling with this right now! The folders full of unfinished tinkering :( If it's any consolation it seems to be true of many friends and colleagues too.

I decided one way to try combating it by working with a friend who complements my skills with her own, and we choose projects where both of us need to do stuff together to get it done. (I will let you know how this goes when we finish something..)
posted by symphonicknot at 3:31 PM on May 29, 2015

Best answer: Jordan Mechner, the guy who wrote Karateka and Prince Of Persia for the Apple ][, kept a daily journal as he developed his games. Karateka was more or less solo, while POP was written under contract with Broderbund, although the first half of the POP journals are still pretty much him coding away on his own (the second half has a lot of boring marketing meetings). 1980s microcomputer game programming was more like a personal project than modern AAA game dev.
posted by Harvey Kilobit at 7:39 PM on May 29, 2015

« Older Does this product exist?   |   How To Move When Broke Newer »
This thread is closed to new comments.