My approach is pretty informal. I'm currently writing a Slash plugin for an article to plug an upcoming book. After coming up with the idea (an entirely new subject in itself), I did a little design.

Most of that design is breaking the problem into tasks. Each task is supposed to be a standalone piece of functionality that can be accomplished in under two hours. This is a brainstorming session, where I figure out what's really necessary and often come up with useful enhancements. I rarely put the enhancements in, the first time. I end up with a small text file similar to:

- display a page - current version - no arguments - op=display - ver=version number - list of previous versions - author - changes ? - links - restore previous version - only for administrators - delete everything later ? - edit a page - allow wiki markup - save rendered version - save previous versions - access control - restrict based on seclev - optional restriction based on user flag - index - list pages - search pages - recent changes - markup parser Schema ------ - wikipage - user (uid) - title (name of page) - date (change date) - version (autoinc) - description (char 255) - wid (wikitextid) - wikitext - wid (wikitextid) - text - rendered - version
They're arranged in *rough* order of importance. Each indentation level allows further detail. I don't keep many design notes at this stage, but occasionally I'll think of something that may work.

Then I go on to coding. I usually write tests before code. This time, I was revising an existing bit of code, and wrote the tests later. That made for more debugging time and brought shame to my ancestors.

I have the display and list bits coded, and the parser is there as well. I've left the database for a bit later, but that's probably next on my list as I put in the edit/save files.

Does this make any sense at all?


In reply to Re: Virtues of Software Engineering by chromatic
in thread Virtues of Software Engineering by vladb

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.