This book highlights many advices and best practice in software engineering from Silicon Valley. It focuses on the concept of ‘leverage’, creating greatest impact with least time. I recommend this book for software developer or managers striving increase their individual and team’s productivity and advance in their career. The book is backed by anecdotes and stories by senior engineers from companies like Google, Facebook, Quora, Dropbox, Box, LinkedIn, Quip etc. I believe the knowledge shared in this book is a great start, but only by taking the effort and discipline to applying it in our daily work will produce us great results.
1. Focus on High-Leverage Activities
* Leverage Impact Produced / Time Invested
* Always strive to work on the highest leverage tasks
* Highest leverage tasks are not always easy wins. Some results can be achieved only by investing effort for a long period
* Changing the hiring mindset at Facebook
* Developing an on-boarding program for new engineers at Quora
2. Optimize for Learning
* Learning is exponential. Learning certain concepts early on can open new doors for new opportunities. Try to invest in learning early on
* Working at Google, and absorbing all the codelabs, talks, learning materials. Startups won’t have so many resources
* Adopt a Growth Mindset. In truly believing that you can learn and improve, it will actually make it true
* Dweck experiment. Students believing that intelligence can be improved performed better than those who didn’t
* Dedicate time for learning
* 20% time at Google.
* Attend workshops, read blogs, side-projects etc.
3. Prioritize Regularly
* Keep a todo list. Prioritize the todo list regularly
* Use pen and paper of some software
* Don’t have too many work-in-progress tasks. Instead focus on finishing tasks.
* Analyze the priority of task by graphing it with Importance and Urgency. Complete important tasks first, and don’t be distracted by urgent but not important tasks
4. Invest in Iteration Speed
* Build tools that make your workflow faster. If you have done the same thing for two times, build a tool for it the third time.
* Shorten debugging lifecycle
* Master your programming environment
* Get familar with basic unix/shell commands
* Get familiar with IDE keyboard shortcuts shortcuts
5. Measure What You Want to Improve
* If it can’t be measured, it cannot be imporoved.
* Figuring out and deciding on what metric to measure is very impactful on the work that will be done.
* You can use numbers like industry standards for quick comparison or benchmark
6. Validate Your Ideas Early and Often
* Lean Startup methodology, ask for feedback early on to validate your assumptions
* Use AB tests to continuously validate changes
* Always try to get frequent feedback on your work. It is dagenours to work alone and not having a feedback loop.
7. Improve Your Project Estimation Skills
* Use milestones to track progress of long projects
* Clearly state the objective of the project, work only on what it takes to complete the objective. Don’t let other nice to have things, or related but not necessary tasks to make it into the project.
* Rebuilding the video library at Oolaya was delayed several months because it tried to include too many objectives
* Sharding the MySQL database at Box was done with milestones and clear objectives
* Migrating GoogleDocs from C# to Java was done with clear objectives
* Mythical one month person. Decreasing returns on investment. Increasing number of hours is not linearly relational to time required to get work done
8. Balance Quality with Pragmatism
* Establish a sustainable code review process. Code reviews have long term benefits for the code quality and team ownership.
* Startups or more experimental/prototype projects may not need as rigorous code review process than big companies.
* Choose the right level of abstraction for the problem
* Automated testing
* Repay technical debt
* Asana Polish and Grease Week.
* Google Fixit Days
9. Minimize Operational Burden
* Embrace Operational Simplicity
* Instagram managed to scale to millions of users with only several engineers by using stable technologies. There is a cost for every new technology that you add. They used Postgres database instead of newer NoSQL alternatives. They removed all features from their app except photo features.
* Automate mechanic tasks
* The time and effort freed by automation can be used for more valuable task on top of the automation
10. Invest in team’s growth
* Create a strong engineering culture. A good on-boarding can create a lot of value for the team.
* Helping and make more successful the people around you is great for making yourself successful
Software Development
Book Review
Engineering Management