How to organize a project from start to finish.
Tags: motivation, productivity, beginners
Published: 2021-04-02 00:17:47

This article was made with aspiring developers in mind to help build their first set of software projects. 

## Table of Contents
1. [Start small](#start-small)
2. [Find a problem to solve](#find-a-problem-to-solve)
3. [Importance of planning](#importance-of-planning)
1. [Think MVP](#think-mvp)
1. [Tips for a wireframe](#tips-for-a-wireframe)
1. [Planning Tools](#planning-tools)
1. [Get Feedback](#get-feedback)
1. [Don't Reinvent the Wheel](#don't-reinvent-the-wheel)
1. [Summary](#summary)

## Start small
A big problem for aspiring developers is starting projects that are too big to finish at their current skill set. It's not about passion or vision, but more about knowledge and experience. **Starting small allows you to build quickly, to finish, and to gain experience.** 

My advice is to start with small projects that you estimate will take days or a single week. Then do another and another. Over time you will have the experience and knowledge to build bigger and more visionary projects. 

## Find a problem to solve
**The best software comes from a unique problem someone is trying to solve for themselves or for someone they know.** That problem is personal to them and becomes a passion. When they are tired and broken from working on the software, they can literally touch the problem and that passion is renewed.
 
An example is a vocabulary quiz for my daughter's science class. This app helped turn her grade of an "F" into a "B" in a short time period. It allowed her to practice for quizzes on her phone and was custom to her learning style. I had a problem that was personal to my family and a strong reason to finish it. 

![Vocabulary quiz app](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/38eh37j7n2eywdlhlcb3.png)
  
## Importance of planning
Planning is literally 50% of the success of software development. There is an old saying of "Failure to plan is planning to fail". Some tips are:
1. Write down the **purpose of the app**.
2. Who are the **intended user** or users. 
3. Strategize **user stories** on how the app will be used. This helps place limits on the amount of work and scope creep.
4. List the technologies that you plan to use.
5. At most, only one of those technologies should be something you don't know. It should never be a situation where you are learning "Everything". A good rule of thumb is to **learn one new technology per project.** 
6. Define your **inputs and outputs** for the application.
7. Out of everything written so far, what is the minimum needed for the app to be useful. Those ideas are part of your MVP **(Minimum Viable Product)**. This is what you will build first and build quickly. Everything else should go into version 2. 
8. Before you code,  create a wireframe.  It's best to have a **clear visual idea of what you are building before you start**. Creating a wireframe helps flesh out more user stories. This also helps you gather colors and images before you start coding. Even if it's a backend API. You still need a diagram.
9. Use Trello or something similar to keep track of work completed (those user stories). Even better, turn those stories into clearly defined tasks. Break each page or section of the app into tasks with those user stories.
10. Get beta and alpha testers. Don't be scared. Testing makes you and the software better.
11. Additional "Boss Level" planning tools are data charts, user flow charts, and a software architecture diagram. 

It's important to plan the entire project from start to finish. **One caveat, you need to go from planning to coding as soon as possible.** This is not a week long process and is not set in stone. 

## Think MVP
I can't stress enough to **build the MVP and release it**. Do not aim for perfection and have a ton of features. You need to get something DONE and SHIPPED. You need a clear goal or acceptance criteria or you will never be finished. 
 
Once the MVP is finished, get feedback from your testers and then build the next version of your app. **Focus on building incremental updates/releases.** This makes the project not overwhelming and more achievable.

## Tips for a wireframe
My strategy for wireframing is:
1. Know the purpose of the software and have clear user stories.
2. **Use pencil and paper** to draw an outline of the software. I draw as many different visual representations of the application as I can imagine. This brainstorming is crucial to finding the best fit. The focus is on functionality, not being pretty.
3. Next I use [Adobe XD](https://www.adobe.com/products/xd.html) to create a **black and white digital copy** of the final paper design. 
4. I spend time evolving that design with a **focus on the User Experience and good User Interface design concepts**.
5. The next to last step is to make similar **responsive designs** (think mobile, tablet, and desktop views).
6. Finally, you need to add colors, images, possibly text. Keep it super simple **with 1-2 colors** for now with the goal of worrying about style later. 
 

## Planning Tools
My personal favorite is **Notion and Google Keep**. Both are free and easy to use. The main idea is to have one place to keep all your ideas and planning. 

## Get Feedback
I can't stress the importance of feedback. Rather it's feedback on the idea, the design, the architecture of the code, or how the final product works. You need a support system or cheerleaders to keep motivated. You need someone to say that's ugly, move faster, this doesn't work, or etc. As you build, **quickly get feedback and iterate**. 

## Start Coding as soon as Possible
Even if it's just setting up the repo and coding “HELLO WORLD” just to make sure it works. Just get something and anything quickly done. I can't stress how that first step is crucial. 
 
## Don't Reinvent the Wheel
When you are starting off in your journey, you should use software to move fast. Examples are not to build your own authentication service. You can move faster (and safer) with Auth0. You can deploy with Netlify instead of setting up a server. You can style faster with TailwindCSS or Bootstrap. I'm not saying never learn these things. But if you are trying to build your first app, then using these types of services/tools can speed up development.

I found this on twitter for hosting platforms:
![Tweet showing hosting platforms](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xedhdoz6h7wjyezwy43n.PNG)

## Summary
Experience has taught me that most people plan poorly. Get inspired, plan accordingly, and then code. 
 
You have to code daily. I rarely see someone finish something by coding intermittently. I don't know anyone who built something great on the first project. People who have built many things progressed to be able to build their dreams.


[Code Connector](https://codeconnector.io/) is a non-profit that's organized tech meetups to help people start their journey into tech. You can join our daily conversations by clicking this link: [Code Connector slack channel](https://bit.ly/2Ywnzqc).

####Bonus
I converted several blog posts similar to this one into a free e-book called "Advice for Breaking into Tech". The book summarizes advice from 700 developers about learning how to code and looking for your first job in tech into an easy-to-read narrative.
[Click for your free Download](https://gum.co/breakingIntoTech)