The Lounge is rated Safe For Work. If you're about to post something inappropriate for a shared office environment, then don't post it. No ads, no abuse, and no programming questions. Trolling, (political, climate, religious or whatever) will result in your account being removed.
Undermining the team's work and its results is not malicious? There has been a time when I did not rip someone's head off when he was not able to complete a job and needed assistance, at least as long as he spoke up. For secretly doing his own thing I would have had him hanging by his (censored).
I have lived with several Zen masters - all of them were cats.
His last invention was an evil Lasagna. It didn't kill anyone, and it actually tasted pretty good.
Regarding implementing according to specs: In the 1960s, a Norwegian research institute designed and built by hand a 16-bit minicomputer (years before minis became mainstream). This prototype was then industrialized by two companies: One was a startup with young excited engineers having hear of something called 'documentation' without really knowing the concept.
The other was a 150 year old manufacturing company with well established procedures for all kinds of paperwork. Before production had started, 500 copies of the complete documentation was ready for shipping with the computers. A slight problem was revealed: The guy writing the technical reference manual had misinterpreted the use of the base register (i.e. stack pointer), describing the calculation of the effective address which differed from the prototype (the index register was applied before the base register, opposite of the intended).
Printing 500 reference manuals was expensive in those days. Effective address calculation is so essential that a small errata slip wouldn't do (and would look somewhat unprofessional). Rather than throwing away 500 manuals, they decided to build the machine as documented, rather than like the prototype.
So, in the 1970s, there were two minimachine series from two Norwegian companies with identical instruction sets and addressing modes - except when both base and index registers were involved: Then the effective addess would differ. So they couldn't use each other's binary software. Even though the machines were nearly identical, they ended up taking completely non-overlapping market segments: One was dominating the market for welding machines, huge pen plotters and similar industrial applications; the ohter one took a major share of database applications, office automation etc. Maybe if they had been pefectly identical that the competition would have been negative to both of them. Maybe building according to specs was a good idea after all
Spec must be implemented as capable by device. There is no need to implement a set of, for example, response flags that detail the state of the storage memory if the device does not have storage capability in the first place. It's enough just to stick them to the "all fine, nothing to see here" set of values.
The same goes for a lot of seldomly used features, like certain timeouts, watchdogs...
Let's just start with 'int main(int argc, char **argv)' and take it from there as we learn what is needed. We can code it immediately, and the code will show how to solve the problem. Code will never be out of sync with the spec, because the code is the spec.
As long as you use reasonable variable and function names, you don't even need comments. Out-of-date comments are even more misleading than out-of-date specs, because you trust them much more, being so close to the code. We all know that documentation is unreliable and should never be trusted.
The only thing that matters is what is written down as code. The code is the terrain. Design, specs, comments or any other sort of writing are just poor maps of the terrain. Get yourself out in the terrain to see what it is really like. Be agile!
I am very happy with good specs; I have read thousands of pages of ISO and ITU standards, some of which are excellently written. Especially for interface/protocol specs, I am very fond of specs based on state machines - they tend to make the spec terse, complete and unambiguous. (If you would like an example, pick up X.225, the OSI protocol stack Session layer - it is outdated now, but could serve as schoolbook example of a FSM based protocol spec.)
If you are still in doubt: In my first post in this thread, I was most certainly joking. Except that I think it is no laughing matter, it is rather sad how little the young crop of "agile" developers value specs, good designs and thorough problem analysis. It most certainly reduces the quality of the software we produce nowadays.
If you want well designed, robust software today, do not try to find it among those agile software broilers pouring out from the universities. Seach for those who know the problem domain. If you want a sound editor, search for studio people. Do you need document creation software, go to the publisihng business. Do you need software to keep track of your dog breeding, go to the farmers' organizations. Do you need a programmer's workbench, go to the open source community, that they know well and produce high quality software for. But not for movie editing, dog breeding, office automation or map construction.
For many youngsters today, agile makes you specless. You are free to take whatever next step you want, without asking anybody without telling anybody.
Agile doesn't have to be that way. But quite often, that's the way it turns out. Writing down anything else than code is something your boss forces you to (if he does!), and you do it after completing the code; you do not preapre and use it as an aid in the implementation phase. If you suggest anything in that direction, everybody under thirty (and a fair share of the older ones) give you that ugly look and snare "Waterfall!" at you.