One of our project authors, Marlena Baker, is a big proponent of Practice Perfect and author Doug Lemov in general. We’ve recently been discussing Practice Perfect, and how we might encourage more developers to follow its framework for developing deep mastery.

Practice Perfect: 42 Rules for Getting Better at Getting Better by Doug Lemov, Erica Woolway, and Katie Yezzi, offers valuable insights into how we can improve our skills through deliberate and structured practice. While the methodology itself is broadly applicable across various fields, its principles can be particularly beneficial for learning software development.

In this post, we’ll look at some of the key lessons from the Practice Perfect methodology and how you can apply them to mastering software development skills.

1. Encode Success 🧠

Practice should be designed in a way that ensures the practitioner is executing skills correctly. It’s about creating the right habits from the start, rather than reinforcing mistakes or inefficient methods.

The best practices here are to craft specific, measurable objectives for each practice session, regularly seeking feedback on your work, and ensuring you’ve solidified foundational knowledge before moving to complex topics.

Application in Software Development:


Bad practice: Just trying to build things without clear goals or requirements. This can lead to a lack of focus, missing key learning opportunities, and developing sloppy coding habits.

Good Practice: Practicing coding by working through real-world scenarios or problems that simulate actual challenges you will face in the workplace. This approach not only helps in understanding how to apply coding skills in practical situations but also helps in learning how to navigate and solve complex problems effectively.

Good Practice: Repetitive Practice with Variation. Repeating similar types of coding challenges but with variations in the requirements or constraints. For example, writing a function to sort a list, and then modifying it to handle sorting when some elements are the same, or when there are null values.

This type of practice helps in deeply understanding the problem space and solutions, while also preparing you to adapt to different scenarios.

2. Practice the 20 🎯

This is about following the Pareto Principle for skill development. The Pareto Principle is that 80% of outcomes are driven by 20% of causes. Applied to any field, we can anticipate that 20% of our skills will cover 80% of what we’re asked to do. Beyond that, it will be infrequently used skills and edge cases.

So following Pareto for practice means focus your practice on the 20% of things that are used 80% of the time in your field.

Application in Software Development:

As a junior developer, it can be difficult to know which skills are essential. Consider following a structured curriculum, like App Academy Open or The Odin Project, as these programs are designed to train learners to get their first software development job. Curricular Projects are also organized into learning paths so you can practice the essential skills in a real-world context.

3. Make Practice Game-Like 🎲

This is one of our favorites at Curricular. The closer your practice conditions mimic the real-life situations in which you'll apply the skills, the better.

Application in Software Development:

Our practice projects are designed in collaboration with hiring managers and engineering leaders because we feel that practicing real development is the best way to learn how to solve real problems.

4. Unlock Creativity by Repeating 🔁

You might find it boring to do the same thing over again a few times. But it actually helps creativity by providing the skills foundation that fosters it. You’ll start to see how you can use these foundational skills to solve new challenges.

Application in Software Development:

Bad Example: Repeating the same LeetCode challenge without altering the parameters or seeking new solutions. This will help you become adept at solving that specific problem, but you'll fail to develop flexible problem-solving skills.

Good Example: Taking a familiar coding problem and solving it using different methods or under different constraints. For example, practicing sorting algorithms using different techniques and then applying each technique to different types of data sets, unlocking new insights each time.

5. Integrate Feedback Instantly 📣

Immediate feedback during practice helps in correcting mistakes and embedding the right methods into your skills repertoire.

Application in Software Development:

6. Practice “Whole-Part-Whole” 🎂 🍰 🎂

Start with a complete performance, break it down into parts for focused improvement, then integrate back into the whole.

Application in Software Development:


Looking for practice opportunities? Check out our practice projects, which help you follow these principles by targeting specific skills on real world projects. Most of our projects are available for free, so get started today.