A brute force solution that works is better than an elegant solution that doesn’t work.
It’s OK to figure out murder mysteries, but you shouldn’t need to figure out code. You should be able to read it.
Motivation is undoubtedly the single greatest influence on how well people perform. Most productivity studies have found that motivation has a stronger influence on productivity than any other factor.
Heuristic is an algorithm in a clown suit. It’s less predictable, it’s more fun, and it comes without a 30-day, money-back guarantee.
A blanket attempt to avoid mistakes is the biggest mistake of all.
Trying to apply formal methods to all software projects is just as bad as trying to apply code-and-fix development to all projects.
A typical software project can present more opportunities to learn from mistakes than some people get in a lifetime.
The primary purpose of software estimation is not to predict a project’s outcome; it is to determine whether a project’s targets are realistic enough to allow the project to be controlled to meet them.
In my experience, you either have encapsulation and abstraction or you have neither. There is no middle ground.
95% on content and the computer language remains the same.
The big optimizations come from refining the high-level design, not the individual routines.
The goal is to minimize the amount of a program you have to think about at any one time. You might think of this as mental juggling – the more mental balls the program requires you to keep in the air at once, the more likely you’ll drop one of the balls, leading to a design or coding error.
Choose your battles. If rapid development is truly top priority, don’t shackle your developers by insisting on too many priorities at once.
The only way to reduce the variability in the estimate is to reduce the variability in the project.
One of the paradoxes of defensive programming is that during development, you’d like an error to be noticeable – you’d rather have it be obnoxious than risk overlooking it. But during production, you’d rather have the error be as unobtrusive as possible, to have the program recover or fail gracefully.
When executives ask for an “estimate,” they’re often asking for a commitment or for a plan to meet a target.
Study after study has shown that motivation probably has a larger effect on productivity and quality than any other factor.
Try to create modules that depend little on other modules. Make them detached, as business associates are, rather than attached, as Siamese twins are.
As Thomas Hobbes observed in the 17th century, life under mob rule is solitary, poor, nasty, brutish and short. Life on a poorly run software project is solitary, poor, nasty, brutish, and hardly ever short enough.
Managing complexity is the most important technical topic in software development. In my view, it’s so important that Software’s Primary Technical Imperative has to be managing complexity. Complexity is not a new feature of software development.
People who are effective at developing high-quality software have spent years accumulating dozens of techniques, tricks, and magic incantations. The techniques are not rules; they are analytical tools.