If you find yourself staring at a blank computer screen wondering how to start a project, this post might help.
If you haven’t estimated your software project, I suggest you start by reading my previous post: How to Estimate a Software Project. An estimate gives you a general idea of what you’ll build and how long it will take to complete (handoff to the customer).
The first few days of actually starting your project will consist of thinking about the problem, researching technologies, and looking at the existing system. I prefer physical activity to get my mental juices flowing – lifting weights, a long walk, a bike ride. Sometimes ideas arrive in my sleep or in the shower. Staring at a computer screen does nothing for me.
This may not sound like work, but it’s important to get your bearings first before anything else happens. If I skip this step and just start coding I find my mind tends to wander. I need both my fingers and my mind along for the ride to do great work.
Start by breaking your work apart into smaller pieces of work. You want to make a TODO list. Don’t worry about accounting for every single detail – shoot for chunks that can be completed in a day or two. The goal is to create enough tasks to start building. As you build, tasks will change. Doing work reveals hidden tasks you didn’t anticipate. That’s okay. Add them to your list as you think of them.
What kind of tasks should you have?
Your tasks should cover three main areas:
- User Interface Design
- Deployment to the customer
Let’s say you’re project involves displaying a list of contacts. Some coding tasks might be:
- Build a back-end service that returns a list of contacts.
- Build a web control that displays a list of contacts.
- Connect the web control to the back-end
Some design tasks might be:
- Prototype a grid-style list.
- Prototype a tile-style list.
- Brainstorm on other ways to display a list.
Some deployment tasks might be:
- Create a build pipeline.
- Create a docker-compose file to deploy containers.
Depending on how you look at these tasks, they may seem daunting or easy. Build easy versions. Skip all the bells and whistles and nice-to-haves. We’re going for absolute bare-bones, make-it-work, don’t care how ugly it is. You can always add more tasks to pretty things up. The idea is to have releasable software right from the beginning.
Now that you have tasks, get together with your teammates (if you have a team) and prioritize your tasks by importance. How do you determine what’s important? Ask yourself the following question, “If the project ended tomorrow, would I have something to show?” Start with a complete end-to-end solution and progressively refine it until you run out of time. Some might call this vertical slicing; I call it, make the damn thing work from day one.
You need a way to track your TODO list. Trello and Basecamp are lightweight and easy to use. Jira is your likely option if you work for a larger company, but be careful – Jira can get out-of-hand complicated fast! Pen and paper or whiteboards are other valid options, but these get tricky in remote work environments. The right tool not only tracks your progress but also makes it easy for others to view your progress. You don’t want constant status update requests from stakeholders interrupting your focus.
Notice you haven’t actually built anything yet. A manager or team member who doesn’t understand this process might be bothered or even upset. But these initial non-coding steps are critical for producing the best creative work.
Having a TODO list that stakeholders can view keeps you on track and focused for the duration of the project.
Having a prioritized task list means failure isn’t an option. You’ll always have something to deploy to the customer.
Now that you have a list of prioritized tasks it’s time to start designing, coding, scripting, and writing tests. Crack open your favorite playlist, pop on your headphones, sip a beverage of choice, put fingers to keys, and start creating!