Software development

Software development (also known as application development, software design, designing software, software application development, enterprise application development, or platform development) is the process of weaseling ever-increasing amounts of money out of venture capitalists by forcing recent graduates in Computer Science to work around the clock until they drop dead.
==Basic Principles==
Basic principles of software development include:
* If it is not broken, rewrite it.
* If you are behind schedule, whip the programmers into a nervous breakdown until they break the program.
* If it is broken, it's a gold master!
==Development Methodology==
===Requirements===
Software development starts with a Requirements Document. A requirements document is typically written by a humanities major (ideally a dropout, or perhaps a $10 an hour day laborer). It contains a lot of assertions which are not feasible given current technology, or based on an attempt to create an algorithm which solves the NP-Complete problem.
The Requirements Document should specify in a succinct fashion exactly how fucked the programming staff will be once they get their hands on it.
Once the Requirements Document is complete, it is handed off to top management, who sign off on it without comprehending how much it will cost to implement (even if it is possible). On that basis, top management can go and raise first round venture capital funding and buy new luxury cars and vacation homes.
The Requirements document is passed along to the programming staff at a meeting where it is forced down their throats by folding it up in stale pizza washed down with diet Tab.
===Design Spec===
On that basis, the lead programmer, who is chosen mostly because they only know Visual Basic, drafts a working design specification.
The Design specification outlines a set of Visual Basic modules which would simulate the user interface for the product if it could actually be implemented. This is discussed in a staff meeting where the janitors and secretaries get to vote on which buttons they like and which they don't understand. Once the design document is signed off on, a second round of venture capital can be requested. This allows top management to buy coke, second vacation homes, and whores.
Once the Design spec is in place, it is handed off to the programmers. The programmers may now have their first nervous breakdown, but only over the weekend.
===Functional Spec===
Based on the design spec, a functional spec is written in pseudocode. This is written by the newest coder on the staff, who normally uses a formalism which resembles whatever they think the coolest language is, such as Ruby, FP or Lisp.
The functional spec is used by middle managers to construct a project management chart. This is a means of divination which involves sacrificing several large whiteboards and asking the next most junior programmers how long they think it will take to complete each unit. The correct answer is usually 'oh, two to four weeks.' This information is put into a computer program and never used again except when top management needs to see some paper at middle management's yearly review.
The functional spec (which typically weighs about ten-thirty pounds) is then used to beat up the programmers as they fall farther and farther behind on their milestones.
===Motivating Programmers to work to exhaustion===
As the programmers fall farther and farther behind, it is considered normal to 1) implement a new trendy methodology which involves a six-month training process (such as having three programmers do round robin code walk throughs, underwater) 2) convert to a proprietary scripting language which looks like Visual BASIC 3) have the dumbest programmer on the staff rewrite some of the key modules in uncommented spaghetti code. This allows top management to pump the Venture Capitalists for additional rounds of financing, which can be spent on really expensive whores and better coke.
It is traditional at this point to set an arbitrary drop dead milestone, such as a trade show. It is unknown why this is necessary, but it appears to motivate programmers for some reason. It is thought that programmers believe that they wrangle a slot at the trade show, and somehow talk a booth babe into giving them head behind the Google booth.
Another motivational technique is for top management to take a meeting with Microsoft. Why this would be a good thing is unknown, but overwork can lead to delusional behavior and beliefs. Typically Microsoft will simply strip mine the product for good ideas and announce that they are including it as a feature in the next version of Windows, typically at the next trade show. Also, the Microsoft meeting can be parlayed by top management into something called the 'Mezzanine Round.' This means that they spend a lot of time waiting in a big breezy hallway to get a check to spend on whores and coke.
===Regression Testing===
An important method of software development is regression testing. This involves creating a suite of tests which do not break the current code base. This is so that top management can be shown something that works when they get over their coke and whores binge at their second vacation houses. Of course, top management could be shown a screen saver and told that it's a working demo and they wouldn't know any better. Once this happens they can go out and get 'Bridge Financing.' This means that some of the programmers will be shortly be taking a bungee jump off a tall bridge--without the bungees.
Once a stable code base has been developed which passes the regression test, it is up to beta testers to devise ways to break the software. This is turned into a bug list, which is used to beat up the programmers every Thursday. The bug list is prioritized by mid level management, to make them feel important. They can then walk around and ask the programmers if they have fixed some stupid bug that 1) can't be fixed 2) was created when the dumbest programmer rewrote the JPG library 3) is completely trivial. The programmers, who at this point are working 200 hours a week and sleeping for two milliseconds every other hours, are so strung out that they just nod and go back to playing nethack.
===Productization===
Once the program has passed alpha, beta, gamma and delta testing, it is ready for mastering, or productization. This involves retraining some high school girl to learn InstallShield. After the gold master is produced, the programming staff can be fired, top management gets golden parachutes (hence the term 'gold master'), and the desks and computers sold on EBay. At this point there are several thousand CD-ROMs with unusable, buggy software on them which can be sold to Taiwanese system integrators to include with cheap PCs, or used as drink coasters.
==Folklore==
* The mythical man month: What is an IBM Man-year? Seven hundred thirty programmers trying to get something done before noon.
* The character count: If the character count of the program is exactly divisible by three, the program is complete
* Phase of the moon: see Phase of the moon. Critical information for regression testing.