21.3. Deciding What to Program¶
As we talked about earlier in the chapter, programming involves a lot of creativity. However, it is also important to ensure your design is doable. If you need inspiration, GitHub is a great place to start. Fork a repository and examine the code, but remember to avoid plagiarism and cite any resource you use! Once you come up with an idea, make sure you perform some background research. Follow this process to test your idea:
- Understand the problem
- First, you should really understand the problem you want to solve. To help you focus, you can use the Heilmeier Questions:
You don’t need to answer all of the questions right away, rather they will guide you through the whole design process. Completing background research and prioritizing your requirements can help to shape your idea during the next steps.
Why does this problem exist?
How is it handled today?
What impact will your change have?
How can your idea be innovative?
What are the requirements for your solution?
- Brainstorm solutions
- Try various techniques to develop your optimal solution. Let your ideas flow in mind-mapping sessions or post-it clusters. Imagine how your problem would be solved in a utopian world where everything is possible. Alternatively, think of challenges you may face in solving the problem and accordingly add to your requirements list.
- Create a prototype of your idea
- Once you have narrowed your ideas down to a few or one final solution, you can start prototyping. This may include sketches of your initial idea or a technical prototype using dummy data to test an algorithm.
- Review/Revisit requirements and brainstorming notes
- Now that you completed the initial round of prototyping, you are probably eager to begin the development process. However, it is a good idea to slow down for a moment and revisit the first two steps to ensure that you are on the right track. Does your prototype solve the problem you defined effectively and uniquely? Does your idea meet all the requirements you have listed? Can you find other ideas from your brainstorming sessions that you can add to your prototype?