I have discovered that I create and share designs best by writing clear, precise descriptions in plain English. This technique often uncovers hidden gaps in my analysis and helps others know what to expect and what the rest of the team expects from them. I sometimes need to create a picture to help explain an idea or work through a difficult problem. Often I will use a simple drawing tool or pen and paper, but for some problems I use UML diagrams from TogetherSoft's Control Center.
By storing everything inside of a source code control system, I can always compare new experiments with older versions of the system. Projects only get better. Plus I know exactly what to back up every evening.
I use the interface-implementation pattern frequently, at several scales. This approach lets me create a system of interchangeable parts. Early in projects, I can create simple dummy drivers that allow me to maintain a functioning system while I work on other parts of that system. As I work through a project, I create the real modules for existing interfaces and plug them in. Instead of dropping a final release onto a client, the client can watch the project grow as I fill in the modules.
I create build scripts as I work on a project. When I identify a repeated task, I add that task to the build script. By using this practice, I can always check out a project from source code and build it into a working system with a few commands. When I run the build script, I create consistent, repeatable results.
I create a test suite for every project. I run tests as part of every build. These tests uncover hidden inconsistencies and bugs as I change code. Source code control, repeatable builds and the testing library allow me the freedom to refactor existing designs without introducing new problems. As a bonus, modular design allows me to reuse the tests.
One section of my build scripts include instructions to automatically deploy the project as a compressed file. For some projects, I deploy a set of files to a web server. By scripting this task, I can start with source code and always produce a consistent end product.
All of these techniques combine to let me keep a snapshot of the state of the project available to my clients. These snap shots help build trust and shorten meetings. While I work on the project, my clients have an incomplete version of the final result available. They can give me feedback as I do my work, so the project can adapt to shifting business needs.
http://www.walend.net
mailto:david@walend.net
88 Ripley St
Newton MA 02459
617 916 2763