Vinit Kumar

Notes on "My Approach to Building Large Technical Projects" by Mitchell Hashimoto

June 02, 2023

Mitchell Hashimoto is one programmer I really admire and he has been insanely productive and influential programmer for this last decade. He co-founded Hashicorp and has written Vagrant, Terraform, Consul and many other useful developer tools.

He just wrote My Approach to Building Large Technical Projects on his blog. Here he basically talks about his process of building non-trivial software that might span months and months of hard work. He gives some very nice tips about how to approach such tasks and succeed in finishing them.

I really like these tips and I wanted to note down some actionable items based on what he wrote. These tips are something we can incorportate in our daily routine.

  1. Break down large tasks: When faced with a large project or task, break it down into smaller, more manageable chunks. This will allow you to see tangible progress and stay motivated throughout the project.

  2. Focus on real results: Instead of solely focusing on the end goal, prioritize tasks that yield real results. Look for opportunities to create demos or prototypes that showcase the functionality you’re working on. This will give you a sense of accomplishment and help you gauge the success of your work.

  3. Start with a feasible sub-project: Choose a sub-project within the larger task that is realistic and can yield visible outcomes. By starting with something achievable, you can build momentum and maintain your enthusiasm. Examples could include implementing a specific feature, setting up a basic framework, or creating a simple prototype.

  4. Utilize automated testing: Incorporate automated testing, such as unit tests, early in the development process. This allows you to run your code and see it working, providing tangible feedback and boosting your confidence.

  5. Aim for regular demos: Strive to build and showcase demos of your progress regularly. These demos don’t have to be fully polished or complete; they should be functional enough to demonstrate the key aspects of your project. Regular demos provide valuable feedback and help you evaluate the feasibility and quality of your work.

  6. Don’t pursue perfection at first: Avoid getting caught up in perfectionism during the initial stages of your project. Instead, focus on creating a “good enough” version that allows you to move forward and demonstrate progress. You can always iterate and improve upon it later.

  7. Build for yourself initially: When working on personal projects, prioritize solving problems or building functionality that you personally need. By addressing your own needs and experiences, you’ll likely stay more motivated and engaged in the development process. This also increases the likelihood of creating a useful product for others.

  8. Incremental improvements and iterations: After reaching a demo stage, don’t stop there. Continuously iterate on the different components of your project, addressing areas that need improvement and adding new features gradually. This iterative process helps you refine and enhance your work over time.

© 2023, Vinit Kumar