Coming up with ideas for side projects is hard. Coming up with ones you enjoy working on and can stay focused through to the end is even harder.

So, how do you come up with enough ideas to create a portfolio of diverse experience? That’s a problem I’ve been thinking about how to solve. And I think I may have a solution that can work for certain projects.

Think of your project as one idea that may be expressed in many different ways. Imagine you have a great idea for how to manage tasks. Rather than diving right to a shiny web UI or mobile, think about the business logic first.

Maybe that logic can be encapsulated into a library. That can be published as an open source package, with its own documentation and learning.

Now you can layer a CLI on top of that package. This will give you an opportunity to think how the user will interact with tasks separately from the logic. You’ll learn some new things here and you incorporate those learnings back into your library.

Once you’re happy the CLI you can build out an API that exposes the same system. Build some nice, REST-ful operations that could power someone else’s client.

Now that you’ve got an API, you can start to work on that shiny web client. You can focus totally on the UI, continuously incorporating what you learn about the user’s needs and experience back into the API and library.

And you can keep going. You can express this idea in many different ways: desktop clients, mobile apps, browser extensions, IDE plugins, chat bots, and anything else you can think of.

Along the way you’ll have built many different projects while refining your understanding of the problem domain that your idea is rooted in. Your portfolio can be filled out without over-taxing yourself since each new project builds on the last.

I’ve found thinking about projects this way can be helpful in crafting a personal roadmap. Hopefully you get something out of this, too.

Here’s a handy diagram to drive the point home: