2011-02-28

What is Your Personal Software Development Process?

It seems that, we software developers are always on the hunt for the ultimate process to follow for our 'profession'. We are almost obssessed about the latest methodologies, life-cycles, X-driven developments, agile and heavy-weight approaches; even more so than any other similar industries out there (as far as I know).

Why is it so? I think, it is because of the nature of our field:
"Solidified abstraction of complex dynamic processes". This contradictory responsibility makes processes both a necessity and a hindrance. An order is necessary to our work-flow, because we are trying to construct extremely logical abstractions and we need to keep the focus on the overall picture. On the other hand, it is a hindrance, because the process is extremely dynamic and sometimes unpredictable; so that, we usually need to seek help from our artistic/creative cognitive abilities, and no process can capture the natural flow of our mental patterns here.

So, I believe processes are a necessity but they should be kept to minimum as a safety net that would be enough to guide the fluidity of the mental processes and keep it on the right track. Processes should also be necessarily dynamic and updateable to avoid the "zombie-land" where un-maintained, obsolote, and non-usable documents, specifications, and plans silently reside.

As a fan of agile methodologies who has worked on a number of projects with similar philosophies, I must admit I've never used a specific methodology for my own software projects be it for fun or for profit.... since today :)

I've decided to develop and follow a personal software process from now on. My reasoning is that if I really believe in using them in a team environment, I should also believe in them for single-developer projects. After all, they all produce software in the end. I know there are some personal software processes out there, but none of them was suitable for me and some of them were too complicated even to read :D.  Being an agile guy, I tried to quickly write down a simple, applicable personal process as a draft.

You can see the initial result below. It turned out to be an iterative, test-driven, agile (no kidding!) methodology that borrows some ideas from more heavy-weight approaches. Some of the lines are a little unclear, because I'm note sure about how to best incorporate them into the methodology.

MadChuckle's Personal Software Process - Draft
1. The Goal Summary (Project Description)
2. Requirements Analysis
    A. Preliminary
        - Functional
        - Quality-wise
        - Architectural
        - UI and usability related
    B. Detailed
        - Mockups
        - Requirements Catalogue
        - User Stories / Use Cases
3. Methodology Development
        - Integration, IDE Tools, etc.
        - Configuration management standards
        - Coding and architectural standards
        - Monitoring and measurement methods
4. Project Management (In parallel with Iteration step)
        - General Time and Resources planning (very loosely)
        - Risk Management
        - General Strategies
5. ITERATION (xN - as needed)
   Iteration Type: R&D, Design, Feature, Change, Debug, Refactor, Prototype
         A. PLAN
              - Plan the next cycle activities (design, development, test etc.)
              - Detailed resource/time planning
              - Define the test cases (can be in natural language)
         B. DO IN PARALLEL:
             B1. Design
                 - R&D activities
                 - Spikes / Prototypes
                 - UML / Other Diagrams
            B2. Development
                 - Coding and Continuous Integration
                 - Test-Driven Development
            B3. Testing
            B4. Update Iteration Plan (becomes the iteration document)
         C. Iteration Release and Review
              - Monitoring / Measurement results
              - Other metadata
              - Opinions etc...
         D. Update (pre-Iteration activities if necessary)
              - The Goal
              - Requirements
              - Methodology
              - Project Management
         E. (If MILESTONE) Milestone Release
         F. User / Use-Case Review and Feedback
6. Finalization
        - Delivering, packaging, training, final deployment, support etc.

Do you think this is a practical, or reliable approach? Is it too heavy-weight or is it too light for personal processes? What is your 'favourite' personal process or best-practices? Please share and have a nice day!

MadChuckle

1 comment:

  1. A software development process, also known as a software development life-cycle (SDLC), is a structure imposed on the development of a software product.

    ReplyDelete