Steven C. McConnell is an author of software engineering textbooks such as Code Complete, Rapid Development, and Software Estimation. He is cited as an expert in software engineering and project management.
A brute force solution that works is better than an elegant solution that doesn't work.
In my experience, you either have encapsulation and abstraction or you have neither. There is no middle ground.
The job of the average manager requires a shift in focus every few minutes. The job of the average software developer requires that the developer not shift focus more often than every few hours.
The trouble with quick and dirty is that dirty remains long after quick has been forgotten.
Software projects fail for one of two general reasons: the project team lacks the knowledge to conduct a software project successfully, or the project team lacks the resolve to conduct a project effectively.
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.
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.
Even when you have skilled, motivated, hard-working people, the wrong team structure can undercut their efforts instead of catapulting them to success. A poor team structure can increase development time, reduce quality, damage morale, increase turnover, and ultimately lead to project cancellation.
The default movement on a software project should be in the direction of taking elements of the software away to make it simpler rather than adding elements to make it more complex.
95% on content and the computer language remains the same.
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.
It's better to wait for a productive programmer to become available than it is to wait for the first available programmer to become productive.
Testing by itself does not improve software quality. Test results are an indicator of quality, but in and of themselves, they don't improve it. Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often. What you eat before you step onto the scale determines how much you will weigh, and the software development techniques you use determine how many errors testing will find. If you want to lose weight, don't buy a new scale; change your diet. If you want to improve your software, don't test more; develop better.
In software, the chain isn't as strong as its weakest link; it's as weak as all the weak links multiplied together.
Good code is its own best documentation.
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 blanket attempt to avoid mistakes is the biggest mistake of all.
Building software implies various stages of planning, preparation and execution that vary in kind and degree depending on what's being built. [. . . ] Building a four-foot tower requires a steady hand, a level surface, and 10 undamaged beer cans. Building a tower 100 times that size doesn't merely require 100 times as many beer cans.