Slashdot Mirror


MIT Studies Software Development Processes

IsoQuantic writes "A new MIT study (pdf) looked at SW development processes around the world. One striking difference that the researchers found for U.S. developers is the relatively small use of specifications before development begins. I can already hear my EP-zealot colleague chuckling in the cube next to me. (sigh)"

56 of 345 comments (clear)

  1. Not for me. But we learned by Allen+Zadr · · Score: 4, Insightful

    Specs!? Specs!? I don't need no stinking specificiations!

    I used to work in a very loose development shop. The only specifications that were ever written down were protocol specs - and even those were often "documented" in the form of a header file.

    I found some parts of this method usefull in that the specs were often written as as pseudo-code comments, and the actual code would be filled in later.

    However, eventually the development pool grew, and we got a few folks who couldn't follow this method, and we lost several weeks of work. After that standardized specificiation paperwork was produced for every project from that point on.

    Perhaps it's a lesson everyone will eventually learn. Perhaps I'm being an idiot.

    --
    Kinetic stupidity has a new brand leader: Allen Zadr.
  2. How Ironic by SavedLinuXgeeK · · Score: 3, Insightful

    In my software engineering class, my teacher vehemently states that Requirements are the Enemy of Design. You need to have an idea of what you are doing for the project, but you honestly cannot know how much space it will take, how fast it will be, etc. Its sheer folly. And who isnt to say that a customer may realize that they want it differently as the process is going along. Design is dynamic, always growing and changing. And the Open Source Community best represents this, because a project never ends, but continues to develop in a myriad of directions.

    --
    je suis parce que j'aime
    1. Re:How Ironic by AmericanInKiev · · Score: 4, Insightful

      This is the real crux of the design people vs the architecure people.

      Requirement are how offshore houses get paid for uninspired work.

      You want software which will
      a. act like software already created by someone else (knock off)

      b. to be a metaphor for existing (and fixed) paperwork based processes

      Then you can consider a rigid design - which means you can consider outsourcing - but I ask, what novel piece of software was invented in a developing country?

      AIK

      (BTW the add on this page flashes my curser and disables my delete key - adds ok - flashy adds which interfere are a bit much)

    2. Re:How Ironic by clichekiller · · Score: 5, Insightful

      Requirements that are too rigid are bad. But so too are requirements that are too loose. You can't sit down at a computer to program without some idea of what result you want to end up at. Often proof-of-concept programs are helpful, but all too often management sees a demo that appears 80% feature complete and thinks the project is almost done. It leads to unrealistic expectations.

      The best trick I've ever seen for setting project goals is to sit developers down with business users or the end users of the product and have them observe work in action. This understanding can go a long way when a developer is back in the 'cube' for long hours of coding. Domain knowledge is critical to a developer. Otherwise you end up with some trully epic program that bears little to no pracitcal value.

      Requirements should be clear, reviewed often, and adjusted as necessary. Which requires a good project manager to really pull off succesfully.

      All in all programming is really a mixture of a lot of aspects and any one not in balance with the others will skew the results. Sometimes you'll still get something usefull, but more often then not the results are hideous. And management will always blame the developers and developers will always blame management, with the only difference being the developers don't have the ability to can management.

      --
      Sir, there is a dragon outside with an armful of armor. He's inquiring if we offer free refills.
    3. Re:How Ironic by Rob+Riggs · · Score: 3, Insightful
      In the business world, you are going to have to come up with a budget for your software projects. A project whose scope or length is not defined does not lend itself well to budget forecasting. And those project managers that cannot accurately forecast the time or cost of their projects are quickly without a job. And, oddly enough, many end up teaching at University.

      Thus illustrating some maxim or another...

      --
      the growth in cynicism and rebellion has not been without cause
    4. Re:How Ironic by metlin · · Score: 4, Insightful

      Quoteth the poster --

      And the Open Source Community best represents this, because a project never ends, but continues to develop in a myriad of directions.

      Yes, but thats both a blessing and a curse. The commercial customers want stability, not a build release everyday. Even amongst the Linux community, how many people use the latest release of any software? Most people stick the the most stable release - I still use Debian Woody.

      I have no problem with development, but the Open Source community should follow Debian's model and not release something (read Sarge) unless they're really sure its all done, and not release a version for every time feature add or small patch - have the fixes and patches as seperate entities and not as builds.

      This was a problem that was told to me by the CEO of a certain reasonably big product development software company - he felt that this lack of stability (or the perceived lack of) is what is scaring corporate customers away. And he was like, if Redhat withdraws support for their old distributions, it is indirectly asking us to upgrade - and that is not stability.

      Believe it or not, a lot of people out there compare stability to what IBM Mainframes provided - and sure, its not cutting edge and what not - but guess what? In a commercial enterprise, most often, it just needs to work and work well, for a lengthy periods of time. Period.

    5. Re:How Ironic by Morgahastu · · Score: 1, Insightful

      Open Source software is a perfect example of why you SHOULD plan and design. Most of it is so poorly thought out and looks like every feature was just slapped on.

      Design is dynamic for a prototype, not the final product.

    6. Re:How Ironic by Anonymous Coward · · Score: 5, Insightful

      Space and Time requirements ("The system shall reply to queries in no more than .2 seconds and write no more than 650 megabytes per day to the log")are non-functional requirements. Other requirements ("The control system shall have an option to backup the log to tape") are functional requirements.

      Simply throwing out all requirements because non-functional requirements are difficult to estimate is absurd. That's why you make requirements but you make them flexible and reasonable. Of course, you can say that the customer doesn't know what they want and even if they do they can't explain it exactly. That's why you iterate through the process.

      A Software Requirements Specification document may even be a legally binding document for a development team.

      To say that requirements are an enemy of design is incomplete - there is a fine line between requirements that are 'too rigid' and 'nonexistant'. Somewhere there is a nice balance between requirements that are harsh and strict and requirements that are so loose they might as well not exist.

      If you get the customer involved, iterate through the requirements (entire software lifecycle) process, and make reasonable requirements, you'll be much better off. Personally, I would rather have in writing what the system should do than just have some kind of vague idea.

    7. Re:How Ironic by Brummund · · Score: 4, Insightful

      That might apply to applications like Gaim, Mozilla etc., but if you're working on applications solving business problems, you'll have know what you are supposed to do and approximately how long it will take.

      You can't honestly expect someone to pay you $50-100/hour if you can't give an estimate. So, what is required to make a qualified estimate?

      IMHO:

      1. Gut feeling

      2. Some experience in the field

      3. Add enough time to cope for silly things in your code that stops progress now and then (Those really hard to find in-your-face bugs)

      4. Realise there's a difference between time worked on the project and calendar time. You'll find you're using a lot of time waiting for others, configuration management (just getting through to a test server might take days, if the people managing the routers etc are incompetent,overworked, unwilling or just plain lazy or you're introducing some new infrastructure (like a new app server) etc.

      5. Divide the project into phases. I usually estimate time to make initial end-to-end contact if it is some kind of integration job, then the main development phase, and finally testing and deployument.

      6. Google for known problems with the systems you are using. (I once did a job involving MQSeries, Java and Linux. A google search helped me identify the problems I might face.)

      6. Add 20%

    8. Re:How Ironic by Bart+van+der+Ouderaa · · Score: 2, Insightful

      Then IMHO you just found the reason he is teaching a class instead of having a job in the industry (what is left of it anyway).

      Requirements aren't the enemy but the boundries of your design. You need the requirements to know what to test. If you don't know how many users a system should support, how fast a user should be helped etc. you can't determine when a project is finished or has reached it's goals.

      Requirements and specs form the basis of the box within you create the application and your design. They describe the boundries and those boundries can be tested (an untestable requirement is not a requirement, please tell your boss).

      The fact that Open Source is never finished is partly because of this. Most is also due to the fact that most important OS projects started as research projects or proof of concepts or hobby projects (some of which keep to have huge warts until the redesign which breaks all the old stuff, when they find what are the right specs for what they have been building, start to document problems and ideas and start over).

      prototyping is a great way to get low level requirements and that should help getting a good user perspective.

      Basicly If you don't have requirements, you really don't know what you are supposed to do or when something is finished. "We're finished when we're out of time" is IMO a very weak reason, "We're finished because we've implemented the musthave requirements and are out of time" is better :-)

    9. Re:How Ironic by deadlinegrunt · · Score: 5, Insightful

      Seriously not trolling.

      Care to point out a tiny sample of "most" Open Source that follows this norm?

      In the interest of being taken seriously I will point out a few that I know of that seem rather well thought out:
      fltk
      FOX
      gcc
      Oh yeah, here
      and others

      You were modded informative yet I see nothing informative in your post. Perhaps because I have contributed to some of these projects and I am jaded? Perhaps because more work gets done in these projects than the corporate arena of closed source that I used to work in and I might be close minded and missing your point? It's a possiblity but I will try to become openminded in case I missed the informative part of your post.

      --
      BSD is designed. Linux is grown. C++ libs
    10. Re:How Ironic by po8 · · Score: 4, Insightful

      As someone who teaches SE at University, I say "amen" to the parent :-). Grandparent's teacher is either being misunderstood (likely) or an idiot. A post farther down in this thread points out that distinguishing functional from non-functional requirements is, uh, kind of important. So is understanding the idea of a "design constraint".

      Of course, "requirements are the enemy of design" sounds pretty cool, and it is true in a way. The important thing to notice is that at the end of the day, requirements always win. That is, no matter how cool the design is, if the product doesn't do what it is supposed to, it is useless. If the product meets requirements, it really doesn't matter what design got it to that point: it's fine. Given that, you might think that it would be a good idea to know what you need to build before you start designing it. You'd be right.

      Grandparent, make sure you aren't completely misinterpreting your teacher's position. If you are not, drop the course. In grad school, I dropped my SE course because my (mighty famous) teacher was so ignorant. It didn't preclude me from learning the field to the point where I teach regularly in a professional SE MS program.

    11. Re:How Ironic by Daniel+Dvorkin · · Score: 3, Insightful

      In the business world, you are going to have to come up with a budget for your software projects. A project whose scope or length is not defined does not lend itself well to budget forecasting. And those project managers that cannot accurately forecast the time or cost of their projects are quickly without a job. And, oddly enough, many end up teaching at University.

      Funny, I've had the opposite experience: my CS professors always wanted carefully planned projects with specified scope and length, but my boss has me working on an open-ended project that will probably go on basically forever. The more real-world development experience I have, the less impressed I am with any of the "software engineering" doctrine about planning and specifications, and the more value I place on just writing the damn code.

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    12. Re:How Ironic by TopShelf · · Score: 3, Insightful

      In my experience, the failures in the spec'ed out projects that you describe occur because the Business Guys are responsible for writing the specs, and the IS Guys do the design to meet those specs. The problem is that the Business Guys don't think like IS Guys, and can't get down to the level of specificity required to better ensure success. The IS Guys then pick up these vague specs, do their best, but usually get caught in a cycle of rework as the users complain "you gave me what I asked for, but not what I need..."

      What is needed is for more IS analysts to actually work for the line organization, rather than within the IS department. When the analysts sit within IS, it's far too easy to lay blame on the users.

      --
      Stop by my site where I write about ERP systems & more
    13. Re:How Ironic by john82 · · Score: 3, Insightful

      In my software engineering class, my teacher vehemently states that Requirements are the Enemy of Design.

      There is a reason why your professor is teaching rather than doing.

      Most of software development in the real world is NOT a free-form pursuit of artistic expression. More likely you will find yourself working on software that is part of a larger system. And because it's part of a system, the components need to be able to work together on a number of levels. Lack of proper requirements management in a large scale software development effort is what leads to lawsuits. It also leads to solutions in search of a problem. VC-funded dot bombs that end up in the waste bin (instead of /bin). Further, if there are no requirements there's no way to test it. If there's no way to test it, you aren't going to be paid. That's life in the real world.

    14. Re:How Ironic by pipacs · · Score: 2, Insightful
      ... but you honestly cannot know how much space it will take, how fast it will be, etc. Its sheer folly.

      Hard requirements like these can be very valid in some cases. For example "this software has to fit in the DVD player's available flash" or "this video processing can't be slower than 25fps". Or even "we must fit on one CD otherwise packaging is too expensive".

    15. Re:How Ironic by dubl-u · · Score: 2, Insightful

      In the business world, you are going to have to come up with a budget for your software projects. A project whose scope or length is not defined does not lend itself well to budget forecasting.

      Have you looked at the stats on how many software projects actually come in on time and on budget?

      As a profession, we'd be better off being honest about the fact. But it doesn't fit tidily into management spreadsheets, so an awful lot of people just make up numbers. Or worse, they are browbeaten into making the estimate match what the businesspeople want to hear.

      That's not to say you can't take an initial stab at the budget. But good development is essentially exploratory; it's a rare product that is exactly like the initial spec, and those products generally suck. Better to get an initial budget and then tune your process so you can stop development when you run out of money.

    16. Re:How Ironic by TimTheFoolMan · · Score: 2, Insightful

      Fortunately, my house wasn't designed and built with this mindset. Hundreds of standards, necessary to guarantee my safety and the potential for reselling my house in the future, were all known to the various people that designed and built the house. That analogy doesn't always work, but in the case of a custom-designed home, it's pretty close. However, it does put the "cowboy architect" out of work, so where's the fun in that?

      There are clear benefits to Open Source Development methods, but blindly suggesting one approach for all projects is a bit short-sighted. I would suggest that your teacher spend some time working in the real world, where if you don't get a clear Requirement Specification from the stakeholders/customers, you'll be wasting away hours and hours trying to keep them happy, and keeping them happy is what pays your salary.

      Requirements, both System Requirements (operating system dependencies, existing protocols, legacy systems, and so on) and User Requirements (performance goals, UI expectations, and so on) should drive the Functional Spec ("what it will do"), which should in turn drive both the test plan ("does it do what the user wants?") and design ("how it does it"). If you choose to use "subcycles" as the survey describes them, or one big honkin' cycle, it matters little. These steps always exist when software engineering is taking place (as opposed to simply hacking away), whether you put these labels on the steps or not.

      To suggest that "Requirements are the Enemy of Design" is like suggesting that the "Bullseye is the Enemy of Aiming."

      Tim

      P.S. There are times that "Ready, Fire, Aim, Fire" is the right approach. However, you still have to know where the bullseye is, look to see if you hit it or not, and know what you did to aim in the place you aimed for the first shot.

    17. Re:How Ironic by Fearless+Freep · · Score: 2, Insightful

      [i]Often proof-of-concept programs are helpful, but all too often management sees a demo that appears 80% feature complete and thinks the project is almost done. It leads to unrealistic expectations.[/i]

      Nobody would look at at architects model of a bridge and say "that looks good, go toss it in the river and we'll use it", but we seem to do it all the time in software

    18. Re:How Ironic by HBPiper · · Score: 2, Insightful

      Requirements are a way to know you are done! If you start with funtional requirements, write a functional spec and then move to a Design Spec then writing the test plan is pretty straightforward. You have an idea of where you are going and you can put a stake in the ground on what needs to be done for the initial release, and if the stuff actually works. This also gives you a baseline to refigure things out when you have to revisit it after two years. One of the biggest problems I have encountered with poorly specified projects (and I have fixed several) is knowing when things are working properly and when you are done.

      People who do not believe in software design and specs are either fearful of losing their jobs due to lack of knowledge superiority, or ignorant of the benefits of having a plan. In almost every case I have been involved in, a clearly thought out design plan has resulted in on-time delivery of a product that exceeded the customers expectations. And in every case that the design plan was hatched, the customer was not happy and the delivery was late.

      And my golden rule for internal software tools is "If it is useful to you, it is going to be useful to others. Tools all too often become products, so spend some time on the design now."

      --
      "I went on a diet, swore off drinking and heavy eating. And in fourteen days, I had lost exactly two weeks. Joe E. Lewis
    19. Re:How Ironic by AmericanInKiev · · Score: 2, Insightful

      When you're done they fire you, they bury you, or they replace you. If you did the first job right - then the improvements will follow. If there is no room for improvement then you are living in a communist state or operating a monopoly. Competition endures the need for continual improvement.

      My position is that specifications can hide the need for flexibe architecture.

      I like your golden rule.

      I worked at a company that basiclly fired me for automating the code generation of mid level tiers because it took 5 days longer than writing yet another copycat day class might have taken.

      (got a raise at my next job though)

      AIK
      AIK

  3. Re:Not for me. But we learned by Anonymous Coward · · Score: 3, Insightful

    when working in R&D, the specs is always a step behind the cutting edge...

  4. Re:Not for me. But we learned by Brummund · · Score: 4, Insightful

    I have learned the same lesson. I hate bureaucracy as much as the next guy, but I really like having a good specification. Most of the programming I do is related to various forms of messaging, and having a detailed spec containing

    a) The purpose of the integration (business concepts)
    b) The protocol
    c) Examples. Lots of examples

    makes the whole process a lot easier.

    Especially the business concepts are important. They allow me to foresee where changes and extensions may occur, and I then put more work into those parts.

    If you're fortunate enough to have a good project leader, use him to communicate with the other parts involved and make him also document all the changes in the protocol. That will save you a lot of time on the phone and quite a few 'tail -f /var/log/myapp.log' :-)

  5. Fun read but ... by Politicus · · Score: 5, Insightful
    The disclaimer in this article says it all:
    But, as is common in this type of research, due to the extreme variations in performance from project to project, it is hard to draw any definite conclusions.

    And of all the praise they lavish on Japan and Indian the conclusion brings it back to reality with:

    It is important to remember, as well, that no Indian or Japanese company has yet to make any real global mark in widely-recognized software innovation, which has long been the province of U.S. and a few European software firms.
    --
    Politicus
  6. Worthless Study by Subotai · · Score: 5, Insightful

    Quite frankly this study is worthless. As a business owner, here is what I really want to know. Who is best at producing a product that meets my customer's needs the quickest and cheapest, has great uptime and the fewest bugs. I could give a rats ass how you did it, as long as it meets the above and it is documented.

    -Subotai

    --
    "The only way to catch tiger cubs is to go into the tiger's den."
  7. Re:Not for me. But we learned by AmericanInKiev · · Score: 4, Insightful

    When you use specification - you are making the "customer" the deisgn engineer.

    I highly doubt the "customer" is going to deisgn great software.

    for example.

    A thousand customers could say I need a tool that lets me input the various factors of my budget and look at what the sums will be.

    But how many could say - I need a program with a grid of flexible cells which can hold a value or a formula?

    AIK

  8. It depends.. by baudilus · · Score: 2, Insightful

    The presence of detailed development specifications is arguably directly related to the size of a design team.

    If your development team is two guys sitting next to each other all day long, there isn't much need for very detailed specs or a set structure. You tell then what your project must have, and they deliver (if they're good).

    On the other hand, the larger the team, the more structure is required; you don't want one person breaking what another person took four weeks to complete.

    I think in the US, the relative lack of specs is probably because most US firms are in one location where the developers are in close proximity, making communcation quite easy (you don't even have to take your eyes off of your screen to yell over a cubicle).

  9. Lots of big companies by Salamander · · Score: 2, Insightful

    It would have been nice if they had included smaller companies in their sample. Probably just as well that they didn't, though, because I suspect those would make the US numbers look even worse.

    --
    Slashdot - News for Herds. Stuff that Splatters.
  10. Re:Not for me. But we learned by Garion911 · · Score: 4, Insightful

    There's a difference between a spec and a design..

    SPec documents are the "what" the customer wants.

    Design documents are the "how"...

    --
    Slashdot is like Playboy: I read it for the articles
  11. Re:Productivety can jump without specs by goldspider · · Score: 4, Insightful
    So then you're saying that this team figures out exactly what the customer wants on a blind guess?

    As a gov't employee, I understand first-hand how frustrating it can be to get useful, realistic requirements from our customers (other gov't folks). And I'll also agree that unnecessary beaurocracy can baloon development cost.

    But unless you maintain good communication with your customers, you're bound to get it wrong. If you suspect they either don't really know what they're asking for, it's better to clarify that with them than to decide for yourselves what they really want.

    --
    "Ask not what your country can do for you." --John F. Kennedy
  12. Code is specs by AmericanInKiev · · Score: 1, Insightful

    When people say Specifications - they mean software code written in a language managers can understand.

    (For What?)

    The only perfect language for software specs is an unambiguated, testable, logical language.

    The end result of this logical posativism IS software languages.

    Software languages existed before the computer, and unambiguous processes could be described unambiguously only be using these unambiguous languages.

    So I suggest the software IS the specification - and its testable.

    If you write confusing software - what makes anyone think you can write specification which are any less confusing?

    (Suggestion - delete major important detail and make it look simple - when in reality it is merely incomplete.)

    AIK

  13. Re:Not for me. But we learned by Resseguie · · Score: 3, Insightful

    Maybe that's the problem. Too many times we worry about creating the "grid of flexible cells" and forget that the real user just wants to "input the various factors". There's a good usability lesson to be learned here...

  14. Re:Not for me. But we learned by AmericanInKiev · · Score: 3, Insightful

    Still - it is only what the customer THINKS he wants on day one with far less experience in computer techniques.

    Customer says he want a report - but in reality he want to understand his business.

    An OLAP server can help him understand his business, a crystal report can start him down a long road of report modifications which in the end will lead him to 1. an unmanagable pile of confusing reports or, b. an OLAP cube.

    The design process is to understand the need of the customer - not have the customer specify how or what the solution will be.

    If you provide the solution the customer specifies - you will be run out of business when he reads the next business journal anout how to do omething better.

    You had beter know what he is going to read next if you intend on being a solution provider for very long.

    AIK

  15. Yet another outcome-data-free paper... by Anonymous Coward · · Score: 2, Insightful

    So many articles on software development concentrate and talking about what procedures to use (and how to get people to buy into using them, etc. etc.) Very few of them give any good data on the outcomes of using those procedures. Typically we get b-school type "case studies," anecdotes, and proof by repeated assertion.

    Typical logic: PREMISE: It is good for software to be of high quality, in time, and under budget. ERGO, do thing my way. COROLLARY: It is important to use an indentation setting of three spaces on everyone's editor, and draw diagrams using the symbology provided in this plastic template.

    Here's my first-order analysis.

    All over the world, software development uses significantly different formal processes and practices. Yet, to a first approximation, there are no obvious, huge, systematic differences in the quality, cost, or timeliness of software produced in any country versus any other country. Therefore, to a first approximation, the formal process and practices don't matter.

    Good people, backed by good management, with a good understanding of requirements and sufficient time and resources, can develop software successfully. Using the waterfall method, Extreme Programming, or no methodology. Mediocre people, given bad management, and inadequate time and resources will fail. The brand name of the methodology that is asserted to be being used has an effect so small it is lost in the noise.

  16. College Professors by bsd4me · · Score: 4, Insightful

    In my software engineering class, my teacher vehemently states that Requirements are the Enemy of Design.

    Unfortunately, a lot of college professors are out of touch with reality. Software development is such a diverse area that you really can't generalize.

    For example, I worked for a long time in embedded firmware and digital signal processing, both on mega- and micro-projects. You need to design to requirements for these. There can be creativity in how you impelment a design, but the bottom line is the spec. If you don't design to the spec, the satellite falls out of the sky.

    Currently, I am working in multimedia, and we don't really use specs. We have high-level goals, but even these are fuzzy. Here, requirements are more of a hindrance, but we still have to draw the line in the sand for some things.

    --

    (S(SKK)(SKK))(S(SKK)(SKK))

  17. Good software engineering for bettter job security by Anonymous Coward · · Score: 1, Insightful

    Good software engineering requires iterative and incremental approach with constant feedback from the customer. (Personally I ascribe to an approach similar to the Unified Software Process.) If a US shop did this they'd guarantee long employment as the iterations continue throughout the life of the product. Of course, this also results in more rubust software with better ability to react to the demands of the customer.

    As it stands developers are just getting a crack team of developers and throwing them into a pit with a page of "specifications" and whenever the management needs to talk to them they send down a bucket.

    If that's all it takes to develop software no wonder all the jobs are getting sent to India. Even they can handle that!

    Good engineering practices would have prevented offshoring because the software you get from properly engineered software is more stable and closer to the customers needs and because the level of feedback required for proper development would make the communications barrier an unacceptable hindrance.

  18. Bullet proof specs. by Anonymous Coward · · Score: 5, Insightful

    Bullet proof specs. are very hard to write.

    I spent many years as a low level civil servant; so none of what I am telling about is my fault :-)

    To make a pile of money on a government contract, do the following:

    1 - Bid on the contract EXACTLY as the tender is written (no matter how stupid the tender is). This is what the government will stick you with. If somebody else bids on the tender the way it should be and comes in cheaper that's ok. The government will stick them with the stupid specs in the tender and they will lose money! They go out of business and you now have one less competitor. **Include a generous hourly rate for 'extras'. Make sure that 'extras' are cost plus.

    2 - Build the project EXACTLY as tendered and bid.

    3 - (This is the important step) Discover that the project will not work as designed and tendered.

    4 - Fix the project at public expense. This is the part where you apply the 'extras'.

    5 - Profit! Note the lack of question marks at any stage of this process.

    Specs are fine but they are no replacement for wisdom. If you need to cya then use specs. Otherwise, take them for what they're worth.

    1. Re:Bullet proof specs. by poot_rootbeer · · Score: 2, Insightful

      If you need to cya then use specs. Otherwise, take them for what they're worth.

      In the business world, you must always CYA. Doesn't matter if your customer is the anonymous desktop user, another company, another department in your company, or even your mother. You will get screwed if you leave any opportunity for the customer to do so.

  19. Re:That's because in the US... by Fermata · · Score: 3, Insightful

    This has been my experience as well. I've worked as a software developer on dozens of consulting projects in North America and Western Europe, and the US managers prefer to work from "intuition" and "feel" rather than the rigorously specified requirements and design that the Europeans insist upon.

    I personally believe that there are merits and drawbacks to both approaches and that the ideal is somewhere between formal and informal approaches.

    The informal, intuitive approach can result in a deliverable that is a much closer fit to the actual needs of the client - not just what they think they want or what they can express in words. A good informal manager circulates through the entire target organization from management, to accounting, to the IT department, to the users, and sometimes even to the client's own customers. Through a process of information osmosis, the manager constructs a feel of what the deliverable really needs to be and directs the team accordingly. Obviously, this approach works best when the project manager is damn good (sharp *and* experienced) and the development team is small and works well together. The main drawback, of course, is a tendency to chaotic development as things are written and rewritten to hit a moving target.

    The formal approach is reliable, predicatable, and safe. Maybe what you deliver will not be a perfect match for the unspoken requirements that inevitably surface during the project lifecycle, but at least you have a better chance of delivering *something*.

    I wonder, however, with the growing pool of cheap outsourced labor, if the paint-by-numbers formal software approach is really the best answer for the US going forward. If a project is specified in sufficient detail, then anyone can do the development. Perhaps the intuitive, informal approach is the only competitive advantage a US team can offer going forward - a dream team of software magicians rather than a clockwork team of software engineers.

  20. Re:Productivety can jump without specs by bug-eyed+monster · · Score: 3, Insightful

    ... I understand first-hand how frustrating it can be to get useful, realistic requirements from our customers...

    I'm not sure if you meant this to sound the way it does, but you've pointed out my pet peeve:

    The customer is not the proper person to write the specs. Specs must be written by a skilled analyst who can observe and communicate with the customers in a manner to determine what is required.

    I've seen too many projects go down the drain because they were completely useless. They were completely useless because the specs described a system that was useless to the customer. Because the specs were written by the customer. Because the project manager simply asked the customer "what do you want this system to do?"

    Customers are usually qualified to do their job, not to write specs for software system. It's the project manager's responsibilty to hire a qualified requirements gatherer (a lot of times a usability engineer is good for this) who will spend a lot of time with the customer, interviewing them, observing them work with their current methods, etc. There is much more to this than collecting specs written by the customer and putting them in a standard format.

    Requirements written by the right person will make a project much more successful, requirements written by the wrong person will definitely ruin the project.

  21. Re:Not for me. But we learned by Anonymous Coward · · Score: 1, Insightful

    Most of the programming I do is related to various forms of messaging, and having a detailed spec containing

    a) The purpose of the integration (business concepts)
    b) The protocol
    c) Examples. Lots of examples


    I have to second this. There is no reason that specs or design docs have to always descend to the level of pseudocode for every module. However, interfaces have to be specified. They won't be written in stone. When there is a need to change them, the spec will provide a clear way to talk about what is missing and how it can be changed. If you don't have that, you quickly find that different people have different views of the interfaces. If you are lucky, one is a superset of the other. If you are unlucky, they intersect incompletely.

  22. Napster, Gnutella by iamacat · · Score: 3, Insightful

    Made in USA much earlier :-)

  23. Re:Not for me. But we learned by Maddog2030 · · Score: 5, Insightful

    You completely missed the point. No one is forcing anything on to the customer. But quite simply, if you have EVER worked in the software industry designing custom systems for customers, you will know that the customer generally doesn't know what they want exactly. They have a vague idea and assume that you have the same idea they do in your head.

    The requirements process is where you get your specifications from the customer about what he or she wants. Design is a completely seperate stage. The requirements are something you both agree on, but its not just something the customer sends to you. You give them feedback about the requirements. Perhaps they are contradictory, perhaps there are better ways to do things. This part is crucial in that the more time you put into this, the more information you will fish out of the customer, and you'll be more confident that you and they will know what the software is supposed to exactly do.

    The golden rule in software engineering is the requirements are going to change. You just have to accept it. Why do requirements change? Well, usually its because the customer finally realizes that what they got and what they actually wanted were two different things. And thus you make the necessary changes until the next time they come back looking for you...

    How many times have you downloaded a program think it has everything you want, until you use it and then realize theres something more it needs?

    Think about something like Mozilla. It's be a sufficient browser for a while now. But once people got it, started using it, they thought to themselves "Now I need tabs!". And thus the evolution of software...

  24. Re:Not for me. But we learned by cHALiTO · · Score: 2, Insightful

    Not only that.
    Usually you try to understand what the client wants, and design the system to provide it. Then you write the detailed specs of *how* you do it, what kind of data you use, etc. Then you present all that to the customer, and have him sign it. It makes things a lot easier as clients sometimes tend to ask for changes in the middle of the development process, when all design has already been done, and half the code has been writtem.

    --
    "Luck is my middle name," said Rincewind, indistinctly. "Mind you, my first name is Bad." -- Terry Pratchett
  25. Laziness and cost by tuxlove · · Score: 2, Insightful

    I think it's true, spec writing does often fall by the wayside. However, I think it's far more prevalent at small companies, and non-tech-oriented companies that nevertheless have engineers. It's often a money or time thing, because it takes a lot of time and effort to pre-document things before developing them, and small companies don't often have such luxury. But there is also a lot of laziness involved. I don't know many engineers who like documenting things at all, much less weeks or months before they get to knock out even a line of code. Given the chance, they will generally blow off docs and start hacking.

    I think this has very little to do with extreme programming, and everything to do with motivation (or lack thereof). Though I think this phenomenon has one thing in common with EP, in absolute seriousness - laziness with regard to writing specifications.

  26. RIGHT ON!! by Bozdune · · Score: 4, Insightful

    This series of comments by AIK is profound. Please get off your apple-pie-and-motherhood methodology soapboxes and pay attention.

    Customers do NOT know what they want. Anyone who thinks that they do, hasn't spent enough time architecting software.

    What AIK is saying is that you have to dig deeper than the customer requirements. You have to understand the space. You have to look at competitive products. You have to anticipate unstated needs. You should ask, "When I'm all done, and everything is working perfectly, what changes will the customer want IMMEDIATELY?"

    I can't stand people who listen for five minutes and start to write "use cases" right away. That works for some dumbass web site, maybe, but certainly not for any involved product design.

    Architects need to plot an intercept strategy several YEARS in the future. That's how you build successful software. When the customer puts his Phase N requirements out for bid, and all your competitors run for the hills, your design has anticipated his needs. You've built metatables instead of tables. You've used OLAP where you could have sleazed by with an RDBMS. And so on.

    Great thread.

    1. Re:RIGHT ON!! by FatherOfONe · · Score: 2, Insightful

      Yep and when you go in to do your inital bid for a project, and it cost 10-15X more and requires 2x as many developers AND takes 3X as long... just for an application that will probably only see a lifespan of a year or two: you will realize that "sometimes" it is best to focus on what the customers needs and little more.

      I honestly could not see you winning any bids against todays development shops.

      Now by no means am I saying always take the easy way out, but I have seen MANY MANY MANY people like you who do "paralysis through analysis" approach, or quite honestly use Rational Rose/RUP approch.

      I do agree with some of what you say, but to say that an architect needs to be several years in the future is not accurate in most businesses. Most try and not lock themselves in, but they do not spend needless hours over architecting the most "loosly coupled" or "flexible" system, just for something the customer "might" need in the future. There is a balance between fleibility and time/resources, and I have seen WAY too many so called architects try and build a "super" system, just to never have it compeleted.

      I almost think it should be a law that you can't call yourself an architect until you have coded and supported/debuged several systems.

      A question I have asked all analyst who interview with me is "How many systems do you have in production now that I can call someone and talk to them about". I have never intervied anyone who has used Rational Rose that has anything in production. I pick on Rose people because they seem to all say the same stuff you said in your previous post... Mostly what I hear is "Company ****** pulled the plug on the project before it was completed".

      All that I have learned from application development is that there is no "Silver Bullet". All small to large systems take a ton of work and are a pain to support, and I will agree with you that the more you talk to your customer(s) the better, but talking never builds systems...

      --
      The more I learn about science, the more my faith in God increases.
    2. Re:RIGHT ON!! by Neumann · · Score: 3, Insightful

      Its always nice to know that you can depend on death, taxes and people who read slashdot still dont read the articles before they post...

      The data that the authors of the articles collected seems to indicate that using either the standard waterfall technique (with its heavy dependence on specs) and using newer methods (what they call sync-and-stabilize referring to the heavier dependence on building product and having that product used by the users) result in the same level of bugs, and the same level of developer efficiency. The real interesting part of the whole article is that it seems that the Japanese are doing something truly innovative as they have bug levels that are a scale of magnitude smaller than everywhere else!

  27. Going overboard with design documents by akuzi · · Score: 2, Insightful

    I think Christopher Alexander sums it up beautiful in his Patterns book, in the 'Gradual stiffening of design' pattern.

    He observes that only in-experienced craftpeople plan out things down to the minute detail to begin with. This causes them to get lost in the details and not able to recover from an problems during the building stage.

    Experienced people all employ processes that may start out with a rough high level design, but the detailed design only gets determined as the construction process matures.

    The idea is that a more fluid design allows you to both absorb errors or any problems or new insights that may occur during the actual build process.

    The same thing applies for software engineering.
    There is a nice balance to be found somewhere between the bondage-and-discipline approach and the XP style design-as-you-go. The type and size of the project also have to be taken into account.

  28. The real problem not talked about by eberry · · Score: 2, Insightful

    Where I now work I typically build everything in one of the following tools, ASP.NET, VB.NET and MS SQL Server. At the company before that it was all in Lotus Notes/Domino slowly migrating to ASP. And before that it was all Java.

    Why did I choose those tools? The answer is, I didn't. I never got a choice of what to use. I had to use what the company already had in place.

    I know very well that ASP.NET is not the best place to build a workflow application. But managers have already picked their favorite technology, even if they don't understand them.

    In smaller companies the IT manager used to be the network admin. Guess how much network admins know about software design and languages. Try nothing!

    So until they start promoting trained software developers to management this problem with persist.

    --
    Whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa, whoa. Lois, this isn't my Batman glass. - Peter
  29. Not for me. But we learned-Salesmanship. by Anonymous Coward · · Score: 1, Insightful

    "The golden rule in software engineering is the requirements are going to change. You just have to accept it. Why do requirements change? Well, usually its because the customer finally realizes that what they got and what they actually wanted were two different things. And thus you make the necessary changes until the next time they come back looking for you..."

    This is why the people who do this kind of work need to have some of the same skillset as salespeople, with a leaning towards the technical arts. Salespeople need to identify the customers needs, and wants and give a clear voice to them. The tech part comes in when being able to figure out what is possible, and what's unrealistic. The diplomatic skills is in telling the customer the bad news without antagonizing them. People with such cross-disciplinary skills are rare, and the result is mirrored in the product, and the process further down the line. GIGO as it were, do it right the first time and the rest falls into place a lot easier.

  30. Specs and outsourcing by gr8_phk · · Score: 2, Insightful
    If you're going to outsource a project you will be forced to produce better specs than if you don't. Management doesn't like to see "paperwork" going on, they want code. Yet when you outsource, it becomes someones full time job to make sure there are decent requirements. India is a perfect example. Where the contractors are on the other side of the world (so even the phone is hard to use) things must be written down (even in email) in order to get anything done. Another interesting point would be that India - which has much better specs than the U.S. is mostly doing work for US companies. This suggests exactly what I said above: At home we skip the spec, but when it's sent out we figure it must be needed....

    OK, I don't really know how much of Indian work is for US companies ;-)

  31. Re:Not for me. But we learned by Allen+Zadr · · Score: 2, Insightful
    Isn't this always the case?? Too many chefs?

    Honestly, most Dev shops don't have "code librarians" anymore. When they did - this was the person who would make sure that code didn't get duplicated. If a current function could do what needed to be done with very few changes, so be it.

    What happened where I was - some people who were not well trained in the code base started re-creating a large number of functions that we already had, and did so in an otherwise incompatible way. Yes, this should have been caught by the team lead... Yes, this should have been caught by their boss -- However, it could have been avoided had they been given a very specific specification of what these folks were expected to do.

    I don't care how new the programmer, few of us like having someone over our shoulders - so, most of us assumed that they were each learning about the project as a whole, as opposed to digging in and seeing how to impress everyone with quick output. Human nature prevails again.

    --
    Kinetic stupidity has a new brand leader: Allen Zadr.
  32. Re:"As little as possible, but no less" by Allen+Zadr · · Score: 2, Insightful
    I think (from posts above) perhaps a better phrase is "customer expectation management".

    If the customer has a million expections, but your Lead or Project Manager has not told the customer what to expect from their current "official" requirements, then you will have a disappointed customer. However, if you let the customer know, right from the start that the project will do exactly what they ask, and no more - then "extras" that were designed in through savvy programming, code re-use - or interface standarization, etc. will now be beyond the customer's expectations.

    On the other hand, when a customer says, I want it to be like Excel, the Project Manager's first words should be, "why can't you use Excel?" - as opposed to "Sure, what about Excel do you want us to emulate?".

    --
    Kinetic stupidity has a new brand leader: Allen Zadr.
  33. Re:That's because in the US... by Col+Bat+Guano · · Score: 2, Insightful
    ...then you need to say...

    "I estimate that this will cause another 3 weeks of delay for this product. If you like I can finish off working on what we have so that you can start using the software and we can get some feedback on real usage. We can implement these new features after that"

  34. ...but US users reject the software as spec'd by Invisible+Now · · Score: 2, Insightful
    There is a hidden bias in this study that, I believe, invalidates the results. US developers have a cultural problem saying no to users who reject the app as spec'd once the users see it run. We go back and code it again in response to feedback.

    Offshore developers are less invested in their users. They rely formal spec's and adherance to "Best Practices" to defend themselves, very politely, of course, against user dissatisfaction with the app as originally (mis) spec'd. No more dollars, sorry... but no recoding...

    Name an elegant app that was spec'd right from the start... No? Name any number of awkward apps that meet their spec's but are unusable... No problem!

    US users are independent, demanding and coddled. They know what they said they wanted, but now that they see it on the screen what they really want is...RECODING!

    These are just the expeiences of a pragmatic old US developer...

    --

    "Knowing everything doesn't help..."