One bottleneck I face in building personal projects is often the first step: sitting down to a blank IDE with endless possibilities. Therein lies the problem. When my brain sees all those possibilities it becomes paralyzed.

If I’ve got an hour or two to spare I may well spend the entire time just figuring out what to work on. Don’t even get me started on how.

I started thinking about what it was for me that made getting started so hard. What I found was that when I’m at work and I have a story I have no problem diving right in. So, what’s the difference?

I realized that in my job my tasks are largely spelled out. I know what I’m going to work on, in what language and with what patterns, and usually have some other constraints within which I need to work. So my mind doesn’t get overwhelmed.

I decided to build a tool to bring those constraints to my side projects. I call it Programming with Constraints (I’m not very creative at naming things).

It’s pretty simple. Just hit the Randomize button and it’ll give you a project to build, a platform to build it on, a language to use, and some other twist to make things interesting. The last one might be a time limit or a technique.

You can, of course, manually select from the options in each list. And you can ignore anything you don’t care about. For instance, if you already know what stack you’re going to use you might only care about the project.

Speaking of which, the projects are pulled from a number of collections of project ideas. When you select one, you’ll see a help icon you can click to learn more about the project details from the original creator.

You can also delete options from the list completely if you don’t want them to appear:

You can add new options that aren’t in the list, too. Just hit the “+” button, and feel free to open an issue if you’d like to see it added for everyone else.

If you want to restore things back to default, getting rid of things you’ve added and restoring things you’ve deleted, just hit the restore button:

Finally, and perhaps most usefully, you can “lock” each option if you want it to remain unchanged with each randomization.

Any feedback is appreciated! I hope this tool is helpful to you as it has been to me.

You can find the code on GitHub.