The Agile Myth

While taking interviews of Rails developers, I often ask this question:
What kind of development process do you follow? and most of the time answer is ‘Agile’. When I ask them a few more questions, there are hardly any credible answers.

This makes me concerned about a lot of development shops across the globe who are struggling between the ‘Real Agile’ and what I call ‘The Agile Myth’. Here are a few ‘Agile Myths’ that I would like to share:

1. Communication will do the job, documentation is not necessary
Wrong. Agile teams lay a lot of stress on communication, but that does not mean that we do not organize ourselves well and write things down which are important. User stories should be detailed well, developer should determine their tasks list for every user story and quality assurance should write descriptive bugs.

2. We will ‘figure that out later on’
I listen to that phrase a lot of times – especially in context of user interface / usability design. Client and development team often ignore user interface during the early phase of development. Development begins without enough planning for the end user, the ultimate audience of the software. And guess what happens, when the time comes to ‘figure it out’, hundreds of lines of code is already written and things get harder to change.

3. Test driven development will slow down development
Quite often, development teams ignore test driven development. A classic excuse is, what if the requirements change and we have to re-write the codes. On the contrary, it is much easier to change things in a test driven environment versus without it. Test driven development improves the quality and speed of delivering software.

4. Using Agile tools will do the job
Not really. Not even the best tools out there will make you agile, UNLESS, you choose to become Agile. Agile thinking is a mindset that should sink into the work-style of the entire team. Agile is more about how you think about your software and less about what you actually do with it!

Agile has turned out to be a great sales pitch for development shops, now it’s time to make it a recipe for success!

Advertisements

Cloud computing and software-as-a-service : the future of Software

Every time you search Google, you take advantage of cloud computing. Many of us use Gmail or other Google applications like Google docs and Google sites. These wonderful applications are a result of Google’s cloud computing infrastructure.

Before I write more about cloud computing, let me provide a perspective on what are web based applications and how they work:

Any program which is used over the internet through a web browser is termed as web application. Most commonly used web applications are Facebook, Google, Yahoo, Twitter etc. According to internet experts, in the next 10 years, 80% software will be used over the web.

A web application functions in a completely different way than your desktop software. With web application, information is processed and stored on the Web Server which runs the application.

When you send request to a Web Server it processes your request and returns appropriate result on your web browser. Therefore, your personal computer is free from the burden of storing and processing information, since all the action happens on the Web Server.

Despite the fact that using web application is fun and extremely productive, it also invites problems such as availability and reliability. With increase in the number of users, the number of requests a Web Server has to process also increases exponentially. If the number of request a server receives, increases than its capacity, it crashes. That’s when we see errors such as ‘Server down’ or ‘Server inaccessible’.

You must be wondering how all this is related to Cloud computing. So let me tell you the story of Google and how they solved similar problems faced by their web application (in this case their search engine).

In late 90’s when Google was gaining huge popularity world-wide, one of the biggest challenges they faced was scaling their Web Server to handle millions of requests. In order to ramp up their capacity, they vociferously installed hundreds and thousands of web servers at various locations across the globe. This capacity built up was done at an investment of millions of dollars. A similar problem was faced by other internet companies like Amazon.com and they did the same with their own infrastructure. With the capacity ramp up, they were able to handle large number of user requests very efficiently.

However, they faced another problem after doing this ramp up. They realized that the processing and storage capacity of these servers were not fully utilized all the time. They discovered that other than peak loads, most of their servers resources were utilized only up to 50%. A large pool of server resources was lying underutilized.

During this period, the concept of Virtualization had started gaining momentum. Virtual Servers are similar to a physical server in terms of performance and availability but the biggest difference is in the fact that a Virtual Server in itself does not posses processing or storage capability; but it utilizes the underlying hardware to store and process the information.

With the advancement in Virtualization technology, companies like Amazon and Google started thinking about their Server as a piece of software that provides necessary resources (like processing power, memory and storage) to run a web application. Instead of web application being directly installed on the physical hardware server, they inserted an intermediate piece of software on the physical servers which would provide processing, storage and memory to the web application. Gradually these companies realized that by using the Virtualization technology, they can combine the processing power of thousands of server into a big Virtual Server which can be used to distribute computing capabilities to a variety of web applications. This was the birth of Cloud computing. Cloud computing allows resources needed by a web application to be virtualized by using an intermediate software layer called Virtual Server.

Here is the web definition of cloud computing on Wikipedia:

“Cloud computing is Internet-based computing, whereby shared resources, software, and information are provided to computers and other devices on demand, as with the electricity grid.”

The use of Cloud computing provided immediate and long lasting benefits to these internet companies. They were able to scale up and scale down server resources much faster without worrying about the underlying hardware. A Virtual server normally uses resources of multiple underlying physical servers. So in case one particular physical hardware is down, the Virtual server can quickly switch over and use resources of other physical server. This allowed for 100% availability and almost zero down time.

With the growth of cloud computing, using software over the internet became more reliable, fast and secure. A lot of innovative companies started serving up web applications by using cloud based servers. Companies like Amazon.com now provide their own cloud computing infrastructure to individuals and business through their service offerings such as Amazon EC2, Amazon S3 and Amazon DB2. These services are very cheap and highly scalable, allowing even a small business to scale and grow their web application rapidly.

By using Cloud computing, many companies are now offering Software-as-a-service over the web. Salesforce.com is one such company which pioneered the use of serving software over the web. Salesforce.com’s flagship on-demand CRM (Customer Relationship Management) is now used by millions of people across the globe. Its annual revenues are to the tune of 1.27 billion US dollars in 2010. The growth of companies like Salesforice.com signifies the growing popularity of Software-as-a-service, which was the result of innovation in cloud computing.

Here is the web definition of Software-as-a-Service on Wikipedia:

Software as a service (SaaS, typically pronounced [sæs]), sometimes referred to as “software on demand,” is software that is deployed over the internet and/or is deployed to run behind a firewall on a local area network or personal computer. With SaaS, a provider licenses an application to customers either as a service on demand, through a subscription, in a “pay-as-you-go” model.

Google’s e-mail service and Google apps are a good example of Software-as-a-Service on cloud. Other popular services utilizing cloud computing is our own e-commerce platform http://www.39shops.com . We are using software-as-a-service and Rackspace cloud computing platform to power thousands of online stores.

Cloud computing and Software-as-a-Service, collectively represents the future of Software. Time is not far when our own desktops will be on the web and accessible from any computer connected to the internet. Possibilities are limitless…limited only by our imagination…

How to determine a compelling value proposition for your business

Every successful business has a compelling value proposition…something which really differentiates itself from it’s competitors. How do you find out the value proposition you offer to your customers? Even if you have not thought about it, it always exists. And when you know how to create it, it can work wonders for your business!

In my recent interaction with R Sriram, he gave an extremely simple method to determine value proposition for any business.

There are 9 possible combinations of a value proposition. Here they are:

  1. More for Less
  2. More for Same
  3. More for More
  4. Less for More
  5. Less for Same
  6. Less for Less
  7. Same for More
  8. Same for Less
  9. Same for Same

Okay…I know this sounds confusing.  I will make it simple in a moment. Let’s put this in perspective…

A street vendor and a chain like Starbucks, both offer coffee to its customer. Each of these vendors have a different value proposition for the same product i.e. Coffee. A street vendor demands less price for the coffee and in turn do not offer ambiance or a great customer experience. On the other hand, Starbucks’ offer a unique experience to every visitor with a great ambiance and courteous staff along with the coffee, so they charge more for the same coffee.  So what do you think each of these businesses’ value propositions are?

Here is the answer…

  • Starbucks value proposition is More for More – It offers not just a Coffee but a whole experience that goes along with drinking coffee
  • Street vendors value proposition is Less for Less – It fulfills only the basic need i.e. coffee

Likewise, think about your business and what value proposition you offer. Try to brainstorm and find out if this value is really what your customers need…if not, you might not be on the right way!

Here are some hints on creating a compelling value proposition:

1. Before you create a value proposition, find out specific customer needs and target customer segment
2. Value proposition consists of both the price and associated benefits you offer to the customers
3. A good Value proposition is often highly targeted and looks very attractive to the prospective customer

Going one step further, Louis Columbus in his article – “Bringing the Value Back Into Value Propositions” writes :-

What truly differentiates one vendor from the next is not the length of its features list — it is the insight needed to effectively sell against substitute systems and processes with proven points of difference in the value they deliver.”

This kind of value proposition is based on the principle of ‘Resonating Focus’. It bring such a value to your customers which resonates with their needs.

So, have fun creating the Value Proposition for your business…and do let me know if you need help…

Agile project management, the key differentiators

Software project management has evolved in the last decade with the introduction of Agile methodologies like Scrum and XP. People often ask me the difference between traditional project management and Agile project management. Here is what I have discovered while managing Agile projects:

The Team leads the project

In Agile project management, it’s not only the project manager, but the entire software development team that leads the project. Client becomes the ‘product owner’ while the development team takes charge of how things get done.  The project manager acts like a guide post, who keeps both client and the development team in sync while keeping an eye on the shipment dates. To be precise, the Agile project manager becomes an ‘Enabler’.

Velocity takes the front seat

This is one of my favorites.  The project manager no longer needs to stick to the gantt charts to get a grasp of project progress. Velocity provides a much more powerful insight into team’s performance. With every iteration, an Agile project manager knows his team’s velocity and can adjust resources for the next iteration accordingly.

Planning is not a one time job

In traditional project management, the project plan is written as if things will work the way they are planned. On the contrary, in Agile project management, planning is much more frequent and lot more realistic. In the beginning of the project, there is story planning; then sprints are planned and in every sprint there are iterations where things get prioritized. Not only the project manager but everyone including the client and development team gets involved in planning.

Agile project management is about dynamic communication

If communication is an art; an Agile project manager has to be the master artist. The communication of an Agile project manager constantly bridges gaps between the client and the development team.  Recent I read this somewhere –  “It is better to over-communicate than not to communicate”. In Agile project management, this is the ‘rule of thumb’.

End value matters, not the end result!

Sounds surprising, but it is true. Agile project management is  focused towards end value rather than the end result. An Agile project manager has no control over the end result because of the fact that Agile projects are adaptive in nature. Nobody can prodict the end result, not even the client.  After all, it is the end value that customer gets that really matters…isn’t it?

Agile project management is a discipline which will evolve a whole new breed of ‘next generation’ project managers who are ready to adopt, learn and lead software projects like truly visionary leaders.

What are your experiences/views on Agile project management?

Web and the art of story telling

Do you love stories?  I think most of us would say yes!

We go and watch a movie.  Most of us enjoy video games, even reading newspaper..it is full of stories…We always love to get engaged in a story, be  it  real or  virtual.

In recent times, a similar phenomena has occurred on the web. Modern web applications are re-defining the way people use software. Many call it ‘Web 2.0’, but to me it is ‘The art of story telling’ .

Recently I bumped in to Mint.com. It is simply amazing how this product catches one’s imagination. There are some great ideas presented in a beautiful way. Being in this business myself, I tend to look at finer aspects of the product rather than the most obvious ones. For instance, a simple interface for recovering lost password is done just the way a story is told. Take a look at the screen-shot below:

Screensot from mint.comThe screen says ‘Let’s get started!’. These words portrays enthusiasm in a relatively difficult situation : ‘someone losing his password’. That’s a fine example of the ‘Art of story telling’. It’s not just about providing a great user experience, but also about ‘being responsible’ for it.  Here are some of my favorites:

  1. Mint.com – Simply awesome tool to manage money
  2. Basecamp – Shows how a web-based collaboration tool can work like your own physical diary (and not like a software).
  3. Groupon – Very exciting and lively, just what  group buying website should be
  4. Pivotal Tracker – Our very own agile collaboration tool…can’t live without it!

There are a few more and its obvious, this is an elite list. So what’s your favorite? Do tell me your ideas on the art of story telling…

Simplicity is the most difficult thing to accomplish

Recently, I read an interesting blog by Jason F. of 37 signals fame on simplicity. He wrote “the dirty little secret about simplicity is that it is most difficult to achieve”. I couldn’t agree more.

I still remember the time when we created about 30 odd variations of User Interface concepts for Ajeva. Each time, when the concept would be ready to be presented to the team, we would discover things which can be further improved or elements which can be eliminated. As we progressed, the process would be more of elimination than adding anything new. The more we thought about making the user interface usable, user friendly, the more we eliminated. We would organize and then re-organize and then again eliminate and then start over….

I do realize now, why many people come to me and appreciate Ajeva and its simplicity. What we finally got an outcome in Ajeva was a very simple and usable user interface which people would find friendly and easy to use.

Now I understand how ‘complex’ the process to attain ‘simplicity’ could be. A considerable amount of focussed thinking goes into making things simple.

Thanks Jason, for putting this up…it really made me look upon my work and appreciate every single interface that was rejected. Simplicity really is the most difficult thing to accomplish.

Whats your experience with simplicity? Do let me know your views, experience and insight.

My Experience with scrum and why it is such a great methodology

Scrum is now a buzzword in Software Development. When I heard about Scrum initially, my natural reaction was :  “oh okay….here comes yet another idea to develop software”.

As I started reading more and more about Scrum, I kind of got addicted to the way it changes the whole paradigm of software development. We got opportunities to implement it for a few clients and so here is a summary of my experience with Scrum:

1. Scrum is Software Development done backwards

Yes! that’s what I really mean. In scrum, the requirements are presented as an end result. For example, “As a guest user, I should be able to sign up”. Now, once the developers are presented with the end result, they start working backwards to achieve that. Everything starts from that point. No wonder why results wouldn’t be great.

2. Scrum focuses on End Business Value

In scrum, user stories are created keeping in mind End Business Value. As a result, client requirements becomes very specific. Since scrum forces to think from an End Business Value perspective, less important items weed out automatically.

3. Scrum is about daily success

In Scrum, practices like stand up meetings, small iterations and frequent feedback allows the team to achieve small goals daily. In no time, these smaller goals sum up into big achievements.

4. Scrum is about measured progress

For many of us in Project Management, when introduced to Scrum initially, we thought it would be a cool way to get away from likes of Gantt Charts and Critial Path, is’nt it? 😉 …Well, thats not the case.  Scrum does have something similar but the good news is that, it’s done very smartly. In Scrum, the project progress is measured in ‘Velocity‘. And since this is the most interesting part of Scrum, I would like to explain it some more:

In Scrum, every User Story entered by a customer is estimated in terms of ‘Story Points‘ by the development team. Story Points is relative estimation of a User Story based on complexity of that story relative to other stories. For Each Sprint (read milestone),  the team takes up User Stories with a goal to complete ‘X’ SPs (story points).  After 1 or 2 Sprints, the team knows how much SP’s it can finish in a given Sprint. The measure of a Team’s efficiency in acheiving software goals is termed as ‘Velocity‘.  Once a team knows it’s Velocity on a Software Development project…it becomes extremely easy to product features and shipment dates.

There is a lot more to Scrum than all this…I would rather let you explore it over the web. Here are some useful resources where I learned by baby steps in Scrum:

You Tube Video

Scrum Estimation at Agile Software Development

I would like know your experience on Scrum. What did you find out about Scrum and what have you learnt?

Wish you Happy Project Management with Scrum!

Choosing the right vendor for your next software development project

Your Business plan is ready, investors are convinced and you are kicking with energy and enthusiasm. And there comes the  task of choosing a software development team. It does get tricky…is’nt it? With multitude of options, it is easy to get carried away and make a wrong choice.  Some immediate questions that can tease you are…

  • Should I choose a freelancer team or an organization?
  • What kind of vendor should I go for, jack of all OR master of one?
  • What is the specific domain knowledge that my vendor needs to know (so I don’t have to waste my time spoon feeding) ?
  • Is the Vendor reliable ?

Inspite of online marketplaces like Elance and Odesk providing a detailed profile, rating and feedback history of vendors, it is imperative to make informed choices rather than purly relying on the numbers. Here are a few points to consider:

Identify the nature of your project

What is the size and nature of your project? If you have a small project with short term objectives, a freelancer would fit the bill. On the other hand, if you have medium to long term project, choosing a company would be the right way to go. While choosing a freelance, there is no guarantee of back up resources or long term availability.

Look for Specialist

As a thumb rule, look for specialist in the technology or domain you are dealing with. Even though a company might have a small team, but if they have already done the job you require, your life will be easier. It is wiser to spend time in searching for the right expert, rather than wasting time working with a wrong one!

Find out work history

The best way to assess a software vendor is to call up their existing clientele and ask them about their experience. Its better not to rely on the feedback of a single client but to call at least 2-3 clients.

Understand processes, talk to people

Try to understand vendor’s approach to software development and also talk to key contacts, possibly someone at the level of  project manager. The quality of process defines the quality of a product. If the vendor has right processes, your software is in safe hands.  Recently, agile methodologies like Scrum and XP have gained popularity. Most of the vendors would TALK about it, but very few implement them well. So be sure you ask the right questions AND to the right person.

Do not get carried away by size

Quality not quantity matters. Do not get deceived by head counts companies mention in their marketing website. Recently I came across a large company whose marketing site boasted of having 40 Rails developers and after reality check it was found there were only 2.

Trust your own findings, not the information

To sum up, rely on your instincts and real findings, rather than what is already presented.

I hope these ideas will do its bit in helping you find the right vendor. You can expect similar blog articles in coming weeks where I will explore deeper into certain specific areas like Agile and Scrum.

Do let me know your ideas/comments and how can I improve this post further.