Assigning Business Value to Features

December 11th, 2008 Jon Dowdle Posted in Code, Programming No Comments »

While we at work are not "agile" I still find that some of the techniques used are very helpful. Today, I read an article on how to use "Planning Poker" to assign business value to features in a release.

This article's value can be seen if you've ever been in a meeting where 10 new "awesome"/"cool"/"really important" features have been introduced 3 months after the requirements have been completed. To a developer these changes can be frustrating (if we aren't the ones proposing) or exciting (if we propose). Either way leads to either a rejection of the idea or an over commitment of our time.

The best thing taken from this article is the questions to ask of each feature before it is decided to be in the next release. They are:

  • What does the feature mean to its user?
  • What does the user mean to the product? Potential purchaser, marketing partner, simple user, influential user, investor…
  • What does the feature mean to the company or companies developing it?
  • How would you rate feature on the Kano scale (Pre-Requisite, Positioner, Exciter or Deterrent)?
  • What is the consequence of not implementing the feature?
  • What is the consequence of delaying implementation of the feature?

Original article (AgileSoftwareDevelopment.com), Planning Poker (Wikipedia)

AddThis Social Bookmark Button

Design Patterns in Coldfusion (Iterator Pattern)

July 8th, 2008 Jon Dowdle Posted in Code, Programming, Web Design 2 Comments »

This is the second article on design patterns in Coldfusion. Part one can be viewed here.

Quick Description
The iterator provides a single way to loop over a collection of elements without having to worry which type of collection (list, struct, array, query) it is. The interface for an iterator is quite simple with the main methods being hasNext() and next(). hasNext() returns true or false depending on if there are additional elements, while next() returns the next elements.

Speaking of collections, there is a collection class included with the source files. Using a class to contain the collection is preferable because it abstracts the data storage method for groups of objects, which lets us use the iterator class seamlessly. I find being ignorant of the underlying data type gives much more flexibility. I plan on going to more detail with the AbstractCollection and the implementation more in a future post.

Most of the code is taken from Brendan O'Hara's article, with the largest exception being the addAll() method in my PersonCollection.cfc. So again, many thanks to him for his wonderful post on CFDJ.

Included Examples:

  • AbstractIterator.cfc
    • Abstract class (with CF8 this could be replaced with <cfinterface>)
  • ArrayIterator.cfc
    • Class to handle iterating over Arrays
  • PersonCollection.cfc
    • Maintains a collection of Persons
  • Person.cfc
    • Basic class
  • Test.cfm
    • Instantiates and displays output for all these CFCs

Links:
Iterator Source Files

Brendan O'Hara's Iterator Article

AddThis Social Bookmark Button

Design Patterns in Coldfusion (Decorator Pattern)

July 3rd, 2008 Jon Dowdle Posted in Code, Programming, Web Design 1 Comment »

Recently, I have become interested obsessed with design patterns.  What caused the spark of excitement was that I was working on an algorithm similar to one of the patterns (I can't remember which) when I read Head First Design Patterns and realized it had already been created for me! By the way, I'd recommend Head First, it's a great learning series.

Also, I use the term "class" for "component" and "method" for "function". So without further ado,  my first article on implementing design patterns in Coldfusion.

Decorator Pattern

A decorator more or less wraps a base class and well...decorates it. This can be useful when you have a scenario that would need a lot of classes to cover all of the possible combinations of objects.

My Implementation

I followed the example by Hal Helms as far as the class organization is concerned.  Some of the decorators are me being funny (piglatin and mirror), but I can see some value in the TableDecorator, JsonDecorator and XmlDecorator.

Let me explain each file a bit more.

  • Test.cfm
    • Instantiates the components and outputs results
  • Person.cfc
    • Base class (whose methods will be overridden by the decorators)
  • PersonDecorator.cfc
    • Base decorator class (all decorators for Person will inherit from this class)
  • PersonJsonDecorator.cfc
    • Creates a JSON representation of a Person.
  • PersonXmlDecorator.cfc
    • Creates a XML representation of a Person by wrapping the elements with nodes that represent each element
  • PersonTableDecorator.cfc
    • Creates a table representation of a Person by wrapping elements with <td>'s and the entire Person with <tr>

Links

Source Files

Wikipedia's Page on Decorators

Hal Helm's Decorator Article

AddThis Social Bookmark Button

New Project: Infection Control

February 25th, 2008 Jon Posted in Code, Programming No Comments »

Right now I'm refering to the project as 'Infection Control'. It is not catchy, I agree, but it does sum up the intentions quite well. So for a lack of a better name, it will continue to be called that for the time being.

In the past few days I've accomplished quite a bit. The core functionality is not done, but some of the outlying features have come quite a way.

Below I've broken down the project into the most elementary functional units.

History

This last week I came down with one of those 'everyone is going to get it' colds. Luckily this roaming strain only kept most people out of work for 2 days at most. In the height of the sickness, I had a thought. Why hasn't someone created a warning system for these epidemic like colds? I, for one, would have appreciated knowing that everyone was contagious.

So this is where the idea came from.

Abstract

The project's goal is to allow users to watch for flares of ailments and to take precautions so that they may not miss work or pass diseases on to loved ones. What I believe sets this project apart is the speed of updates and diseases covered.

The CDC has a similar application but with the shortcomings that I plan to address. Their system is not directly user reported and only covers the Flu.

Input

To keep submission easy, I'd like to keep the input process as simple as possible. Data will be entered through a standard HTML form.

Five elements of information is the most that I want users to have to enter. In the K.I.S. mindset, so far I have:

  • Zip code
  • Symptoms displayed
  • Household size

Future data elements might include:

  • Taking any corrective medications, i.e. antibiotics?
  • Seen provider yet?
  • Length since symptoms began?

Output

I'd like to make the output as graphical as possible. The main reason being to keep this simple and intuitive.

The main element of output will be a map of the user's surrounding areas. The map will be a thematic map showing the degree of symptoms reported.

The above map is all that is planned for the first iteration. Ideas for future iterations include:

  • Showing the velocity of symptoms
  • Emailing alerts based on user criteria

Progress So Far

  • Input
    • None so far
  • Output
    • Chosen Google Maps to display output map
    • Generated county boundaries based on US Census GPS data
    • Dynamically displayed Counties in varying colors within Google Maps

Outside Links

Project hosting: Infection Control @ Google Code

AddThis Social Bookmark Button

Fun with C#

April 3rd, 2007 Jon Dowdle Posted in Code, Programming No Comments »

This demo is of a quick and dirty C# application from work. We are trying to do all these functions (returning a DataSet and returning the appropriate image stream) via web service so we can utilize any language we please. The application queries an API which returns a DataSet. One a row in the DataGrid is clicked the appropriate image is looked up in the database and the resulting stream is then displayed in the PictureBox on the right hand side. Demo done with Wink (direct download link to Wink -or- mirror list)

Link to demo video

AddThis Social Bookmark Button