HACKER Q&A
📣 Karsteski

How do you guys plan hobby software projects?


So I'm a completely new developer, only recently started my first job after a career transition. One thing I've realized is that I'm quite bad at actually planning and understanding what I want to build.

For example, around May 2021 I began working on my own toy rendering engine in C++, in part following learnopengl.com. I got to as far implementing my own batch rendering. But I feel like in terms of actually understanding how to architect (is that even an appropriate term here?) my code, in terms of what classes I want for my features and how I want data to flow, I've not really done much of that. I'm not too sure where to start.

I'd appreciate hearing from more seasoned developers about how you begin planning your hobby projects. Right now at work, I'm learning Java and one of the things we learnt was how to use UML diagrams. But is this what people do normally for their projects, or are UML diagrams old fashioned?

Any tips/resources welcome! :)


  👤 tornadofart Accepted Answer ✓
You can use any tools you want, including UML. Don't let fashion tell you which tool to use. The important thing is: the tool should be useful to you, and facilitate your work in some way, and not burden you.

However, I would suggest that you start at a lower level that has little to do with formalized planning techniques, since you seem to have trouble answering the most fundamental questions. (This is no criticism: fundamental questions are often difficult to answer).

The following technique is based on the idea that you only understand something if you can explain it to someone else.

Write down your thoughts about your software project in a project diary where you explain your work to an imaginary person. What you are doing, why and how,etc... Two to four sentences a day are enough, don't pressure yourself to write a lot, but do it.

Thoughts are often not as clear as we think they are. Putting words on a page forces you to clarify your ideas.

From this internal dialog, new questions will arise and new needs. Maybe you'll find out you need a complex inheritance structure in Java and UML could help you document that. Maybe you'll find out there is no need for that. But tool choice comes after answering the fundamental questions. The rest is just googling.


👤 NicoJuicy
This is a pretty broad question.

In general, hobby projects should be as simple as possible since the goal is mostly learning one thing.

= No UML, scaffolding, don't care about performance tuning, all in one app ( identity management, configuration, ... )

A couple of hobby projects were "promoted" and are being sold to customers. So I've got an ecosystem of apps ( status page, sts, spa with gateway and a monolith DDD app), auto client informing of updates, adr if someone would be helping, ... So i wouldn't consider that a hobby application anymore.

Eg. I had an application to learn Microservices. As soon as I implemented all functionality I wanted, i abandoned it and didn't finish it: https://github.com/NicoJuicy/poc-micro-service

The learnings from that project are implemented in other places.


👤 mark_l_watson
I have been doing unpaid hobby projects for forty years, so I have an opinion:

Sometimes there are things that I would like to work on at work, but there is no official support. A at home hobby project is sufficient to be able to do a good “elevator pitch” that might lead to at work projects on what you would like to work in.

EDIT: you asked about UML. I co-write a book on UML, and now I don’t particularly recommend it. The only type of UML diagram that I occasionally still use is Sequence Diagrams.