Hey Dev Team! Embrace Changing requirements

Posted by Rob James | Posted in Innovation, Software, Start Ups | Posted on 29-05-2009-05-2008

0

I know there is a lot of developers kicking and screaming when they see this, but hear me out, as it is important for the success of your project/product and your sanity and the business being happy with you as a developer.

Lets get one thing straight; REQUIREMENTS WILL CHANGE! I cannot stress this enough. What project (beyond the most simplistic) have not had requirements change? If they changed because someone didn’t provide enough details in the first place, or the business forgot something, or the market environment has changed, or a plethora of other reasons; it doesn’t matter. The business isn’t changing requirements to piss you off, they are doing it because one of the above reasons happened and they need to make the change.

Now that you are all angry at the above paragraph, it is time for the good news; a system to make it work!

Firstly, I would hope by now that you are using an Agile process to develop software, and my solution only works if you are doing Agile development. And when I say “my” solution, its not mine at all, but just my way of implementing what Agile tells us to do.

Since you are doing Agile you are using an iterative approach. My personal preference is to take the fixed timeboxed approach versus what Scrum tells us to do which is a variable timeboxed. In a typical fixed timeboxed approach, I generally like my iterations to run for 2 weeks. This is because in the 10 working days we have, this is usually enough to have 1 day at the start to plan the iteration, and get all the story details out, the last day to get the iteration build out (although this should not take the day at all) and 8 days to drill out the dozen or so stories you have prioritised for this iteration.

This iteration release is locked. So when the business says we need to change the requirement, tell them it is not going to happen in this iteration. Whatever the new requirement is, write up the stories, and add it to the backlog and then get the business to re-priorise the backlog for the next release.

There is only 2 times that you should effect what you are delivering for this iteration, and that is when the requirement is not a requirement change at all, but further details about a story you are currently working on that won’t effect the estimate. Ie/ “When creating the login screen, we want the word ‘account’ to be replaced by ‘username’”. But if the requirement is, “We no longer want the user to login with a username, instead they are to use an email address”, this is a “We’ll have to add a new story and prioritise for the next iteration.” In this second scenario, although as a developer, you may write some redundant code to implement a username, don’t worry, all the other stuff is valid (password checks & validation etc), that it would actually be more disruptive to drop this story altogether to start something else.

The other time that a change to requirements can effect a current iteration is when the change is actually making an existing story totally redundant. ie “We no longer want to have a username/password for login, but want to just use Open ID”. In this case, if you are currently half way through the login story which is going to be a total waste of time, its time to drop it and roll back the code that you wrote. BUT, and very big BUT. This doesn’t mean that the new requirement becomes a story for this iteration, it goes into the backlog to be prioritised for the next iteration, or at best, goes in the “unplanned stories” bucket for the current release but is the lowest priority. This is slightly controversial, and that is because you may have planned to deliver 28 points in the current iteration that has a capacity of 30 points, and by dropping the login story, you have saved 5 points and consequently are down to 23 points. That is fine, if we really do save ourselves the points, we’ll get to it at the end. There is a conscious reason for doing this; mainly it is to avoid the knee-jerk reaction to adding new stories. It buys some time for the business to really think through why they are adding this requirement, and secondly, it is a way to apply a “cost” to the business for changing a requirement. I know you are all thinking that we are punishing the business, and although this is not entirely true, it is partially true, because the reality is that changing requirements is extremely disruptive to the current iteration, and its always best to continue with what has been planned.

By applying these rules, you continue to set an expectation of what I called the “heartbeat for the project”. If you are running fortnightly iterations, then everyone expects to lock in the stories during the planning meeting, and they also know that the stories will be delivered in 2 weeks, and this will be consistent. Routine is not only good for babies. It is good for all of us!!

If you have a business that is really unsure that of what they are doing (and this happens, and is quite fair, if they are still brainstorming some of the requirements), you may want to shorten the feedback loop. The feedback loop is the time you have to get working code from an iteration out for QA or the business to test and validate. So you may want to run 1 week iterations. The only thing to take into account, is that you will not be half as productive when you half your iteration cycle. This is because you still need to go through the planning cycle. Although you may be delivering 30 points in 10 days, you will probably only be able to deliver 10 points in 5 days.

But this is a sure fire way to keep yourself and the business sane and happy, by putting in a process that allows changes to occur immediately, and to be implemented in no longer than 2 weeks (or the length of your iteration).

Turn that idea into Reality

Posted by Rob James | Posted in Innovation, Software, Start Ups | Posted on 28-05-2009-05-2008

0

Often we find the challenge of turning an idea into reality quite daunting. And rightly so, its not easy. But the fact is, if you apply a) a process, and b) the discipline, you can get this done.

The discipline is difficult and really up to you, but the process can certainly be challenging, and this is something I can hopefully help with. Before we get into a process (which I am going to keep simple for this first post), there are some principles that you should also keep in mind. If you have ever heard me speak, these are the principles that I always go on about, and here they are in an abridged version;

  • Keep the idea simple, you may have grand plans for it, but what is the simplest thing you can do to get into the wild. I call this your Minimal Success Set. Which is the minimum amount of features that you can apply to your product for it to be called “a product”
  • Don’t worry about problems you don’t have. You will start thinking into the depths of the different challenges you might have, but if they are not holding you up now, don’t worry about them. In fact, this is the best time you don’t have to worry, and you can start building, because you are starting from a fresh slate.
  • Can you operate or support the application when you go live? Think through the details of what happens once you get it into the wild, will there be human processing that will need to occur, even emails that will need to be processed. You need to consider what the impact of this would be. I once worked on a project that required human intervention to process every subscriber’s content on-line. Seemed like a great idea, and the impact was 30 minutes for each account. But when we analysed this, I could only process 16 subscribers per day, but that meant I was just processing subscribers, and the costs were not significant enough to hire someone. So I had to re-engineer this concept real damn quick!

There are many other important principles, but these three are the good ones to consider when starting out. The next step is to have a process; and by the way, the process will help you with your discipline, because you will see a solution to deliver a product.

The below process is based on a more detailed 9 step process (which I am going to publish in the next few days). This subset is a great start. The first 6 stages focus on the areas that a product manager would be concerned about. The last three are more technically driven. All-in-all, this is what I call a top-down or user centric process, which not only works really well, but is also accepted as best practice these days.

Here are the 6 user centric steps in the process, with some detail;

1. Brainstorm to firm up the concept.

You have an idea, now you have to make sure that it is valid. I am assuming that your idea has a commercial benefit, so you therefore need to make sure that it is commercially viable. This is also the time that you want to try and take the steps where you minimise what you are going to deliver, and start doing some thinking about how the customer will interact with your application. Start to answer the questions like; what will this thing do (and NOT do) in the first release? How will it make money? How much of my time will it need after it is launched? What kind of customers do I want, and therefore, what is my product’s personality? Minimise, minimise and minimise again, until you get down to what the absolute basics of the application are.

2. Write a scenario

Earlier this week, I wrote a post on how to write scenarios, they are extremely useful at this stage. They describe your users and the process they would go through on your site in plain English. It is essentially a creative writing piece. You come up with a model for your user, you then describe in a step-by-step format on how the user will accomplish their goal. A scenario models only one path, usually the most common path a user will take. And often can include the intention of multiple users. Don’t omit this step. Scenarios are fun to write, and because they are usually not constrained by technology are generally going to be the best experience that a user can have in the application. When doing the next steps, you always come back and compare it against your scenario.

3. Sketches

Use paper, whiteboards or software tools if you are comfortable with them. Start to sketch out how the screens will work. Try and put as much detail as you can, but also try and minimise as much as you can. Don’t skimp out! It is so easy to say “and after the user clicks the submit, they see a confirmation screen. We don’t need to sketch that – its straight forward!” No its not!!! You are a) leaving yourself open to interpretation and b) not apply consistent behaviour. If you assume that the confirmation screen is just another screen, what purpose is it really providing? Just another screen? What can the user do here? How do they get back? Can we just show the same form with a confirmation message? Can we show a details page with a confirmation message? Could we simplify with Ajax? until you actually do it, you don’t know. Remember, it is easier to screw up a piece of paper than to refactor code, and change application behaviour. This is also a good time to take a friend (you trust) through your application, and get a second opinion.

4. Design

I find the design really important. This is where you start to get a feel for your application, particularly its personality (Something I think is very important). Work on a template design, something that you are going to apply to all your screens, then start working on a couple of screens. Try to use the correct copy instead of Lorem Ipsum. You will start to get a feel for the application. Think about the personality of the application based on who your potential customer will be. If you are targeting a youth market, then is your app look-and-feel ‘youth’ like? Does it come across as a 18-35 year old? Do you envisage the customer and the application having a relationship with each other? Work on the design until you think you have nailed this. Although with style sheets, you can always change the design, getting it as close as possible at first, means that you make lighter work later.

One thing that I will also add here that I like doing, is that I like to make sure that I leave some flexibility in my design. Things like size of titles, colours etc. The reason I do this is twofold; firstly, you just don’t need this detail, and secondly is for psychological reasons. As you go ahead to build and test your application, you are looking at your screens day in and day out. You quickly get bored of them, and start asking yourself the inevitable questions of “did I get this design right? Seems stale now, what can I do to improve it?” By adding the missing design elements, you tend to find that you keep it fresh and stop second guessing yourself. Again, just something I like doing.

5. HTML Screens

OK, once you are happy with the fundamental design, it is time to start building screens. This is where, if you didn’t cut any corners on Step 2, that you will find this to be an easier process. Mainly because you start to identify similar screens. Again, do your best to not cut corners though. Build every screen that you need, as it will make your coding experience much more pleasurable. If you can walk through your scenario using HTML screens, you are doing quite well. And you are half way there.

The interesting thing here is, how far do you take your Ajax at this point? With frameworks such as Rails and Grails, many of the Ajax functions are available out of the box, so you may not want to hand build everything in the HTML. I use grails a lot and what I like to do at times, is when I have taken my HTML screens to the point that I am writing Ajax code, I now start writing the HTML within the Grails framework, which means that I start building the actual Ajax around the framework tools, and also start putting real links without any real logic behind the scenes. This should be pretty straight forward, and again, make lighter work for you in the future.

6. Write the code

This is where you start finishing the project. Notice I say finishing, and in some ways you feel like you have just started? That is because we often get caught in the trap of writing apps from the bottom up; design the database, work out functional code and then the design. But that is wrong. DB admins aren’t the users of your application, its people that are interacting with the UI, so you should take the top down approach. And that is exactly what we did with this process.

Now that we are writing the code, we work out what the actual stories are from our scenario and start writing the code by writing the tests first etc. I am not going to go into what a purist Agile, Test Driven development tirade is, but I think most coders know what best practice is these days, and should strive to get as close as possible to that (even though it is not realistic to do so at times).

So there it is, a process that you can clearly follow. I haven’t gone through the details of how to launch in the market, but that post will come soon. There are so many ways that you could run this process, and find a more optimal way for you to work, but this is what works for me that means I can get a running product much quicker than fumbling over myself.

Writing A Strategy Paper

Posted by Rob James | Posted in Innovation, Start Ups | Posted on 26-05-2009-05-2008

3

When starting a new business. product or venture, many people get caught up on how do they get an idea out of their head and into some format that firstly articulates the idea, and secondly is a format that can be circulated. You hear about business plans, modelsetc etc, but I find that when you start one of these, they get outdated before you even finish writing it. What is useful, is a Strategy Paper.

So what is a strategy paper? It is much like a cross between a short form Business Plan, and an elevator pitch. When you speak to VC’s they will often ask you “Send me a 2 pager”, and this to me, is the strategy paper. It should have enough information to get the idea across, including how you intend to execute and make it into a viable business, but it should also be the elevator pitch in the sense when someone reads it, they get excited and want to know more.

It is important to have one of these for yourself for a number of reasons. Firstly, it is something that you can easily hand out or email when someone wants to know more. But in the first instance it helps you define what you are doing and align everything that you are working on with the original idea. Yesterday I wrote about the significance of having a Scenario. The Scenario is how you determine the functionality that you will deliver, the Strategy Paper is how you define the business.

Write the Strategy Paper in much the same way as the Scenario; early on in the process, while you have the catalyst of the original idea in your head. Losing this vision is a problem most businesses have as time goes on. The Strategy Paper should describe why its a good idea and what the business model is. How is money going to be made, and why is the idea unique?

The areas that you need to focus on are;

  • Overview – What is a summary of the idea in a paragraph
  • Product Mechanics – how does it actually work, focussing on the aspects that are unique and make this idea different
  • Business Model – How is it going to make money, also worth talking about the market here as well
  • Execution – How are you going to get it done and launched

You don’t need to get into details of competitive analysis, SWAT analysis or other details (Although you will probably need this elsewhere to back up your argument when you get to that point). Try to keep it short, 2 pages is perfect, 3 if you have diagrams. 5 pages and you have missed the point.

I roboccasionally re-write Strategy Paper’s from scratch (my bad habit), but you may want to have the Strategy Paper on hand for exactly this reason that you can then update whenever you want to send it out.

This is also a ‘living, breathing’ document. Make sure you read and review it often and go back to it and change and update if need be. Not every day or week, but at least once a month. This will help you on two fronts; 1) am I getting off the point of why I thought this was a great idea in the first place, or 2) has the idea now evolved that what I am really working on needs to be factored into this document?

Finally, don’t spend days it. If you can’t bang this out in a couple of hours, you are having issues somewhere along the line. It almost needs to be a free-flow from your head (initially anyway). As time goes on you will work it and re-work it to get more detail and clarity as well as omitting the irrelevant.

Good Luck!!

Product Development Best Practices: Write a Scenario

Posted by Rob James | Posted in Innovation, Start Ups | Posted on 25-05-2009-05-2008

0

Over the years, I have been involved in many web development projects (web sites and web applications) and teams, and something that we constantly do, but everyone has their own method, is to design or describe the web site as a whole. Some people use wireframes, prototypes, use cases and a whole variety of methods with the main purpose being to communicate the site across.

So I have come up with a method that has treated me well over the years, and I have found it to be the most effective and simplest way to get the message across. Firstly, lets clarify what this ‘message’ is. With lots of people getting involved in the project, you need a way to describe what it is about, particularly from the point of view of the user. Once someone sits through your PowerPoint presentation, wireframes or screenshots you want the audience to say “I get it, I see what you are doing” They may have questions – but the questions should actually clarify that they understood. So here is my method.

I use something that is called a Scenario, and this is not anything unique, but I have a very clear method that works for me. A Scenario is a creative writing piece, written in prose. You are writing a story where the “stage” is your web site. And you are describing the most likely path a user(s) would take in your site. It is the 80/20 rule and we are just focusing on the 80 side. Don’t get distracted by the “what about if this happens?” questions, you will deal with them later. Focus on what you WANT the user to do. A Scenario has three main parts; the overview, character introduction, and the Scenario itself.

The Overview

The overview is really straight forward, and it sets the scene. I like to describe what is going to be demonstrated in the scenario. For example, if I were to write an overview for the popular site digg.com (one of my favorites), I would say something like;

“This scenario will show how Oscar has found a news article that he would like to share, and he posts it on digg.com. Mary then comes along and reads the article that Oscar posted, and votes it up by digging it”.

Now, you will probably put a little more detail than that, but you don’t want the overview to be longer than a paragraph. You will notice a couple of important things here. Firstly, I am only concentrating on the core story I want to tell, I am not mentioning digging down, subscribing etc. You may want to mention these things in the body of the Scenario, but only if it is considered part of the core story. The second thing you will notice is that I have introduced real characters. This is important, don’t use names like User1 and User2, use real names as they help people visualize the scenario. This brings us to the second part of the Scenario.

Character Introduction

In the previous section we named a couple of characters, and now you are going to describe them. In this section, you outline all the characters in you scenario and you talk a little about them. Make sure you don’t have too many Characters; I prefer 2-3 and never more than 5. If you have more than 5, your story is too complex and you should consider breaking your scenario out into multiple scenarios. To carry on with our example above, lets see what Oscar’s introduction might be;

“Oscar is considered a power user of the net. He is a professional in his mid 30’s and spends much of his spare time looking for anything he thinks is exciting on the web. Oscar blogs a fair bit and is on top of technologies such as Twitter and uses his iPhone a lot to communicate with friends”

So in those few sentences we have a pretty good idea of who Oscar is. And we can visualize him and what motivates him. Again, use the 80/20 rule, make sure the character your describing, describes 80% of the users that you think would use the site. There is no point describing Oscar in this way if most of the users of your site are going to be 18 year old high school students. Also, some people like to give their character a “purpose” of what they are doing on the site – I don’t like doing this, as I use a scenario to describe the options, not to be concrete about what this user is going to do.

The Body

This is where we get into the meat of the Scenario. This is where you are going to start telling a story. Now the format you want to follow here only has 2 rules. First rule is that you need to break out your Scenario into parts if there are clear parts (think scenes in a movie). So from the overview above, there are clearly two parts here; Oscar posting his news item and Mary digging it later on. You may want to add parts for becoming a member on the site as well as commenting or other things that you want to describe. But clearly label the parts as “Part 1?, “Part 2? etc.

Second rule is that you want to write the scenario in numbered bullet form. Where every process or series of steps is a bullet. So again, continuing with our example;

PART 1
(some other steps about logging in)
d. Oscar  clicks on the Post Story link. He is taken to a page that describes the process for adding a news story. Oscar pastes the link to the story, provides a title and short description, and clicks on the ‘Post Story’ link.”

Notice that we don’t talk about spell check or other things on this page, as they are just not important yet. You just want to get a clear flow of what the story is, and describe in as much detail as you think is relevant to tell the story. You will find this pretty easy, as you will start to draw a picture in your mind about what this should be and you just describe it

The only thing that you may want to do in the body of the scenario is add the odd comment that is not part of the core story. Try to avoid this, but if you think that it is important to get certain points across – then do. For example, I usually add technical comments here. If there was a payment processing page; “Need to determine if PayPal will be sufficient or need to process Credit Cards directly”. This is perfectly fine and is a place holder for the future.

What to do now?

OK, now that you have the scenario, you should find that this is adequate to circulate to get feedback from parties on the flow and what the expected user experience should be. You will also notice that a few interesting things happen. The first is when you are writing the scenario, you will certainly hit some hurdles. And these are probably because those aspects of the application are not detailed out as yet. And that is fine. The Scenario is a living document that you can constantly update.

I use Agile as my development methodology. So once I am happy with my Scenario, I usually print a copy off and start going through it and scribble “story cards” out. You will find this real easy to do. You will start to see things like; “User Creates new Article Posting” or “User Diggs story by clicking on vote button” etc. These things not only become blatantly obvious, but there is also traceability. Meaning that they are there for a reason, they were in the Scenario, it was not something that was added for the sake of it.

And don’t stop at one scenario, write a scenario for anything that has a user process, even admin functions, it will help you understand and visualize the end result. And it is a low cost way of doing it and anyone can do it with a few simple guidelines.

The Scenario also gives you the opportunity to start detailing out parts of it. In my example Scenario above, the ability to post an article might be quite complex, but in the Scenario it will be a simple overview. But now you can start discussing, arguing, creating wireframes etc to get the detail out.

So think of the Scenario as your application blueprint, the reason why you build the functionality that you do. And it is also a sanity check. You should be able to go back to your Scenario to see how a feature fits. It may fit and you have to rework your scenario (or create a new one), or you might just say “Why the hell are we adding this!?!?”.

Don’t solve problems that you don’t have!

Posted by Rob James | Posted in General News, Software, Start Ups | Posted on 22-05-2009-05-2008

11

Don’t you hate that? When you are working on something, and people start raising problems that we don’t actually have. In traditional projects, this is disguised under the term “risk”.

Raise it, acknowledge it, maybe have one person spend 5 minutes thinking about it, then shelve it.

My mother is a sucker for this when she knows I am coming over for dinner. With my family, there is only a total of 6 of us. But my mother has a tendency to cook for twice as many people. So what is the problem she is trying to solve? Firstly, being of European background, she would be embarrassed if her own son walked out hungry. Secondly, she wants to be prepared if someone else knocks on the door unexpectedly.

But wait a minute! She’s my mum, so she has a pretty good gauge of how much we’ll eat, and in my entire life, I think people have unexpectedly knocked on the door less than half a dozen times. And it would have pretty easy just to whip something up to feed them.

The net effect, is she creates more problems than she actually solves EVERY time she cooks. What to do with the extra food? We are carrying the stuff home in droves, some gets thrown outetc etc.

I have waffled on, but I think you get my point. How many times do I sit in meetings and roll my eyes when you get people start debating about scaling issues, and we haven’t written one line of code or have one customer. WHO CARES!!!

Work on the problems you have, not the ones you don’t have. Why think about scaling issues, when you are only expecting to have less than a hundred customers for the next 6 months? Why think about a licensing server when you haven’t even launched a Beta?

In an engagement with a client some years back, the customer was so hung up on how the product would scale, that they sent a small team to go off and prototype a scalability solution. This piece of work took 3 people 2 weeks. Consequently their findings were implemented into the product and added at least 10% of complexity to writing the product. Here was a product that was yet to have any functionality developed. Ultimately, the product was launched, never succeeded, and never got beyond a handful of customers. The scaling was useless. Instead of using the resources and reducing the complexity to implement richer features that could have led to a more successful product, the time was wasted on code that was redundant.

I am not suggesting that if the team had not done this work and concentrated on the features that it would have been a success, but at least there would be a better chance of success.

Contrast this with another product that I worked on last year, where I debated whether scalability was a problem, and forced the team to just ignore it in the short term. When we finally DID have that problem (which was 12 months later), we basically used an off the shelf product, and 1 week of 2 developers times to implement, andWhoila! We were scaling!!!

So how do you do this? How do you avoid solving problems you don’t have?

Firstly, accept that people are going to raise non-existent problems. Then agree that if it doesn’t matter, the item will be acknowledged and logged. In a meeting, if someone raises a potential issue, first thing you do is ask the question “Is this a problem today?”, if it isn’t, don’t spend more than 5 minutes discussing it, and make sure a scribe logs it. That’s it! let it go!

If anyone objects to this, it is their responsibility to demonstrate why the problem is an issue today. If they fail to do that, move on!

I hope that helps with you non-problem solving. I have talked about the problem of scaling in this article, but there are many examples of this non-existent problem solving, and I would love to hear stories of problems that you may have solved that you never even had!