I know this may be overvehiculated by now, but it really caught my attention:
[…] a ‘spec’ is close to useless. I have _never_ seen a spec that was both big enough to be useful _and_ accurate. And I have seen _lots_ of total crap work that was based on specs. It’s _the_ single worst way to write software, because it by definition means that the software was written to match theory, not reality.
[…] they’re dangerously wrong. Reality is different, and anybody who thinks specs matter over reality should get out of kernel programming NOW. […] specs have an inevitable tendency to try to introduce abstractions levels and wording and documentation policies that make sense for a written spec. Trying to implement actual code off the spec leads to the code looking and working like CRAP.
[…] we still talk about the seven layers model (n.b. OSI model), because it’s a convenient model for _discussion_, but that has absolutely zero to do with any real-life software engineering. In other words, it’s a way to _talk_ about things, not to implement them. And that’s important. Specs are a basis for _talking_about_ things. But they are _not_ a basis for implementing software.