Building a side project is a lot more than just coding it up. Doing it effectively and efficiently requires forethought of planning the development process, architecting the database, wireframing the layout, and prioritizing features, all before implementing functionality and finally styling the interface. I often needed to rewrite the code for my projects, sometimes multiple times, because I had rushed into coding. I hope that you avoid making this mistake and that you find these steps useful in helping you manage your project(s). Good luck and I can't wait to see what you build!
- Before writing a single line of code I like to think deeply about what I'm building. I write down everything I can think of that has to do with the project without paying any attention to technical implementation details. The point here is to dump your ideas onto paper so you can organize your thoughts in the next step.
- Out of that mess of half-baked ideas I then try to tease out a list of features. This feature list will dictate the interface layout (step 5) and database architecture (step 6). I really like the template for formulating feature requests from Gregory Brown's book Programming Beyond Practices:
As a x I want to x so that x.
- Then I order features by priority and group features by first two or three versions and I put all remaining features in a backlog. I've initially used Trello for this but more recently I switched to using a simple .txt file for this.
- Sometimes you need to consider what platform you're building for: a web app, an electron application, a mobile app, a browser extension, or a bookmarklet.
- The choice of the platform will determine a large portion of the interface design. If what I'm building has a graphical interface I like to quickly sketch wireframes paper to get a sense of what the structure of the app will be like.
- Visual layout of the page helps me think thorugh how to architect the database, if applicable. Usually I don't need super complex database systems, but even on small applications I've needed to rewrite most of the storage logic since I didn't think it through, so I like to plan this thoroughly before I even get to coding.
- Throughout previous steps I increasingly got a more informed perspective on how features will be implemented. By this point I have a pretty good idea how I will implement features, but I may still wanna iron out some details before finally moving to coding.
- Write all the code :) I try to implement features from more basic to more complex ones. I put a lot of effort into writing descriptive commit messages.
- I generally don't pay much attention to the aesthetic aspect of my projects. But if I were to style it I'd do it at the end.
For projects that I want to continue working on I keep this list of possible improvements handy.
- Make the app responsive.
- Make the app look and work exactly the same across all browsers.
- Make the app saveable on Android and iPhone (progressive web app).
- Re-skin the app (e.g. dark mode).
- Translate the app into another language.