🦸 🦸♂️ Stop starting and start finishing.
🏁
If you work on more than one feature at a time, you are guaranteed to multiply your bugs and your anxiety.
- Make a drawing of your app. Simple "wireframes"
- Divide the app into 'slices'. Look at the drawing and pretend you're a user. Describe all the features you'd expect to see in this app, one by one. For example, "As a user, when I click the button, I should see the "total games" count go up.
- For each 'slice' of work . . .
- Look at the drawing and name the HTML elements you'll need to realize this slice
- What state do you need to track in this slice?
- For each HTML element in this slice ask: Why do I need this? (i.e., "we need div to display the results in")
- Once we know why we need each element, think about how to implement the "Why" as a "How" (i.e.,
resultsEl.textContent = newResults
) - Find all the 'events' (user clicks, form submit, on load etc) in your slice. Usually there is one event per slice. Ask one by one, "What happens when" for each of these events. Does any state change? Does any DOM update?
- Think about how to validate each of your expectations according to a Definition of Done. (Hint: console.log usually helps here.)
- Consider what slices depend on what other features. Use this dependency logic to figure out what order to complete tasks.
Additional considerations:
- Ask: which of your HTML elements need to be hard coded, and which need to be dynamically generated?
- Consider your data model.
- What kinds of objects (i.e., Dogs, Friends, Todos, etc) will you need?
- What are the key/value pairs?
- What arrays might you need?
- What needs to live in a persistence layer?
- Is there some state we need to initialize?
- Ask: should any of this work be abstracted into functions? (i.e., is the work complicated? can it be reused?)