If you're a developer looking to improve your coding skills, building projects is a great way to do that. But coming up with project ideas that actually make you eager to start can be tough.
That's why I wrote this article: to help you learn how to come up with fun and interesting projects you can build.
I come up with my project ideas through the content that I consume and the problems that I experience.
For example, you can keep a notebook handy and jot down:
- Problems you come across in your day to day work or life
- Desires or interests you've had on the back burner
Don't limit yourself in this phase – anything you come across is fair game. I'll give you some of my examples.
- Forgetting to reach out to my long distance friends
- People calling me about buying my property
- Forgetting to text people when I get home safely
- Sites that constantly ask if I want to accept or reject cookies
- Conversation partner in a language I'm learning
- Finding foreclosed houses
- Finding pop ups in my city quickly and easily
Then, after I have a list of problems and desires, I start looking into whether or not I can make a coding project out of it. I'll demonstrate by walking through my latest project from concept to finish.
Language Partner Project
I've always been interested in becoming fluent in another language, with dreams of holding deep conversations with native speakers. I've tried for several years to turn my rudimentary Spanish knowledge into fluency, reading all sorts of books and watching videos to see different techniques and recommended tools.
Then I read Ultralearning by Scott Young. It's an interesting book, but I mostly bring it up because it reminded me of the most important thing: while I'm going back and forth over how to best study vocabulary and grammar, I'm not practicing the one thing that would most greatly improve my speaking ability – speaking.
Speaking is the quickest way to improve my conversational skills, but it's also the most painfully awkward. I don't love the idea of stumbling over my words with strangers for weeks on end, even if that person was a tutor experienced in deciphering beginner Spanish. So I began to think: what if I could program a language partner?
And so my project was born. From that initial concept, I verified that what I wanted to do was possible. My background is in web development, so that meant checking what the web was capable of (using https://whatwebcando.today, which I found on a great Pluralsight course about Progressive Web Apps) then tackling it as best I can.
When I run into tools or concepts that I don't know, I go to the documentation or YouTube – whichever can explain it to me in a way I actually understand (and don't forget ChatGPT here too. Asking it to explain a concept to you like you're five comes in really handy.).
I try to do at least one Getting Started tutorial from whatever resource I chose to make sure I actually understand the concept. Then I go right back to my project. I try to document what I learn as I learn it.
For an extra challenge, I sometimes like to find apps that are similar to the idea that I had and try to think of ways that I can differentiate my app to push myself even more. If I can't think of anything, that's fine – the project is still worth doing. But I feel it's good preparation to think about the market when creating a product anyways.
All of this to say, a great coding project is often found in the gap between wanting something and not being able to find anything already out there to suit your specific needs. I also find this particularly helpful because the ideas that arise this way are custom tailored to my interests.
While I do think that learning about cloud services or software engineering best practices is important, that in and of itself would bore me to tears and I don't stick with projects when they're boring. It's more important to me that the project revolve around interests that I already have so that I stay engaged and creative.
The number one issue I see with having a process like this is that it can feel like you're butchering a golden idea. For instance, if I'm only just beginning to grasp how to use mic audio from the web browser, my language partner project might not be as sleek as I'd dreamed, and that can make the project seem like it's not worthwhile.
Or worse yet, it can trick me into thinking it's better if I put it off until I'm ready.
That's why I love the diagram below from Austin Kleon's Steal Like an Artist.
It's both a reminder of the big picture and a call to action. No, your first time tackling the project probably won't be your best. But it'll be worth it.
More importantly, any truly great idea is iterative. The first iteration is never what's sold on the shelf. The sooner you get through this rough draft, the sooner you can get to the second, the third, so on and so forth until you have your finished product.
And if you'd like a tutorial on the language learning partner that I'm working on, or a more in depth walkthrough of anything I've mentioned here, please let me know!