Few weeks ago, I finished my basic training at Nonsan training center and it’s been about a month and one or two weeks since I thought of projects. At the bootcamp, I was worried that being away from development and society would make myself null. However, I think it was a much-needed break after my internship and an opportunity for me to start new exciting projects.
Using the opportunity of starting a new project, I wanted to go through the process and perhaps, compare it in the future with later versions of how to start a project.
To start a project, one should have a gist of what they want to make. Similar to drawing, an image of the result should be in one’s mind in order to choose what kind of color or materials they will use.
I find it very hard to come up with a complete image from the start. Therefore, I like to first set a goal for the project.
The goal can be very simple such as
I want to learn a specific framework such as React
or it could be very specific
I want a desktop application utilizing Qt that records the screen and shares it to Imgur
When brainstorming, one can think “since this idea already exists, I shouldn’t do it”. Although, it would be genuine to work on something that has never been done before, I think it is perfectly fine to work on an already existing idea. The fact that one actually takes it to action is the real value.
A personal chatbot assitant is what I came up with during my training at the bootcamp. Next, I will get to the details of the project.
Do you know what an artist and a sniper have in common? Details
After the brainstorming stage, one should atleast have a brief idea of what they want to make. In the planning stage, the project will be specified and checked to see if it is feasible.
In this stage, I put the most effort to fill in every details of the project. The more effort is spent on this stage, the coding part will be a lot simple.
Details of the project includes almost everything related to the project.
- What kind of language or framework will be used?
- Does it need to be hosted? How will it be hosted?
- Will the features require external libraries?
- What kind of libraries will be used?
The more the merrier.
In addition to planning, a lot of time will be spent researching. While searching for resources I like to take notes and save the links in a document.
To organize the details of the project, I just use Google Documents as I am familiar with it. The profile document for Warden can be found here.
This is my current state of the document. As one can see, there is a brief description on the project with links to helpful materials. I still have a lot to search through and prepare for.
Another aspect to consider while planning is the scale of the project. In my opinion, starting small and simple but expandable is always the way.
In the case of Warden, it is quite expandable by allowing modules to be added and when planning, I should always try to make it future proof to allow any type of module.
When the planning phase is done, the coding and hacking part should be swift. With a nicely thought out plan, the tasks should be clear and detailed enough so that there are no time wasted figuring out what to do next. I like to keep in track of the status of the tasks by utilizing Github’s project board.
I like to use Github’s project board for several reasons. First of all, it is free and is easily accessible along with the project. It can also be connected with Github’s issue tab for automation.
I found using task management tools to keep me going with the project. Before I used the project board, I found myself losing interest in the project and eventually giving up. However, the individual tasks organized was similar to having smaller goals that I could physically see and clear it. Those small establishments gave me the energy to keep on working and made me eager to finish the project.
If planning phase was about details, the managing phase is about endurance. One must have the patience and the eagerness to play the long game for the final result.
In addition to managing a single project with the project board, I also organize multiple projects so I can keep track of them. For this purpose, I use Google Spreadsheet like in the image shown below.
By having a short description about the project, a link to the repository or a profile page, and a status field, one can easily get back on track even if he/she/it was on a break for a while.
Although this guide seemed a bit too abstract, I hope it could be of help to others when starting a new project. To finish it up, I want to say one thing.
While working on the project, there will always be problematic encounters and some of the problems might force one to give up. Or, one might just lose interest even if they used project boards. In those cases, one shouldn’t be discouraged by thinking they failed the project. Instead, if a lesson or two is learned during the process, that by itself is valuable enough and will be a good experience for the new projects in the future.