Understand Principles behind Practices
Development methods and techniques embody principles and practices. Principles describe the underlying ideas and values of the method; practices are what you do to realize them.
Following practices without deep understanding can allow you to try something new quickly. By forcing yourself to work differently you can change your practices with ease and speed. Being disciplined about changing how you work is essential in overcoming the inertia of your old ways. Practices often come first.
Over time you will discover situations where the a practice seems to be getting in your way. That is the time to consider varying the practices from the canon. You need to be careful to distinguish between cases where the practice is truly not working in your situation, and cases where it feels awkward just because it is different. Don't optimize before you understand why the current way is not working for you. Understanding the underlying principles allows you to make decisions about how to apply a practice. For example, you may approach pair programming differently if you thought that the reason for pair programming was to save money on computers, as opposed to having the benefit of real-time code reviews.
Following a practice without understanding can can lead to trouble too. For example, Test-Driven Development can simplify code, enable change, and make development less expensive. But writing overly complicated or inappropriate tests can increase the complexity of the code, increasing the cost of change.
Being excessively dogmatic about how things are done can also erode innovation. In addition to understanding the principles behind a practice, question whether the principles and practices make sense in your context, but be careful: trying to customize a process without understanding the principles and practices relate to each other can set you up for failure. The cliche example is "doing XP" by skipping documentation and doing none of the other practices.
When trying something new:
- Understand what you're trying to accomplish. If you don't have a goal in mind when trying a new process, you won't be able to evaluate your progress.
- Start by following best practices as close to "the book" as possible. Resist the temptation to customize early; you risk losing the benefits of a new way of working, and of reverting to your old ways under a new name.
- Once you have had some experience evaluate whether your execution the the practices are in line with their principles, and if they are, adapt the practices to work better in your environment.
This work is licensed under a Creative Commons Attribution 3
Back to 97 Things Every Programmer Should Know home page