In the last post I talked about why making things simpler make more sense. I provided a reference from one of the book that I liked as well.
I have worked in software industry for around eleven years as developer of large scale application and consultant with various multinational companies. I am quite in agreement with the proponent of simpler and easier software development.
There are absolute reasons for an entrepreneur to decide on the scope of the project based on his own capability and of his team . A well designed simplified scope can help the entrepreneur to ship things out early as mentioned by Seth Godin.
By shipping early,however I do not mean to ship in hurry and with errors. When the scope of the project is limited and the boundaries are known, it is possible to have small changes to development without affecting the overall timeline and cost of the project.
Here are some of the reasons why I think doing things simple and shipping them fast should be the chosen method.
- Keeping the things simple means keeping the cost down
- Cost of hiring more employees
- Cost of performing testing
- Cost of complexity
- It helps to avoid inordinate delays
- Expertise is needed for maintenance and operation
- More complex application means larger shipping time
- More TCO for the customer
- A please all application is not possible
The lesser number of features you provide in your application, the lesser would be your costs. These costs include
The cost of complexity can be very high especially during maintaining the software, while releasing patches and performing upgrades.
If you have not decided on the scope of your project or if the scope is very large and complex, be aware that delays are going to happen . Sometimes the requirements are complicated enough and hence creating a complex application may be necessary. The outcome of higher complexity however is more failure than success. If we consider software as a machine and if a new part is to be introduced the machine then the other parts will probably need to be adjusted. The more the number of parts of machine the higher the failure. With better design it is possible to minimize these failures but better design takes a lot of time.
In conclusion, complex machines/software are difficult to design , more prone to failure and delays.
A more complex software requires higher maintenance to run smoothly. The complex applications that talk to each other sometime stop talking for a very small reason. Experts who understand the intricacies of the system need to be hired. Hence the customer that buys the software ends up paying huge costs for expertise.
If your company has the luxury to be the first in the market, you can afford some slack but when you are competing neck to neck with your competitors, it is good idea to start capturing the market by starting early and shipping fast.
TCO(definition) means total cost of ownership. It is calculated by adding all the cost of running an application. It includes training cost as well. In my experience, it is easier to learn applications which have less features. It is quite costly to train the workforce when the application is complex. Not only the training but also the support after training till the end users are comfortable is high as well
I have seen companies that have tried to incorporate multi-industry practices into one so called giant software that caters to all needs. In the long run however the expectation of customers in various industries vary so much that it is not possible to meet all of them without bloating the software.
All these factors assume giant proportions when numbers of application user increase with time. Complicated applications takes more proportional resources to handle than a simpler one.
So what exactly is the answer that balances the complicated business scenarios with the simplicity required in application development. I have some examples.
WordPress in its basic version does what a basic CMS is required to do. But does it do everything you want it to? No. Why? because of the simple reason that it cannot cater to all the requirements of its users. To do that it has provided features called as plugins, hooks , widgets, themes etc. You can integrate your additional functionality using these features. Does it affect your basic wordpress feature ? No. Will your blog be affected when you remove these features? Not much.
Another example is Firefox, which provides add-ons to add to the existing functionality.
I donot say that applications can always be simple but just that approach to application development should be to develop simpler applications.
So let us summarize.
- Complicated applications increase all the costs associated with them
- They are difficult to manage
- Complicated applications creates more confusion and increase end user training cost
In the end watch a video that inspired me to write this post.