Introduction
Here is advice I've collected from others and myself over the years, which serves as a set of guidelines when attempting to do "The Thing". The Thing is anything, however this article is biased toward software development, but it does apply to other "Things" in life.
1. What Should You Work On?
- Build things for yourself first. Solve problems you personally have day-to-day.
- Research. Understand what came before you, what failed, and what exists.
- Don't worry if someone else has built it. This validates your idea.
2. Before Starting
- Ask yourself: why do you want to do it? What value will it bring yourself or others? For example:
- Are you doing this to solve a problem you have?
- To educate yourself? If so, what skillset does it help you develop?
- Write down this reason (motivation) to enable you to come back to this written reason when the time is right to start or continue it
- For new ideas:
- Aim to test it quickly to "eliminate it quickly" - don't treat your idea as precious until you have tested and evaluated its value (see Jon Carmack's talk)
- Share the idea with others - don't be fearful of sharing it
- To decide on whether you should do the thing:
- Where does it fit in the The Eisenhower matrix? Is it important? Is it urgent to get done?
- Commit yourself to write about it. If you can't commit to writing about it: don't do it.
3. Starting
- Write about The Thing. Use writing as a tool for thinking and a vetting process for doing The Thing.
- Mindset
- Commit to The Thing and set your mind to it.
- Prioritize and focus on one thing at a time.
- Create a Plan
- Don't detail it too extensively. The first plan should be a high-level outline that you can execute quickly, iterate on, and change at any moment.
- Ask yourself:
- What is your MVP? Make sure it provides value.
- What's the most common use case (this is what is critical)? Start with that.
- If it's a large Thing, break it down. Work on these small things to evaluate your idea and use it as a potential MVP.
- Impose constraints. Do it with less.
- Set deadlines.
- Aim and plan to do it faster. If you had 1 month, what would you do? 1 week? 1 day?
- Remove features.
- Can you do The Thing with less code?
- Compounding efforts is ideal (e.g. building independent features that are composed together, code reuse), but don't let planning block you from Doing The Thing.
Doing The Thing
Do The Thing. Just do it. "Draw and don't waste time".
- Process
- Feedback loops are critical for fast progress. Start small and iterate.
- Be willing to adapt and change your plan on the fly.
- Continue to write about what The Thing is.
- Document your process whilst doing The Thing.
- Analyze and document frustrations or inefficiencies with your process.
- Leverage motivation when it comes and use this momentum to enable you to do more work.
- Mindset
- Work hard. Being "smart" will come in time.
- It doesn't have to be perfect. Simplify later.
- Believe in yourself. Don't undersell yourself or undermine your own abilities.
- Be specific and decisive.
- Traps
- Don't over think it (analysis paralysis).
- Don't under think it, i.e. think before you do. Don't "spin your wheels" on something insignificant or not leading toward your goal.
- Don't keep your head in the sand. "Look up" and "zoom out" to see the big picture.
- Don't pre-maturely abstract (YAGNI). Specialization often imposes constraints which often enables simplification and optimization. Building something that solves everything often does not work as well as something that is built for the task.
4. Marking the Thing as Complete
i.e. Moving onto the Next Thing
- Again, it doesn't have to be perfect.
- Simplify before moving on if you can.
- If you tested your idea and it doesn't work:
- Analyze why the idea didn't work: was it due to execution?
- Move on to the next Thing.