Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming IT Technology

Beginning Project Documentation? 314

mirthe_v writes "Hi, I'm working for a small webcompany (about 20 people), with ColdFusion programmers and designing staff. We all work on a bunch of projects (Internet, intranet, cd-roms, etc.) on the same time, with different people and different or no methodologies. There is an ever growing need for documentation, but we have no idea where to start."

mirthe_v continues: "I was just wondering how other people/companies keep track of their current and older projects.
Do you put stuff in a database, if so, what about all those diagrams and handwritten notes.
If not, do you store things in a folder per project, and how do you then stop documentation from getting lost and making sure people store things where they should.

"As I said, I don't know where to start, especially since the staff varies greatly in the need for documentation, technical background, experience with writing documentation and even different languages (English and Dutch).

"Please share all your thoughts and experiences. Cheers, Mirthe"
"

This discussion has been archived. No new comments can be posted.

Beginning Project Documentation?

Comments Filter:
  • by binner1 ( 516856 ) <bdwalton&gmail,com> on Wednesday March 20, 2002 @08:00PM (#3197237) Homepage
    Hire a new guy/girl...it's easier to saddle the new guy/girl with the crappy (but very important) jobs!

    -Ben
    • TWiki, a flexible, powerful, and easy to use Web-based collaboration platform has worked well for us.

      http://www.twiki.org/
    • If documentation is short, it's useless. If it's complete and accurate you'll never have time to find which page of the 35 volume set you want to read.

      Write good code and pray.

      • Pray for what? That everyone writes good code? And what is good code?

        I'm new at my current job (3 months now), and am in the lucky situation that the guy who wrote all code I have to work with is sitting right next to me to explain it. But then still... it's a madhouse around here so he doesn't always have the time for it.

        The least you can do, is document the reasoning behind what you coded (needs to be no more than 5% of the code you wrote), and let the code itself tell the rest of the story. Without that small fraction of documentation you will get lost, unless you've had the exact same training as the others who work on the project.

    • by Anonymous Coward
      well we created our own custom Documentation System which basically is a bunch of XML Tags embeded into our code and a PRogram that crawls thru the Code files creting descriptions of functions etc on the fly. I works flawlessly and is at the same time available in our development intra under the project name . All you have to do when you make a dchange, is write inthe codefile the comments to ir and run the update script on the file, it then updates the online documentation on the fly and the new things are available.
      total development time for this was 3 months and had 1 guy dedicated to developing it. We then made it so that everyone was "excused" from projects for one week where he/she went thru the code of a project that she worked on (or more) adding the comments to functions.
      We have now over 1 GB in documentation and new employees grasp the coding principles VERY fast.

      Anyway thought i put my 2 Cents

      PS: we have 60 people working in our Company and only 20 coders. But the documentation applies to all including us in the IT Department.. and with the scripts its VERY easy...
      //Vic--- from Finland
  • CowboyNeal-Flow (Score:1, Offtopic)

    by Filberts ( 35129 )
    We have a semi-customized document management system. He conducts real-time surveillance and documentation of our systems and files them according to the CNFS (CowboyNeal File System.) We've run into a few bugs with the eccentric cataloguing mechanisms (CowboyNeal's pockets) but otherwise it seems to run smoothly.
  • KDE (Score:5, Informative)

    by EricKrout.com ( 559698 ) on Wednesday March 20, 2002 @08:03PM (#3197252) Homepage
    I know that the KDE [kde.com] team uses DocBook,
    for which there's a great guide (crash course) [caldera.de]
    that they encourage their writers to use.

    m o n o l i n u x :: All Day Long. All Day Strong. [monolinux.com]
  • by edrugtrader ( 442064 ) on Wednesday March 20, 2002 @08:03PM (#3197256) Homepage
    in java you just comment the functions in a certain way, and it will build the documentation for you.

    maybe you could design something similar, and then use your new program to document itself!
    • I think this person is talking about Design Documents, whereas you seem to be referring to a User Manual.

      One teaches someone how to use a product, and is frequently written after it is done.

      The other teaches a programming group how to code a project. (Interface definitions, conventions, hierarchy, etc...) This is supposed to be done before the first line of code is written. Most programmers don't write these, unless their manager makes them, and most managers don't see the use anymore than the typical programmer does.

      And when the manager does make them write one, they usually do it as they go, writing the document, and coding side by side, rendering the document useless. Sigh.

      • actually i wasn't talking about either... the end result is how a programmer actually did code the project.

        it defines all the function, pre-conditions, post-conditions, input, output, what it does... all in a highly readable and understandable form.

        i'm not sure if that is what they want...
        • Yes, that's fine for after-the-fact documentation... except when it isn't. And there are plenty of places where it isn't.

          100 pages of javadocs do little more to help one understand a project from a high level than no documentation at all. What most projects really, really need is a good high-level explanation, then some mid-level documentation, and *then* finally the nitty-gritty stuff that can be generated automatically. If you do XP (that's Extreme Programming, not the OS), then the testcases you use to test high-level functionality are pretty darned good documentation -- usually better than the code itself, because they only discuss the visible API, and less about how each object actually does its thing internally.

          That all said, when it isn't asked to be something it ain't, javadoc kicks ass -- and its C++-based cousin, doxygen, is perhaps even sweeter (except, of course, for having to deal with C++).
    • doxygen (Score:2, Informative)

      by Anonymous Coward
      There are many systems of documentation that do this, Java wasn't the first.

      I like doxygen, myself.
  • http://twiki.org/ (Score:5, Informative)

    by freebsd45 ( 530424 ) on Wednesday March 20, 2002 @08:03PM (#3197260) Homepage Journal
    TWiki, a flexible, powerful, and easy to use Web-based collaboration platform has worked well for us.

    http://twiki.org/
    • by shobadobs ( 264600 ) on Wednesday March 20, 2002 @08:41PM (#3197474)
      Or, if you want to use PHP, try PHPwiki, at http://phpwiki.sourceforge.net/

      I'd give a working example of a wiki, but I'm worried about the Slashdot effect on it -- the guy might run up bandwidth costs (and he's not my enemy), and it might become too popular (which means too expensive to run, and it means that it would be edited too quickly and by too many people so that it would lose its small-community feel that Slashdot has also lost).
    • TWiki, a flexible, powerful, and easy to use Web-based collaboration platform...

      Does it have an audible announcement for notifications? Maybe something along the lines of, "BeeDeeBeeDeeBeeDee. Hey, Buck!"
  • by bioart ( 256479 ) on Wednesday March 20, 2002 @08:04PM (#3197264)
    I always liked the record keeping as done in the biotech area... Every scientist has a lab notebook (offline) where references are made to everything that was done (and where things can be found).

    I'm always suspect of documentation and record keeping that is 100% digital. If the notebooks are witnessed and microfilmed, there will never be a question on when the work was done.

    If notes about how things are done are kept on a notebook like that, it is a lot easier to go back and figure out what was done and how it was implemented when it comes time to writing real documentation. This does not address the inprogress documentation, but you should not forget about the tracking aspects. (CVS is good, but it could be falsified easier than a notebook I would think).

    Don't get me wrong, I hate doing this... but it is a good idea :)

    DrArt
  • It's very, very easy to let documentation fall out of date, but even old documentation is preferable to none. Your most important job here will be to get people in the habit of creating and committing documents to some kind of record. Ideally, you should have a source control system, and you can easily place documents under source control as well, so you can go back to previous versions of documents or recover in case you accidentally overwite documents or lose something important in an overly ambitious cut. Be at least systematic enough to put design documents in appropriate project folders. Set a good example and people coming after you will look at what's already there as a model for making their own documents. Use descriptive file names. Naming something 'design1.txt' may seem simple enough now but three months later you'll be wondering if that was your first rough or final design concept, whether it includes feedback from the customers, and so on.
  • by sterno ( 16320 ) on Wednesday March 20, 2002 @08:06PM (#3197281) Homepage
    I've found that CVS works well as a document repository. Any sort of version control system is well suited to the task of keeping documents. The only trick beyond that is establishing an organizational structure for it.

    As far as organizational structure, base it on the development process you use. So in each phase of development, you have the documents needed for that phase seperate from everything else. If you have deliverable documents, put those in a directory and then have subdirectories for any supporting material.

    That's a suggestion. I would highly recommend sitting down and formally structuring this. If everybody knows where the documents are, and where to put new documents as they generate them you'll have a lot easier time of things.
    • Every single web based document management system I've ever seen has been a complete pain in the ass. As a consultant I've seen 3 or 4 at various client sites. No one ever knows how to use it right, it is always klunky and it mostly gets ignored.

      What is important with whatever documentation you keep is that you have it easily available for everyone. Everyone also needs to be able to easily get the most current copy and be able to submit new information into the current copy.

      Sound like version control to anyone? Yup, just use whatever version control software you have on your project. Something that the developers already know how to use. Put the docs under the same project as the source code. When I cvs update (or whatever) to get the current code, I should also get the current doc.

      Using CVS will not be the most efficient if you are using Word for your docs, since you have to store the whole binary each time. This isn't usually a problem, but the storage can get big quick. Also you won't get what changed each time since it is a binary. Text files clears this up.

      Getting your business guys to use CVS is another whole can of worms, but at least all the developers can get the docs easily.
  • Start by the way writing started: Transforming the oral tradition to print. That is, "How do you do X? What happens when Y goes wrong? What's the quirks in the Z process?". It's very much like interviews or oral history - having someone talk with the Engineers, and put down what they say.

    Then refine this.

    It's a fairly painless process, and you can do it in teams.

    Of course, the big step will come when you need to get someone to update and maintain what you've created.

    Sig: What Happened To The Censorware Project (censorware.org) [sethf.com]

  • lab notebooks (Score:2, Interesting)

    by Anonymous Coward
    Give each person a real lab notebook, the kind that you can't rip pages out. Require that employees use the lab notebook to record project notes, observations, and thoughts during their work day. When the employee resigns or is fired, the notebook stays. These notebooks create a threaded history of projects and the issues encountered along the way. The value of well maintained lab notebooks is truly priceless. These notebooks become the raw material for more formal documenation, and serve as documentary bridge between the project requirements and its actual implementation.
  • by zpengo ( 99887 ) on Wednesday March 20, 2002 @08:08PM (#3197294) Homepage
    Hire a massively-qualified technical writer to serve as a consultant in order to help get things in order. They can start establishing conventions, getting a team of writers together, determining your current and future documetation needs, and figuring out how to resolve those needs.

    Far too many companies approach tech writing as the "music department" of the company: Nice to have, but not really necessary. The problem is that the lack of attention given to quality documentation winds up costing the company later. If you don't know where to find such a consultant, you could always shoot off an e-mail to a highly qualified individual such as myself [mailto]. *smirk*

    • Far too many companies approach tech writing as the "music department" of the company: Nice to have, but not really necessary.
      Or worse, they think of documentation as a problem with a purely technical fix. Documentation generators like Javadoc. "Methodologies" like mirthe_v is asking about. These things have their uses, but documentation chores are still mostly things that can be done only by carbon-based units. This is true even for internal documentation, not just product manuals.

      It is very hard to make development people see this. Part of it is a real antipathy to the whole chore of producing documentation, even if your role is just to being interviewed by a tech writer and answering a lot of "stupid" questions I put "stupid" in quotes because it's the really stupid questions that your customers most need answering.

      To be fair, the technical communication profession itself is a big part of the problem. There are a lot of "technical writers" out there who think an English degree, a little computer experience, and maybe a quickie certification course is all they need. Or recycled engineers whose prose style would make Bulwer-Lytton blush. There are companies where most or all of the writers are like this. Engineers find them a pain to deal with, and the docs they produce are mostly useless. Small wonder so many engineers think of technical documentation as a lost cause.

    • Far too many companies approach tech writing as the "music department" of the company: Nice to have, but not really necessary. The problem is that the lack of attention given to quality documentation winds up costing the company later.

      This is true and it can cost them dearly. My wife's company recently did a review of their products and that included feedback from customers. It turns out that in the past six months three big customers are considering moving to a competitors products because of lack of documentation. The company previously had decided to outsource all documentation to India as they figured there had to be something written up but they did not see the benefit of quality documentation. Additionally, a good technical writer may have experience in other arenas such as interface design. No offense to the full time programmers here, but some of you folks create the most attrocious interfaces I have ever seen and could use a little direction when it comes to interface. It may make sense from a technical standpoint, but put a lousy interface in front of an end user and they can be totally lost.

      The other issue is when companies try and cheap out on documentation and hire "writers" that have no experience or training in the documentation arena. What results is poorly managed and poorly documented projects that can cause more harm than good. My reccomendation is to find someone that has several years experience and preferably a masters degree in technical communication or better. Like most things, you generally get what you pay for, so don't cheap out.
  • I know this may sound evil but when a company is as small as yours, worrying about ANYTHING besides making money and pleasing the customer is detramental. You may get people who want do things "the right way". Fire them QUICKLY!! The "right way" people are always the ones who blow schedules and bring down companies. The only way is the way that ships your product and keeps customers calling. As you grow you can begin to focus on some level of procedure, documentation etc. This comes from someone who has seen "right way" people destroy a company and keep those people out of his company which has not only survived but still flourishes.
    • That's an interesting thought, and I see where you're coming from, but in my experience a good system that documents institutional memory is worth its weight in gold. Why? Because when those people you hired leave, there will be no record of how they did what they did.

      You pay the piper now, and it takes less time and money, or you pay him later, and it takes a lot longer and costs a whole lot more money.

      It seems to me that the "right people" (aka - process-oriented people) in the company you worked for before were likely more focused on process than on results. But there is a happy medium where the process leads to better results.

    • There's nothing wrong with doing it "the right way". There is a problem if that way interferes with the end goal (shipping products).

      Documentation wasn't invented by some lunatic who liked to file things. I have seen many projects and organizations who were failing because they lacked documentation. The key, I think, is to keep the ultimate goal in mind. Don't generate documentation simply because that's the way it is "supposed to be done". If it will help you, then do it. If it is interfering with actually building the product, then don't do it.

    • I agree that the bottom line (finance) should rule the roost in a new company, but it should not do so at the expense of organization.

      I work at a company that started small (dozen or so people) and grew to many hundreds over just a few years.

      I can't tell you how much time we (as a company) have now wasted trying to go back and re-document everything that we have done. Sure the code we have is readable, but there is so much more than clean code to making a company work well.

      So, document as you go. Keep it simple and straightforward in the beginning and grow into more advanced techniques/tools/etc.

      And by the way, if anyone ever says "You may get people who want do things "the right way". Fire them QUICKLY!! " ........ make sure you fire THEM quickly. The last thing you want is someone who will sacrifice quality to make a quick buck.
      • I always try to meet midway.

        I'm more than willing to make my code readable and documented inline with a quick README explaining usage and initial intent. It's been enough information for the hundred page books to be written later in about the same time as it would have taken initially (NOTE: don't know of anyone whos ever actually read the books, they always go for the readme and code -- but they exist now).

        No documentation is bad, but so is a 'make work' project where the only benefit was an employee had work to do.

        A .plan for a project todo list, dedicated whiteboard with highlevel design notes on it (take digital photos), inline docs and reasonable abstraction that covers 70% of future code directions (ask marketing for their thoughts) with minimal time should be good for a with a small (~20 or less) team under a tight budget.

        Larger companies get the project manager(s), a proposal, business case, technical writeup, lead contact, lead developer, and projects which never complete or don't actually meet the proposal.

        My experience is heavily limited, but fly by the seat of you pants has done a much much better growing the company I work for than the plan everything and document when people sneezed method shrunk it shortly after. (35 people to 160 to ~200k [buyout by large company who turned over most staff with their methods in mind] back to 70 and another turn over to get those people out.

        As a final note, if you code an interface between 2 components that isn't to the spec initally declared (but it has equal or greator functionality and both components work as advertised) just make the coded version the new spec and toss out the old one. This even works with intercompany projects till the 'do it the right way' person comes along.
    • I work for a small company that has traditionally used a 'get it done and worry about the right way later' method. And of course by the time later comes it's too late.

      What happens is that we never get the projects that would take us to the next level because we can't show the the skill set needed to handle the large project to a customer.

      We are constantly bogged down maintaining poorly or undocumented web sites that work only by accident and fire fighting on servers that have not properly been maintained. Every server that we have has been hacked or infected by viruses at least once, some times multiple times. Our main web server is also where we keep credit card numbers and is also where we do development.

      None of the code we have can be reused on the next project because it is crap.

      Projects take 2-3 times longer than needed because there was no written specification of what the customer wanted - so when we show him something he says, nope - it's all wrong and has to be redone.

      Our proposals to the customer are so vague that they come back and say that you were supposed to supply feature xyz as part of the project, and there is no way to argue the point.

      The result is a company that doesn't learn from it's mistakes, and hasn't grown over the years, and can only handle one major customer at a time. Employees are hired with a minimal level of experience because that is all the company can afford - and leave as soon as they realize that they can do better elsewhere.

      Management is always underbidding projects because they have no record of how long it actually takes to build such and such a feature. The result is many projects that lose money.

      The fact is that best practices are known, and unless you make a real effort to follow them you will never be able to get to a point where you will really be able to prosper as both an individual and as a company.

  • by Pinball Wizard ( 161942 ) on Wednesday March 20, 2002 @08:10PM (#3197306) Homepage Journal
    are you documenting for users of the projects or are you documenting for present and future developers of the project? The two are completely different and have different requirements as such.

    A web application by nature should almost always be self explanatory. A help link or button should be available prominently on every page. The better you do this part, the less it costs to support your app.

    Developer documentation for a web app also works well with HTML. Not only can you use comments extensively, you can link variables and functions from where they are used to their actual definition. A common way to structure HTML documentation is to have a frame with the left frame containing a tree of links, an index, and a search. I would use something like ht://dig [htdig.org] rather than a database to index your docs and allow searches.
  • by Mr.Intel ( 165870 ) <mrintel173@yaho[ ]om ['o.c' in gap]> on Wednesday March 20, 2002 @08:12PM (#3197320) Homepage Journal
    what about all those diagrams and handwritten notes.

    When I worked for Intel Software Testing (hence the nick) we used Visual Source Safe. It allowed us to store any kind of document in it (source, jpg, vsd, mpp, etc). With the check-in/check-out feature and version history it allowed us great flexibility and reduced wasted time figuring out who changed what.

    I know it's a M$ product, but it did the job for us.
  • SoureForge (Score:2, Interesting)

    by adamy ( 78406 )
    I do not now, nor have I ever, worked for and OSDN company. That being said:

    Documentation does not live in a vaccuum. For every project, you want a certain set of communication tools: Revision Control, Mail lists, Documentation, Releases, etc. For my old company, I set up an example site of sourceforge running of my workstation. The idea was to set up a quick and easy project website. SoureForge (the project) had everything we needed. One of the nice things is the document erepositor portion. Since SF is by project, documentation is already per project. Etc, etc.

    Php groupware also looks to be promising, as does phprojekt. I am not sure if there is an open source Cold Fusion based solution, but that may suit your needs better, since it sounds like you have some in house exp. with it.
    • by scotch ( 102596 )
      Documentation does not live in a vaccuum.

      My documentation lives in a vacuum. My tech manuals live in a Hoover, and my user manuals live in a Sears Craftsman Shop Vac. I guess you could say my documentation system sucks

      Thank you, I'll be here all week.

  • by soap.xml ( 469053 ) <ryanNO@SPAMpcdominion.net> on Wednesday March 20, 2002 @08:17PM (#3197341) Homepage

    From the what you said with different people and different or no methodologies there is a lot that needs to be done. First off, standards:

    • Literate Programing: What you write, should make sence. Variables such as a, b, c, thing, object, stuff, crap etc should not be allowed. A new programmer should be able to come into your shop, read the code and it should make sense.
    • Commenting: All source should be commented. That doesn't mean that hlaf your source files should be comments, but anything that doesns't make sense by simply reading the code needs to be commented. At a bare minimum, the person who wrote the code should have there name in there ;)
    • Source Control: Please tell me you have CVS or something like that setup. If not, set it up
    • Testing: Test early and test often. When your done with that, test again. ;) You might want to investigate Extreme Programming. This will help quite a bit to launch good solid projects, on time.
    • Standard Design Methods: It will help you out quite a bit to have standard design methodologies. Standard patterns to follow and ways of doing things will help you quite a bit.
    Secondly, make sure you have a forum for you developers to work together. Setup an IRC channel or something, just make sure you have a place to chat and share experiances / bugs ;)

    Those few things should get you started. They don't totally address the commenting issues, but I would say that is the least of your problems... I could be reading way to much between the lines. Just my two cents.

    -ryan
    • by JordanH ( 75307 ) on Wednesday March 20, 2002 @09:58PM (#3197796) Homepage Journal
      • Literate Programing: What you write, should make sence. Variables such as a, b, c, thing, object, stuff, crap etc should not be allowed. A new programmer should be able to come into your shop, read the code and it should make sense.

      Maybe you mean something different here, but Literate Programming is a field, invented by Donald Knuth, that has little to do with what you are saying here.

      There are many good reference, try this one [literateprogramming.com], for example.

      AFAICT, the tradition of Literate Programming comes out of Mathematics where proofs are given as narrative, but the equations (programs by analogy) are terse.

      For example, this example [literateprogramming.com], written by Knuth himself, contains many example of terse variable names like rx, h, t, l, etc.

    • Variables such as a, b, c, thing, object, stuff, crap etc should not be allowed.
      Um, if you have to write code like this:

      for (itemIterator=0; itemIterator < itemMax; itemIterator++)
      itemPointer[itemIterator].isFlagged = 1;


      ... then I really don't want anything to do with you. There are good and valid places to use i, j, retval and friends. There's a rule of thumb about the length of a variable's name being proportional to the logarithm of the scope (measured, for instance, by the number of lines of code it can be accessed from).

      --grendel drago
      • Heh. Two of my favorite Lisp functions are as follows:

        (define (next x) (+ x 1))
        (define (prev x) (- x 1))

        This, in my opinion, makes things like recursive functions easy to read and rather elegant. Such as:

        (define (factorial n)
        (if (= n 1)
        1
        (* n (factorial (prev n)))))
      • I'm not a big fan of Perl, but the way it manages all these little state-keeping variables is something you have to admire. Many of them have standard names, and are referenced by default in most contexts.
    • I joined a company about a year ago; they'd spent several million dollars on getting a website built by a big consulting firm, using a cutting edge content management system. "Is there any documentation ?" I asked, on my first day, and the project manager from the consulting firm proudly pointed at the shared drive with nearly a gigabyte's worth of stuff in the "Documentation" folder.

      I poked around - weeding out the huge screenshots and photoshop files the designers had created - and tried to find out how the system worked; I found a folder called "architecture", and started to read. Funny thing was, most of the documents were more than 6 months old; several were more than a year old. Hardly any were written by current project members. There was no road map, no versioning. In short - the documentation - though plentiful - was badly out of date, often actively misleading, and totally pointless without the writer to explain the context and intent.

      This is not an uncommon occurence; there are people with (parts of) the answer.

      Check out "Agile Development" by Alastair Cockburn; he has very strong ideas on the topic of documentation and how to keep it relevant.

      Next, buy "Code complete" by Steve McConnell, and make sure everyone in your development team reads it and understands it.

      You might also want to check out the ideas behind Xtreme programming [xtremeprogramming.com] - it sounds to me like you're starting to find it impossible to maintain code written by other people with different coding styles and are hoping that documentation will save your bacon....it won't.

      Most long-term projects rely on coding standards, a common vision and understanding of the architecture, effective communication and well-written code. Documentation is usually done because the customer insists on it, or the management team believe it's going to solve hand over problems. It rarely helps the development team to get to grips with what is really going on...

      Where's the documentation for the linux kernel ?
  • Documentation takes a lot of time. Perhaps up to as much as half of your development time, especially in the initial stages. Plan for this extra time.

    Having a record of what you did to get to the point you're at is INVALUABLE in saving time later on: a process that takes 4 hours (including documentation) may take only 1 hour the second time, IF you have proper documentation, 3 hours if you don't.
  • This may sound trite, but documentation is there to document your actions, plans and outcomes. I don't think it really matters how you organise your documentation so long as you can get it back again later without too much hassle.

    I suggest having templates for all the major areas you would need to have documented - or at least identify the things you want documented and make sure everyone does their part. Things like proposals, project charter, agendas, minutes, functional specs, design documents, project plans, change requests, test cases, test plans, etc.

    Obviously, this all ties in with project management and your methodology of choice. If you don't go out and get a consultant to guide you, at least read a few books and get some ideas.
  • by drig ( 5119 ) on Wednesday March 20, 2002 @08:19PM (#3197355) Homepage Journal

    I've used, successfully, two systems. SourceControl is standard way of doing it. Basically, treat it like a shared filesystem. You have to be very careful about the structure or things tend to get lost. Also, it becomes very easy to make duplicate docs when one gets lost.

    I found it easier to use Twiki [twiki.org] (which is a WikiWeb-like project). Twiki has built-in version tracking, can store any kind of information, including meta-data, and has pretty advanced search features. We've just started using it at my new company, but I really like it so far.

    The only thing Twiki is lacking is proper authorization. Anyone can go in and write over my docs. Of course, it logs that change wit the user's name, so there are decent forensics. Still, I'd rather not have these hassles than be able to track the perpertrator down.

  • Seems easy enough to keep your documentation in the same place as your source code. You do have source code managment right? If not, you should start there. [sourcesafe,cvs]
    Documentation can be written in whatever format you want, but a standard which is compatible with your management systems change log tracker is a good idea.
  • doxygen (Score:3, Interesting)

    by penguin_nipple ( 127025 ) <dan.nedelko@gma[ ]com ['il.' in gap]> on Wednesday March 20, 2002 @08:23PM (#3197379) Homepage Journal
    For the code that I work on, doxygen [stack.nl] is the way to go, it generates a nice html document structure which is easily customizable through it's config scripts, you can place it directly in your cvs source tree, and have all users check it out. It expands brief and detailed code comments and puts those descriptions where they ought to be in the documentation tree, with links to the actual code. Since the documentation is part of the CVS module, it will always get checked out correctly by developers and the maintainer can update simply by running doxygen whenever needed.

    In fact this doxygen was only part of the solution, our research projects had other documentation which required addition, however we simply had the developers get into using LyX and had the doxygen script merge in the static docs with the code documentation. Made for a nice doc tree which was easy to update (and if you really want to get fancy every once in a while, import into LyX and whip up a tasty DocBook). Of course the developers has to conform to the commenting style required, however if this is a problem for your development team, then the whole 'team' concept isn't going so well.

    If you don't use CVS and/or doxygen, and those tools don't fit into your workplace (although CVS should be used, IMHO). You could easily whip up a php or perl script to merge TODO and Changelog files, this is of course assuming that all the developers use these files to track their work, which they should do anyhow (at least in some form). It would be trivial to whip up a parser in perl and merge those files into some sort of report. Thus the whole Practical Extraction and Reporting Lanuage thing...

  • It's the medium of choice for many very complex applications and scales nicely (think the WWW). Overall, it's going to be disorganized, but very organized as far as the document structure.

    Depending on what type of software your company writes or is producing documentation for (I'm guessing web applications), the structure of the document would be tailored for this, with appropriate entries for functions, global variables, and document constructs.

    What's good about this is you can turn HTML into anything any language, and if you write it right you can show it through just about any device. Later on, you might want to package windows help files with your shipping product for your client -- HTML would work well for that. Well, HTML would be much better than any custom or home-brew solution you could come up with.

    I would start by looking at what other projects have done. Which project's docs are easy for you to understand and progress through? Copy them. Start with a good synopsis for your own, introduction, and begin planning your document structure. What you will probably find is that your documentation is going to look like (or should look like) your source tree.
  • by DeltaOne18 ( 344288 ) <kurt@nospam.kurtwiersma.com> on Wednesday March 20, 2002 @08:36PM (#3197443) Homepage
    Since you use Cold Fusion I would recommend checking out FuseBox [fusebox.org] is a web application methology develop orginally with Cold Fusion but now applicable to all the major web app languages (PHP, Java, ASP, ect).

    Part of FuseBox is FuseDoc which is a XML based spec for putting docuementation inside your CF code. By using Fusebox and FuseDoc you can break your web apps out into separate modules that work together much like different objects in C++ or Java. This allows you to have multiple people working on an app at the same time, while also separating your content from programming logic. I have used this approach in several web apps and it has worked well. Couple these techniques with something like CVS and some organizational programming standards (make standards that make sense!) you should be able to improve your work enviroment.

  • by Corporate Troll ( 537873 ) on Wednesday March 20, 2002 @08:39PM (#3197465) Homepage Journal
    Documentation is like sex: when it is good, it is very, very good; and when it is bad, it is better than nothing.
  • by humblecoder ( 472099 ) on Wednesday March 20, 2002 @08:40PM (#3197469) Homepage
    Here is a simple system that might work for you:

    1. Code level documentation. Having good code-level comments is vey important for figuring out the nuts and bolts of how things work. Well commented and well structured code can make or break a long term project. The important thing is to keep the comments up to date so that you aren't providing misleading information. This is easy to do, however. All it takes is a little dicipline.

    2. Process and Design Documents. There are many ways to handle these, but one simple way to do it is to create a development "Intranet" and keep all of your developer docs in HTML format. HTML documents are easy to create, easy to organize with hyperlinks, and easy to view. Keep a copy of your HTML documents in CVS or some other version control tool. That way you can have a record of your changes.

    Code level docs are pretty easy to get started. If you have a good development team, you probably already have your code well organized. If not, assign pieces of your project to different programmers and have them document their assigned code.

    Design and Process docs can be handled the same way. Make a list of things that you need to document (ex: build instructions, class hierarchies, etc) and assign these out to programmers.

    The key to any documentation system is to keep things up to date. The best protocol is to have people make changes to the docs as they change the system, or as they discover bugs in the docs. Treat your docs just like you would source code. Strive for "bug free" docs. If you can't make a change to a document for whatever reason, log it as a bug so the change doesn't fall through the cracks.

    Once people get used to treating docs as code, they will keep them up to date. If people have the attitude of "I'll document it when I have the chance" your system is doomed to fail.

    Good luck!

  • How about rephrase that and when to start...

    RIGHT NOW

    Or suffer our fate...

    There will be a time were you will absolutely have to start documenting your products, how-tos, specifications, deliverables, whatever. Finally when you realize you have to do it NOW... you'll look at all the work you have to do, and nobody likes to write. The best thing to do right away is, if you have the money, is to hire a technical writer. Then have him or her write, that's what they do all day.

    Then you can worry about problems like versioning or storing the documents, whether storing them in the DB or in your CVS (I guess that is considered some form of database).

    One thing to bring up is there is a lot of great ways to document these days within your code. Javadoc is a great utility if you want your coders to start documenting their own stuff, learning javadoc is easy, but doing it is a pain in the ass. I think Microsoft in their Visual Studio.NET is introducing the /// that provides printable documentation, similar to javadoc. (But who cares about that) Unfortunately if you look at some of my in-line documentation you find stuff like:

    /**
    * @author Me!
    * It's 2:00 in the morning, I'm tired and drunk
    * the following ain't pretty but it works for some reason
    */
  • by DuncanMurray ( 448670 ) on Wednesday March 20, 2002 @08:47PM (#3197515) Homepage
    Assign each person to use a different word processor - e.g. Word95, Word97, Word2000, WP5.1, StarOffice, OpenOffice, etc.etc.
    This way you will know exactly who maintains the document - store all the files on the users hard drive , dont worry about backups - hard drives are very, very reliable these days and the damn server is usually always on the blink.

    If someone needs to modify another document, they simply need to write notes on the old printed version and the document maintainer can update them later.

    At least that's how it was in my last job :(

  • First you must decide what you are documenting.

    Are you documenting:

    • The process?
    • What each function does?
    • How the system will be used?

    These three items have radically different approaches.

    The first, item, "The Process" has its own sub-itmes. Is it to get someone acquainted with the program. Is it used to help manage its growth?

    The second item too (pun intended) has a couple of sub-items. Is it to keep functions from overlapping? Is it to show what each one does once the user already knows that this is the function to use.

    The third item also can be divided into sub-items reflecting on who needs to read it.

    The approach for documentation is first to decide what *exactly* you are documenting, and then, who is it being documented for. Between these two details, you can decided on the approach, and the tools.

    Deciding where to store the documentation would be where everyone could get to it. Storing it ina database and displaying on an intranet sounds like an excellent idea.

  • by codewolf ( 239827 ) on Wednesday March 20, 2002 @08:53PM (#3197549) Homepage

    Start with documenting the code first! Since the code is what must be
    maintained in the long run, this is the critical place to make sure you have
    decent documentation so any programmer can pick up where the last one left off.
    Well documented code should contain as much comments (if not more) as
    code.


    Once the code is well commented, pull the comments out and use that as a
    start for technical documentation, a reference to the design, functionality, and
    interaction with other programs, modules, etc.


    Once this is complete, then, and only then, should you start documenting the
    programming project as a whole, mapping out database layouts, etc. (note: this
    is from the standpoint that you did not do it correctly the first time and are
    basically working from scratch). No matter what you use to document the system
    in, it should be a common format between all projects and systems. Databases
    should be documented using a decent data modeler, and don't forget to document
    the stored procedures (in the procedures as well as external
    documentation).


    Once all the technical documentation is complete, then you should start
    thinking about documenting the project from a user's point of view. If a system
    works well and is easy to navigate, the users will rarely reference a help file.


    I have walked into too many projects that were completed in haste, and looked
    at way too much code that was not commented at all to know that had the previous
    programmer done his/her job well, it would have saved me half the time trying to
    understand why they had done something the way they did. When writing code it's
    easy to assume that the code you write is blatantly obvious, but to someone not
    knowing the system from the start, it won't be, keep that in mind and all your
    code will end up being well commented, and writing documentation will be easier
    later for anyone looking at the system.


    In the future, remember that a well organized programming project will
    involve much more planning and pre-documentation then actual coding.


  • Any large bookstore will have tons of books on various methodologies. Software developers fight religious wars over them. I think it is best to hire an experienced person who has worked with a methodology, rather try from a book.

    Some more popular ones:

    First is the one coming out of MicroSoft called SOLID. MicroSoft software development was pretty disorganized in the 1980s, but improved considerably in the 1990s. Love them or hate them, they manage to get a fair number of winners out now. You should know their methodology.

    A very popular "counter culture" slashdot-type methodology is Xtreme Programming. Emphasizes small groups, pair-programming, incremental project goals, e.g. shippable software every 2-4 weeks.

    And then there are the tools, for handling pieces of the projects. UML for capturing the objectness of a system. Source control for software versions. Nightly builds and automatic tests. Project Timeline Planners. VERY, VERY USEFUL is the bug/enhancement multi-user database. It ties together managers, developers, testers, and customers. It gives a measurment as to whether more bugs or fixes are being generated at given pahse of a project.
  • I'm in pretty much the exact same situation. Except ASP instead of CF (sorry /. crowd).

    We've got about 15 people here, and generally, the way we do it, it we have project specific production folders on the network, and those folder get backed up at important points in time (delivery, every month, depends on the project and it's timeline). Thos CD's are stored in categorized drawer, which has an accompying spreadsheet available to everyone on the network. This spreadsheet is (or should) be updated every time a cd is put in the drawer. Most workstations have a cdr built in, plus we have a machine for just burning cd's, plus a USB drive for those unfortunate who don't have an internal, and too lazy to go into the other room.

    We also have a paper system, where all relevant materials, such as proposals, vital emails, as well as hand written stuff, goes into hanging file folders in a file cabinet. 3 months after final work is done on a project, the folder gets archived to the basement where we do all our file storage.

    And of course, the gratuitous entire nightly netowrk backup, which is kept off site, in case any of those cd's ended up kaput.

    It works for us, like I said 15 (which is generally our max, last summer we were down to 7) production employees, including programmers, designers, QA, and project managers (that list isn't exclusive, most of us where a few hats).
  • Project boxes (Score:2, Interesting)

    by arget ( 447057 )
    I feel your pain. I was in that kind of environment for a couple of years. The best method our office used was a crude but effective project box. Every project had archive time built into the budget and schedule, and at the end of a project the producer/project manager (uh, you *do* have some sort of project management? If not, start there, you've got bigger process problems...) would collect any paper documents or source materials, and archive onto cd any electronic source, documents, or other assets, and put it in a project box. The box is then labeled with the project name and stuck on a shelf until needed. Sometimes it worked well, sometimes it didn't, as it really depends on the team to collect and store the assets they use as they go along. For shorter projects, it worked better than the long, moving target type that started one place and ended up somewhere else a year later.

    If your company is affected by much turnover, then it's critical also to organize the boxes. For example, the first project of 1999 is numbered 99-1, the second 99-2, and so on. The archive shelves are ordered by project number. Put accounting in charge of keeping track of project numbers, as they already do...

    What to avoid:
    • each person responsible for keeping their own archives (no one remembers a year later if the guy who left did that....)
    • lack of centralized storage (no one remembers three months later where the cd with the source code is or who had it last)
    • depending on the client keeping the copy you send them. This is just stupid. They hired you for a reason, after all.
    • depending on the weekly server backups. Those aren't project oriented, may or may not be around for a given week a year later, and can be hopeless to use if you're not sure what you're looking for and where it was.
    Our company made some attempts to leverage work across projects. That usually didn't work so well. Each project, and each client, was just different enough. So you probably don't need everything from every project at your fingertips on the server all the time. The main goals for our archives was to be able to:
    1. Prove it was client changes causing problems, as what we sent them worked, and we're happy to send it again.
    2. Pick up where we left off when a client comes back wanting changes in six months.
    3. Deal with a project that gets cut or goes on hold, and then comes back the next quarter with more money and wanting to "add it all back".
    4. Provide documentation for any change orders or contract disputes that may arise, during or after a project.
    A good PM will archive at various stages, external and internal: every client delivery (alpha, beta, RC1, final), at end of design phase, when you've got a working prototype, etc.

    Good luck!
  • Basic ideas. Do some sort of database.

    Make sure that everthing you code is in modules/objects/etc.

    Then, as people code they enter data about how the modules and interfaces behave into a database.

    Everyone gets to add info about the modules, no one can remove it. You are building a database of knowledge about your work.

    Modules in the database have extra fields to identify functionality, connections, general areas.

    You can then run reports which become the basis for chapters, etc.

    Of course there are plenty of decent programs for this sort of thing, complete with version control, etc. In fact you could use any common coding version control program, storing basic text instead of code. Run it in side by side with the code. then export to a text file for reformatting, etc. just keep style, etc consistant.

  • Once and only once (Score:3, Informative)

    by MSBob ( 307239 ) on Wednesday March 20, 2002 @09:36PM (#3197727)
    When documenting a software project keep one important principle in mind:

    Write things Once And Only Once

    This means that whatever documentation you produce it should not duplicate information that can be inferred from reading the code. Documentation should only compliment your source. Describing algorithms in a Word document is a terrible idea as any duplicate information will get out of date. It's only a matter of time. Usually documentation should be more detailed around the user requirements and sparse around how the code works. Documentation is not an asset. It's a liability. Any new document introduced during the development process is an additional maintenance headache and a delay in project's completion. Always think twice before adding every single type of document into your development process.

  • Write it down! (Score:2, Interesting)

    by dasspunk ( 173846 )
    My favorite work montra is to "Document enough to put yourself out of a job". Meaning, write enough documentation so that anyone could walk in pick up where you left off.

    I like HTML for documentation because...

    - It's easy to work with and cross platform
    - Access it from any machine on your intranet (or internet if your brave)
    - Set up a standard documentation template to help keep everything uniform and to save time in creation
    - Use a scripting language to automate creation
    - Easy to convert to any other format
    - Easy backups at one location

    I would suggest treating your documentation situation like any other important project. Give it some attention, milestones, priority, manpower, etc. Start by documenting your documentation process!
  • we have no idea where to start.

    "The "

  • See Zope fishbowl [zope.org]. It's a nice summary of a very lightweight process with some well-written thoughts on why such/any process is necessary.

    As far as where to start, start with what you have. Most (not all) developers are happy to put their meeting notes, design docs, and such in a common/standard location and format (I recommend a text-based format in a revision control system) if one is simply designated. Someone whose technical ability they respect may have to remind some of the developers from time to time to put their docs in the designated place or to create a document from some important conversation.

    Be careful not to attempt to switch from what you have now (nothing) to something unrealistic (full UML class and system diagrams, workflows, and state transition diagrams for every project). Be realistic and simply start to collect what you've got. Designate a spot for hard copy documentation and electronic documentation. Another easy first step is to designate a common format (ASCII, HTML, PDF, StarOffice, whatever).

    Give that a few months to sink in. Then start to list common documents that should normally be associated with a project. Several separate "artifacts" of a project may include requirements, functional (user-visible functionality) design, detailed (class hierarchy and component interaction) design, implementation notes, decision log (bullet items of decisions made with date and those involved).

    Remember: something is better than nothing. If each project simply has a decision log (Greg and Sheila decided not to support wizbang with a froznobit because it would cause all the tulips to wilt), then you have a start. Six months later, when someone asks, "Why didn't we use froznobits to implement wizbang? Maybe we should fix that," they'll have somewhere to look for the answer. The same can be said of requirements and functional design. Developers can usually figure out detailed design by long hours spent pouring over code. There's no way to divine what a program is *supposed* to do if there are no comments and no requirements and no functional design.

  • by KidSock ( 150684 ) on Wednesday March 20, 2002 @11:33PM (#3198172)
    I didn't believe it but I was recently forced to use XSLT to generate unit testing code. So I read the XPath and XSLT specs (not long, easy reading) and thought I would document my personal library of C modules by defining the interfaces as XML and running an XSLT processor (Xalan-J) on it to generate an html reference, man pages, postscript, header files, etc. I'm still in the middle of it and trying to reduce the XML model but I have generated man pages and a very nice HTML reference. Here's an example [erols.com]. As you can see the style sheet isn't quite right. I'm working on it right now. If someone knows XSLT and wants to help, let me know...
  • Project artifacts (Score:2, Interesting)

    by PythonRules ( 166738 )
    You touch on the fact that it isn't just docs, a key concept. I like to set up a Zope server and run Squishdot on it. I create 'topics' for each project. Evertime we do something of note, I make an entry, maybe put links in it, whole release notes and build reports. Now everything is indexed and searchable!

    Underneath the Squishdot app I have a projects folder. Under it, 2 more, software and firmware. Under those, a folder for each project. In them I use a plugin called LocalFS which exposes a system forlder to the Zope environment. We put all our docs, spread sheets, gantt charts and any other project artifact. Another page does an SQL query against our bug database and displays that kind of stuff.

    I can also pull in headlines via RSS to make the site more interesting and usefull. I even use Radio Userland at home to create a custom RSS feed tailored to our specifics needs.

    The last thing is to instill the culture, this takes time and patience.
  • by Starky ( 236203 ) on Thursday March 21, 2002 @12:00AM (#3198300)
    I don't know that much about ColdFusion, but with Perl one can generate POD documentation, Java has javadoc, etc.


    The first thing you should do is create coding standards in which documentation is part of the coding process. The documentation standards should be such that you can automatically generate documentation as the code base changes.


    For example, on every Perl project I work on these days, I introduce a script (about 30 lines of code) which auto-generates documentation from the PODs. The script can be run as a cron job that auto-updates the online documentation every week. That way, coders document as they go, and central documentation resource automatically regenerates itself on a regular basis.


    The second thing you should do is set up an intranet site (behind the firewall!) for developer documentation. Include the auto-generated documentation, documents describing your coding standards, project management documentation for developers, use cases, class diagrams (does ColdFusion even have objects?), activity diagrams, sequence diagrams, etc., etc. If you have a team of 20 people, undoubtedly you have someone who manages code revisioning. Likewise, managing the developer intranet should be included in someone's job description, and, what's more, they should be given the time to do it properly.


    Hope this helps :-)

  • We used to have the same problem when I joined my current project in 1999 (yep, 4 versions later, we're still doing the same product). We are using Lotus Notes (no choice), which has serious drawbacks (no Linux client, buggy SMTP, weird shortcomings, very bad help, crashes at odd times) but happens to work very well as a collaborative environment. I suggest you get a good collaborative environment that allows its users to:

    • easily author, edit, publish (share) and index documents
    • share remarks and notes
    • offer multiple "views" (indexed sorts) of the same database

    Then create one or several databases containing "how-to" documents. For instance, I see a few popular documents here: how to reload our DB tables, how to set debugging options of a certain product, how to configure SSL for our web server...

    We have one of these little document for each procedure that has to be done several times. One-off tasks are not documented. There is a strong incentive to document a procedure when you've been asked to perform it several times.

    Random papers and drawings are scanned, but their use is discouraged in favor of editable files.

    Mostly, whatever collaborative system you use, train people to use it and provide incentive for its use.

    And don't think it will be free. It will start saving money after several months, not next week.

    -- SysKoll
  • PLEASE! (Score:4, Insightful)

    by wedg ( 145806 ) on Thursday March 21, 2002 @12:44AM (#3198443) Homepage Journal
    Read The Mythical Man-Month by Frederick P. Brooks, Jr. (ISBN 0-201-83595-9). This is one of the best books I've ever read when it comes to managing any sort of software product - and it gives great advice, including a chapter on documentation and why it is so IMPORTANT.

    Please, go out and buy it and read it - or check it out from your local library. It is a must for all programmers, even if you're not the one in charge.
  • You use ColdFusion. This language is a mess -- it's slow, expensive and embarassing to work with. It's also very easy to understand, which is why it's well worth the cost, sloth, and total lack of knowledgable people.

    I came into a codebase of about 5000 cf pages. Only two of the original developers are still with my company. There is no documentation and these were not good programmers -- my portion of the application was by and large coded offsite by amateurs. And at the same time, I have never really been halted in my work by the unavailability of documentation. Hindered, maybe -- slowed a bit, especially during a set of endless includes. But never halted.

    ColdFusion is a mess to program complex things in. Cfscript is apocryphal and best replaced by simple COM and Java modules that do the same thing faster and in a much more understandable fashion. What you're left with is a base of very simple, readable code that's actually spoiled by documentation. (those <!--- tags are murder)

    Oh yeah: name your variables wisely. That's the key to ColdFusion
    • Re:Don't. (Score:2, Interesting)

      by devleopard ( 317515 )
      The language isn't slow, expensive, or embarrassing. Like any language, it's only as good as the developer that writes it. Unfortunately, since CF is so easy to learn, there tends to be more novice code out there you'd typically find in other languages (hence the bad rap). No fault of your own, you seem to have some misunderstandings as to how CF works (for example, CFScript was never, never meant to replace compiled objects). From the sounds of it, CF isn't your primary language - however, I work in CF every day (I'm actually on the board of a CFUG and have contributed to a couple of CF books) so naturally, my perspective differs from yours.
      • Untrue. Cold fusion is NOT as good as the developer that writes it...CF was my first "production" language and I have exceeded its capacity on numerous occasions. There is a point past which ColdFusion will not optimize, cannot keep up, gets buried under requests, and it's a significantly lower point than ASP or JSP/Servlets get bogged down.

        We wrote the same simple i/o algorithm -- extract rows from a database and loop across them to output a table -- in practically a dozen different ways in three different languages beneath IIS, and the CF implementations (CF using a CFX tag, CF using cfquery/Cfloop, CF using a cfscript to loop and call writeoutput()) were all slower than even ASP. A servlet with a pooled connection and a persistant bean was fastest, but this is almost cheating.

        We did extensive testing and have on numerous occasions sworn that we wouldn't accept ColdFusion anymore now that all the developers here know ASP and COM (all the CF only people are gone). And you know what? Despite the inefficiency and poor scalability we've noticed (which, I'll concede, is due in part to that fact that some parts of the application were not planned or coded correctly), we still do all new development in CF. It's just faster to get done because the syntax is easier and working with display is more like HTML than JSP or ASP. It's more natural.

        In summary: I disagree, the lanugage does suck, but I love it. Hell, it's paying for my house!
  • by inquis ( 143542 ) on Thursday March 21, 2002 @01:39AM (#3198636)
    A lot of people are posting saying basically "use system X to keep track of your documentation" or "use system Y to keep track of it" but are not addressing the main problem: it really doesn't matter how documentation is archived. Sure, CVS or DocBook have advantages over papers in a filing cabinet, but efficient access to documentation means nothing if the documentation itself is garbage.

    What documentation would I consider garbage? A lot of these replies suggest you use "literate programming" and "comments in the code", and while these are very useful to maintenance programmers they are nowhere near as important the specification, analysis, and design documents that should have been generated before implementation had begun. For example, I'm sure none of the /. crowd would have any trouble figuring out what a 200-line, uncommented module does when they have access to the complete and accurate specification, analysis, and design documentation. On the other hand, it's ridiculously easy to cause a regression fault nightmare when you are modifying a 200-line module with copious comments but without the detailed specification, analysis, and design of the product handy.

    What you should be asking yourself:
    1) For each of the projects we are currently working on, do we have the design documentation?
    2) If 1, is the code we are writing completely consistent with the original design documentation?

    if (1 == false), you are in BIG trouble. While development on a project such as that may go okay, maintenance will be a minor disaster area. It's unreasonable to expect maintenance programmers to maintain a project that's so poorly documented, and for such a small organization spending gobs of time hunting regression faults because the idiot down the hall made a change to a module that he didn't understand and that wasn't documented could be fatal.

    if (1 == true) but (2 == false), you are still in trouble. Wrong documentation is orders of magnitude worse than no documentation, because what happens is that maintenance programmers don't realize that the code doesn't fit the specification and end up trashing half the project until someone finally catches the mistake.

    My suggestion? If you have projects like #1 or #2, consider all the work you've done so far as a rapid prototype, trash all the code, and start from scratch with a reanalysis of the specifications. It might sound brutal, but you'll spend less cash in the long run doing a total overhaul now rather than waiting until later and letting it all catch up to you on the bill for maintenance.

    If your projects are well-specified, analyzed, and designed, your employees already have the competence and the CASE tools they need to document their code well. Remember, the emphasis is on COMPLETE, COHERENT, CONSISTENT documentation; hell, even resort to printing your documentation on dead tree if you have to, as long as it's complete, coherent, and consistent it won't matter that much. Accuracy of documentation over efficiency of access.

    -inq
  • Hire a secretary (Score:2, Interesting)

    by mshurpik ( 198339 )
    what about all those diagrams and handwritten notes. If not, do you store things in a folder per project, and how do you then stop documentation from getting lost and making sure people store things where they should.

    Try hiring a secretary. Organizing and keeping track of documents is centuries-old technology already.

    And good luck. You've just admitted that your organization doesn't have even the most basic organizational skill between the lot of you.
    • I think that's a bit unfair. Most software shops doesn't use any formal methodologies until they get a reasonable size. It's what allow them to be competitive when working on projects that are small enough that adding overhead isn't needed. If a project is handled by 4-5 people, formalized procedures and thorough documentation may never be required. It is when projects grow that you need to start formalizing how you do your development, in medium sized teams mostly to ensure that you can add or replace resources on a project quickly without a lot of overhead in training. The level of formal procedures and organization needed also depend a lot on what kind of software projects you are working on.
  • by matsh ( 30900 ) on Thursday March 21, 2002 @02:17AM (#3198761) Homepage
    Whatever you do, don't write any documents at this time. Instead put everyone (if possible) in one big room, with pens and whiteboards along all the walls. Supply lots of coffee, food, snacks and soft drinks.

    Let them hash out all the details of what you believe the customer wants. If you have a real customer available, chain him to a table in that room and don't let him go until you're satisfied.

    Write down user stories on post-it notes, stick them to the walls, sketch UI designs and user interactions on the whiteboards. Don't worry about documentation! What matters is that you all have the same vision and understanding of what to do.

    Documentation on paper is just about the worst medium possible for transferring information from one person to another. It is one way, it is low bandwidth, it is not visual (unless you have lots of pictures and such). It basically sucks. Two or more persons by a whiteboard is the best possible technology for information transafer. The ultimate solution is if you have a printing whiteboard, which can give you a hard copy of what you just jotted down.

    The real documentation, on paper or on the web, can come much later, when things have stabilized a bit. In the end it may never be needed, in case your project is cancelled.

    All these tips comes straight from the book Agile Software Development, by Alistair Cockburn. The best SW related book I've read in years!

    Mats
  • My company had the same problem. We had dozens of little projects on the go at the same time, with lots of customers, and several outside contractors. How to coordinate, including across time zones, and with various documents to be shared?

    So, being a software company, we wrote a tool! It's called Outreach Project Tool, and we've GPL'ed it. You can check it out at http://outreach.sourceforge.net [sourceforge.net], and download the source from http://sourceforge.net/projects/outreach/ [sourceforge.net]. Note it's dependent on LAMP.
    • The Outreach Project Tool is superb. Easy to install, easy to use, and has a very slick professional feel. It wouldn't look out of place in any top corporate environment and I consider it to be a shining model that Open Source software standards should aim for. By "dependant on LAMP" he means "Linux Apache MySQL and PHP".

      Phillip.
  • Documenting is great, but takes a long time.
    The main problems are:
    • Developers are bad at writing docs
    • Writers are bad at understanding what was done and why
    • Writing tends to lag behind development
    • When writing actually happens, nobody remembers the what and the why anymore

    To solve this, i propose a novel approach:

    Video Tape everything

    Record:

    • Brainstorming sessions
    • Developers describing their code (highlighting it, showing it on screen, explaining what it does)
    • Building and integrating activites
    • Everything else you can remember
    Seems like a weird thing, but try it. When you document, having the tapes around is a precious resource.
  • All documentation on software development projects falls into a fairly small number of categories.

    • Requirements - What you've got to do
    • Design/implementation - How you're doing/going to do it
    • Testing - Whether you've done it
    • Overheads - Planning, co-ordination, etc.

    It's quite important that, in some form or other, you have records of your project's current state and future intentions in each of these areas. It's also worth noting that those records can serve two very different, but complementary, purposes:

    • Planning - What you're going to do (one-off docs, applicable at any given moment in time)
    • Reference - The current state of play (modified to keep it up to date)

    From a certain point of view, how you actually generate and record these documents is only a detail. It certainly helps to have a good formal version control system in place, with each formal document carrying an issue number you can reference and a date of issue, for example. Tools like CVS can help with this.

    <Asbestos> I question the worth of most tools that generate documentation "automatically" from code, particularly from specially formatted comments. </Asbestos> If you want to know what a particular function does, or what the parameters to a particular call are, or which web site your site links to -- all perfectly sensible questions -- these things should generally be examined by looking directly at your code/web page source/whatever. There is no point, IMNSHO, in duplicating this knowledge and wasting whole forrests in order to print this out as a 200 page document that's immediately out of date and no-one will ever read anyway.

    Once you understand the basic types of documentation you're likely to need, you'll want to work out the specifics in some detail, preferably directed connected to whatever development processes you use. It's worth checking to see if you can get tools to help with things (e.g., a tool to draw UML diagrams for your design docs, a tool to parse web sources and graph which pages link where). Once that's all in place, you're on your way. It sounds like a lot, but actually, most of it should just be common sense, and it's well worth investing the time early to sort out what types of document you want to have, how to store them, what tools you can use to help write them, and training your team in how to use the system you've created.

  • You need to start documenting today. when you make a change, document the area you change, how it works, why it works that way, gotchas that you had to watch out for...

    I started doing that 3 years ago for code that I maintain, and I'm getting close to done. Often I go back to something I documented before and update it with knowledge I discovered latter that makes things clearer. I also discovered I maintain one module that is as close to perfect code as I've ever seen. I know that because I have not done any documentation on it which means nobody has found a bug, or a situation it doesn't handle already.

    Unfortunatly I've also discovered some things that I don't know how to document in a way that others will know what to do when it happens again. In my case hardware designed a new board that required different registers. We had to compile some things differently for that board, and to make our makefiles do that is really easy once you understand how they are generated, but difficult if you do it the obvious way. A simple change once I found it, but I don't know how to tell others so they will figgure out where to make the change.

    In any case, once you get some documentation it can be orginized. Thats not something I do well. I don't write documentation well either, but at least I write it, and that has helped.

  • by tarsi210 ( 70325 )
    From the Prevent-random-acts-of-lawsuits dept.

    Small company here (~20 ppl), and we keep notes on various projects in a custom application that we wrote with a database backend that allows us to write notes on projects, track time spent on projects, and run reports.

    Another major part of our arsenal is a CYA box. (Cover Your Ass) This is a box or other container into which all notes, drawings, printouts, scratchings, post-its, code scraps, etc....EVERYTHING goes. Why?
    Two reasons:
    1. It allows us to show a paper trail of our development. If you ever get sued for copyright or patent infringement, you'll be glad you had this. It shows, in order, how the application was developed. Since everything in the box is layered in chronological order, this works well (First item in is oldest, last item in is newest). We seal boxes up when they get full, date them with the start and end date and mark a destroy date on them (7 years hence, usually).
    2. Ever delete something you wished you hadn't? Had a HD crash and wipe out some of a program? Then a CYA box is a handy thing. I haven't had to use it very often, but trust me, restoring programming code from paper is better than nothing. (tape or CD is better, but it's a last-resort backup)
    Whatever you do, document EVERYTHING. If you sneeze on a project, document it. Documentation is one of those evils...if you don't do it, you'll be fast but you'll kill yourself later, and if you do it too much you'll slow down product. But it's worth the extra effort.

Real Programmers don't eat quiche. They eat Twinkies and Szechwan food.

Working...