09 Pragmatic Programmer (Part 1)

Tip 14: Good Design is Easier to Change than Bad Design

A thing is well designed if it adapts to the people who use it. For code, that means it must adapt by changing

We implement this by creating things like constants and class hierarchies. We're going to see some new ways to do that in functional programming. It's hard to constitute what good design means. One way to think about this is if your code can be easily replaced by something else. If it can't then it's probably not a great implementation.

Tip 15: Don't Repeat Yourself

Every piece of knowledge must have a single, unambiguous authoritative representation within a system

In the context of software, don't represent the same piece of knowledge redundantly within the system. This leads to bad design in that it becomes hard to change. One day, you'll miss an update in some place. Let data be computed when it can.

Tip 16: Make it Easy to Reuse

If it's easy to reuse, people will. Create an environment that supports reuse.

This is heavily related to documentation! Make it easy for other people to understand to use your code, and make the interface friendly and approachable.