Tuesday, September 25, 2007

Product Management - Feature Creep

One thing I am becoming acutely aware of while developing products is that feature creep can kill a product on many levels. Equivalent to scope creep in a project, if it’s not managed carefully or specified properly, it can get seriously out of hand.

I would much rather see our team produce high quality products that focus on a few key tasks, rather than lots of features that are all half baked. If it’s the latter the product becomes -

  • Frustrating to use for the customer.
  • Frustrating for the support staff to train users.
  • Hard for the sales staff to believe in the product, or “stand behind it” with the conviction that there is no other solution but ours.

To combat feature creep – introduction of features needs to be formailsed and signed off on in key areas in order to minimise impact. These areas include:

  1. The specification stage
  2. After a review during development, after a “Change Request” has been submitted by key stakeholders. If accepted (that is, signed off) with additional costs approved, it should be written back into the specification. The development team should be appropriately notified.
  3. After a product has been released, once again using appropriate Change Requests.

Change Requests are necessary to level out those “heat of the moment” ideas that seem like a fantastic idea at the time, but when revisited may seem more like a “what was I thinking?” brain fart. They give all involved parties an excellent tool for evaluating why the change is good (or bad), and what’s needed to get it happening.

Other types of feature creep such as developer “Gold Plating” also need to be managed. If a developer wants to introduce a nifty feature they thought of over the weekend, they need to first sell it to the stakeholders rather than compromise the final product – get them excited about it, and treat it as a form of up-selling. Ultimately it’s just the software development way of saying “would you like fries with that?” with an accompanying explanation (in the form of a Change Recommendation) of why it’s good for the end user – and putting a positive spin on charging a little extra for your efforts instead of trying to fit it in to existing project requirements. In developer utopia, it would be fantastic, especially if the client always agrees wholeheartedly. In reality – developers aren’t salesmen and not always able to cope well with rejection, so this easier said than done. This is where the production team needs to develop a good relationship with their sales team; another topic altogether.

Unfortunately it all sounds very formal and time consuming, but it’s a necessary evil to ensure the quality of what you’re delivering, both to your customers (it’s usable) and to management (it’ll cost you this much time and money to change, that ok?).

Keeping it all together

A challenge I see ahead: – many products developed for specific things (hence keeping it simple) means there needs to be some level of interoperability between them all, or at least some of them. Be assured, there will be many as time passes, and you’ll need a way to get data or files from one app to another with minimal effort. This is especially important when keeping everything in the big picture.

Web services makes this conveniently possible these days, and once again Google is the poster child in this so far with their Google account as far as a good model to follow, where one account gets you into their entire product offerings. Once you’re in one of their offerings (e.g. Gmail, or Adsense, or blogger, etc.) it’s entirely focused to the task at hand – but it’s easy to get from one application to another. They’ve even gone so far now to open up an API called GData (http://code.google.com/apis/gdata/) to allow information to be moved about. In my opinion Microsoft’s “passport” was poorly implemented – but, so was their entire online product offering except for hotmail, which was bought anyway. Hopefully they get it right with Microsoft Live.

Tuesday, September 18, 2007

Google Docs - Presentation

Google's new powerpoint competitor is now available in google docs - here's my first one:

http://docs.google.com/Present?docid=dw9j5pb_1cchzkk&fs=true

Excellent interface as usual, one would almost go so far so say kick arse. Nifty online features that differentiate include the ability to easily share (e.g. the above link) and also discuss through an inline AJAX chat. Very cool.

Wednesday, September 12, 2007

Design Reviews - Don't Overdo It

I can appreciate the need for professionalism. But no matter how perfect you think the end deliverable may be, or how often it was adjusted at request of project stakeholders, the change was ultimately "a good idea at the time".

Remember though, last week's thoughts were exactly that - last week. Seeing the project implemented may change the whole perspective on things, from every one's point of view.

This article illustrates the situation perfectly:

http://www.joelonsoftware.com/items/2007/09/11.html

How would this situation be addressed in future projects? The obvious answer would be give users frequent reviews as close to the anticipated finished product as possible. No screenshots - but real, usable examples. The pitfalls - continual additions and removals will blow out a project. This is not a bad thing though as long as the client is aware of the additional resources needed to carry out changes. If the quality of the project is higher in the end, it's all worth the extra communication.

You don't want to give a user false expectation, but you also don't want to under deliver. As long as it's properly managed and expectations are addressed - everybody will come out happier.

Tuesday, September 11, 2007

Sortable Lists

Is there a best practice way to order items in a list? By this - I'm not talking alphabetically or date ordered, but user ordered, the way the client wants things to show. More specifically and ideally, I would really like to see a best practice .NET way of doing it. Of course it also has to be easy to implement, and universal across any list of items... in any app we've built.

The way we have been doing it the last 6 years, is we would just add an extra field to the database (e.g. pageOrder), and have the user type in a number. The lower the number, the further it gets put down the list. (SELECT * fron tblPages ORDER BY pageOrder). Too bad if the same number gets entered for 2 records. Too bad if the records are only 1 number apart as well - it usually means the whole list needs re-arranging.

Another problem with the ordering approach is that it always gets forgotten off a spec. The client doesn't notice it until they need it, and when they need it - their argument is usually "I would have thought this an obvious inclusion". As well as this, for the developer it is always an afterthought and a chore to revisit the project to put in an ordering mechanism for 1 list. Then the vicious spiral starts where the client says - "well it's done for this list, but what about these other 5 lists?".

If we had a standard ordering mechanism that could be plugged into any list easily, that was user friendly, it would make me very happy. I am impressed with what I see over at scriptaculous, where their interactive sortable lists are very impressive, but I need it to plug into a ASP.NET datagrid, which doesn't seem quite possible yet.

Saturday, September 08, 2007

Data Challenge - update

The good news is - I got the data up to the website in under 1/2 an hour; 15 minutes if I dont count the process to export it out of the POS system which is out of my control. It just needs transforming now and fitting into the website, which Andrew is going to do while I take a few days off.

Bad news is - the client REALLY wants it - and wanted us to work over the weekend to deliver it sooner. It left a bit of a bitter taste in my mouth since I was up to 2am the night before and 12am the day earlier to get to this point... I was pretty happy with my achievement until the whip cracked. I guess I need to step back and de-personalise a bit once again.

Weekend work is unfortunately not possible for me to do - at least this week. Wifey made me wipe my hands of work at 5.15pm on friday since we both got 5 days striaght off to hang out with each other in an attempt to destress a bit, and she's doing a bit of whip cracking herself to make sure I don't start coding. Actually, I shouldn't even be writing about it....