Ask HN: I want to start working on my coding project – how do I start?

6 points by codezombie ↗ HN
For some month now there is an idea for a web application, I finally want to realize now. However, coming from a non-professional coding background, i.e. always been teaching myself how to code, I am struggling with how to plan my project?

In the past I - most of the time - just started to code without any concepts and planning, but this time, I want to do it the right way. I'm familiar with concepts as MVC, Server <-> Client, etc. so it's not about the technological how but about how to think through the whole app so I can start coding afterwards=

I tried to define routes, requests, templastes, models, etc. but I still feel like I'm missing to plan the whole picture - to make sure that everything works fine with eachother, etc..

So how do you plan your projects? What are you doing first, second, third, ...? Are there any good best practices, articles, etc. you can recommend?

6 comments

[ 3.4 ms ] story [ 18.9 ms ] thread
My recommendation:

1. Choose a programming language you like

2. Pick the most popular web framework in that language

3. Follow a pet shop or blog tutorial with that framework

4. Start coding your own project

What I've found to help for small projects is to start with a very lightweight use case analysis. For instance:

* A small vision document: This project is a (short description) targeted at (accountants / small business / boy scouts). It solves this problem that the target market has: (pain point). Its main features are (what makes it a good solution / what differentiates it from the alternatives).

* Main use cases: Some Trello cards with the main user-facing features, described at a very high level.

* Technical overview: You seem to have that covered. E.g. it will be a web/mobile/desktop/command-line app built on (language/stack) with this architecture (microservices, MVC web app, client/server, etc.) storing data on (S3/SQL database/flat files).

For a 1-person small project, don't overdo this part. Once you have this high-level overview of the project, try to implement the bare minimum necessary for the "happy path" of the main use case (i.e. without worrying about exceptional cases yet). Mock other aspects as necessary (e.g. authentication, dependent data sets, complex business logic, etc.)

This will leave you with a huge technical debt that you'll need to crawl out of as move forward, but it will avoid analysis paralysis and over-architecting.

For a more structured approach, one source that I recommend is "Use Case Driven Object Modeling with UML" (http://www.softwarereality.com/UseCaseDriven.jsp). It shows a technique to bridge the gap from the business requirements to the technical design and implementation.

Start coding. Then start throwing away code and rewriting. Then start living with code that you know you could rewrite so you can write more code to throw away and rewrite. If you're like me, and I hope not but if you are, most of your code will start out wrong and get rewritten to merely bad with a few good bits that will keep you coming back.

Anyway, all that planning feels like work but isn't work. Plans don't live long past contact with reality, and anyway new programmers by definition lack practical experience in making good plans and bad code is better than bad plans for no other reason than bad code provides its own feedback while bad plans don't until there is some code to prove them bad.

tl;dr start writing code.

Good luck.

I like this advice. I don't know many programmers that feel that their code is perfect or complete. Whiteboards and sticky notes make great planning if you need help visualizing.
Find a mentor who can guide you. I will be happy to help you get a head start (my email in my profile).