Sep 15 2008

Software Development Methodologies

Tag: TechnologyJosh @ 9:34 pm

I’ve been reading about Agile Software Development this evening. I’ve never really categorized my preferred style of development, but I’d say it closely resembles the Agile style.

Basically, Agile development involves short iterative cycles of development with frequent deliverables.  There is minimal planning and the stakeholder is frequently consulted for feedback.  The goal is to have a working release at the end of each development iteration with minimal bugs.  The iteration is complete when it passes tests.  Then it’s time for feedback and the next iteration of feature development.  Working software is the primary measure of progress.

It seems that with the Agile development methodology, you are more likely to have a Mission Statement than a Project Plan.  You are working toward an end goal, but the path may not be predictable.

I find this quite interesting.  In my office, our Project Managers want to have project plans that boil down to: Development will begin on ??/??/???? and end on ??/??/???? and will take X hours. Testing will begin on ??/??/???? and end on ??/??/???? and will take X hours. Deployment will occur on ??/??/????.  The end result will contain features 1a, 1b, 1c, 2a, 2b, 2c1, 2c2, 2c3, 2d.

This method of strict project planning isn’t all bad, but it isn’t very darn likely either.  Crap happens. Features change.  We learn something new. This is why I lean more toward the Agile development philosophy.  It makes allowances for unexpected circumstances.  Nay, it expects crap to happen.

I’ve worked on many different projects this year.  A couple stand out as being particularly complex and high profile. The first one followed a strict project plan.  No wiggle room.

“We must have the project finished on this date. Create a project plan that fits this end date, then make sure you hit the date, no matter what.”

So that’s what we did.  The business owner started wanting changes almost immediately, but it was too late by then.  We didn’t deliver anything for testing until just before the end of the project.  There was no time to change/add functionality based on feedback from the stakeholder at the last moment.  Had we made small deliverables all thru the development cycle, we could have flushed all of that stuff out before the due date.  Instead, it was a single massive deliverable with no room for changes.  The software worked as requested, but the business owner didn’t request everything that it needed to do.  Now we’re faced with large sets of feature enhancements for an application that just went live in what was supposed to be it’s final form.

The second project had a looser project plan, but still a firm date. It was approached a little differently.

 ”Here are the goals of the application, and a simple flow chart. Here are the milestone deliverables.”

Instead of working strictly toward the end result, I developed iteratively with the end result always a distant thought.  I delivered the first milestone within a few days.  It didn’t do much, but it worked. All other functionality would derive from that.  Over the next several weeks, I delivered more components of the application in iterations.  Each iteration was a working application that was immediately ready for user testing and feedback.  These quick iterations didn’t completely fulfill the goals of the project, but each got us closer. And each iteration kept the stakeholder involved and giving feedback. After completing a particular iteration, I discovered the project was done.

We shifted directions a couple times on this second project, but those direction changes evolved from our understanding of the project and requests from the stake holder, and contributed to a successful deployment without a slew of changes shortly thereafter.  I attribute this to the fact that the application evolved during the development phase to be exactly what it needed to be.

 

 

Share/Save/Bookmark


Sep 14 2008

Test Data Generator

Tag: TechnologyJosh @ 11:01 pm

I frequently have the need to enter fake data when developing/testing an application.  Things like names, addresses, credit cards, etc. To assist with this, I’ve been working on an application to easily produce test data.

Currently, it generates the following:

  • Full Name (First, Middle, and Last.  First and Middle names are for same gender, though the gender is randomly chosen)
  • Address (Street Address, City, State, Zip, County)
  • Phone Number
  • Credit Card (Type, Number, Expiration)
  • Bank Account (Bank Name, Account Type, Routing #, Account #)
  • Date of Birth
  • Driver’s License (Number, State, Expiration)
  • SSN
  • Email Address
  • URL
  • Company Name

It can generate any of the above items individually, or you can generate a “Person” with all of these data elements included.  If generating a person, the email address will contain the person’s first name, with the domain matching the company’s name.  The area code of the phone number will be correct for the City/State of the address.  The State for the Driver’s License will also match the person’s state.

The credit card and banking numbers will also pass basic validation algorithms (luhn/mod10).

I should note that this is similar to what can be found at http://www.fakenamegenerator.com, which I discovered after I started working on this project. The difference is my solution is more robust, and can be used programmatically instead of having to visit the website.

Currently, this is only a basic PHP class that can be called to generate the data.  The next step is to expose the methods as a Soap Web Service (so it can be used by any programming language).  I’ll also build a GUI front-end that will allow download of the generated data in a delimited format.

When I originally wrote this, I intended to use it for work.  However, I’ve written it completely from home, and I’d like to keep it for my own and license it under LGPL.  I’ll still use it for work, but I want it to be “my” project and not my company’s.  Of course, I remember something from the paperwork I signed when I started working here about my employer owning any thoughts I have during my employment.  It is for this reason that I’ve tried really hard not to have any thoughts for the past 3.5 years.

I figure I’ve given them enough of my soul already.  Surely they’ll let me keep this one small thing?

Share/Save/Bookmark