My current client is currently thinking about starting a new project. This got me thinking about some of the things we need to consider when starting up something new.
What is the problem?
The first, and one of the most important questions, is what is the actual problem that we are trying to solve? By answering this question, the team will know what we need to focus on and what the "guiding principles" for the project are.
On a related note, we also need to ensure that the problem that we are trying to solve is something that the customer actually has a need for. I have seen many projects, where the business thinks that they know what their customers want, when in actual fact this isn't the case, which leads me to the next point.
Often the development team will be four or five levels removed from their actual customer. What we need to do is to remove those boundaries and allow the the team to talk to them directly, as the will lead to a better suited application that they actually want. I understand that this may not always be possible, and if it is the case then my suggestion would be to rapidly prototype a few solutions that the team has come up with and test to see which one works best. In either situation, quickly iterating and getting feedback will be invaluable in the long run.
We are a Team
Typically I have seen the discussions about a new project happen mainly between a few select members of the team. They come up with all the solutions and deliver it to the team to implement. I have been in this situation before and I can tell you it sucks! You want to be able to provide input, to understand the problems & decisions that were made and feel part of a team. In addition, the more minds you have on a problem, the better the outcome.
Below are somethings that I would suggest to do so you can get more input from everyone and identify potential issues before they become major issues.
Give everyone a stack of sticky notes and ask them to come up with various versions of a potential customer. For example, I may say that in my scenario I have my mom checking into a hotel, but has zero knowledge on how to use a smart phone app, or technology in general. Other people may come up with scenarios like a family of four with two newborn babies. Whatever the scenarios, you can role play through them and see what issues you may run into. One thing to remember is to make sure that everyone has the opportunity to speak and that no one is talking over everyone else.
One thing I also find effective is to state the problem to the team and give them a few minutes to come up how they would solve the problem. You will be surprised at some of the great ideas that can flow from this. Allow the team to brainstorm the ideas. Put them up on sticky notes on the wall and see what direction it takes you.
If you have an existing system and are trying to improve it, allow the team to run through the actual scenario in real life and in that way they can see where the issues are and how it can be improved. An example of this that I like is that of Scott Guthrie, who is VP of Cloud & Services at Microsoft. When he took over the running of Azure, he gave his whole team a bunch of credit cards and told them to sign up for an Azure account and get a website running. In doing this, the people saw how complex the process was and then started to brainstorm how to make is simpler.
To end off this post I would just like to remind you to keep the solution simple. I have seen many a solution where things were created in order to cater for numerous possibilities, only to convolute the code. Lastly, always remember to focus providing value to the customer. If you do this, the money will come.
Until next time...keep learning!