Sunday, October 18, 2015

Limitations of Software

Software creation is a trade off between time, features and budget. You don’t get all the time in the world. So the clock ticks away towards a deadline. The feature set or scope is what defines the software. You cannot possibly have all use cases. Some of them you may keep and some may either be dropped or postponed for the next release. This promise has been funded by investors/company/individual. So you have a limited budget within which you have to make the agreed upon software feasible. Making software is more of an art than science. You have to have the right tools, methodology and people to achieve success. Of this, the most important is the last one : people. It’s teamwork in the end.

The architecture of software is the very foundation that has to be weighed in correctly. For example, to create software on the cloud, you have to have loosely coupled applications. This simply means that your class/object dependencies with other classes/objects is minor. If say, you are using MVC (Model View Controller) , a type of design pattern for say, your UI (User Interface), a good choice for the Javascript Library would be Angular. (created by Google) Architecture dictates the development environment. What tools to use, what libraries to use and what programming language to use. If your foundation is strong, you will go on to build great software else if your architecture is weak, you may come across challenges.

Another thing that can affect your software development is the methodology that you choose. For example you may use Agile methodology. This is captured in the Agile Manifesto which says, we prefer :

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

There are many different types of this methodology, the most popular being Scrum. There are different actors in this methodology, for example. the product owner (who is responsible for collecting the user stories) , the Scrum Master (Team lead) etc. Agile is very interactive in nature and team work is a hallmark. Nowadays, you hear the term DevOps. This is simply involving Development, Operations , Testing and Stakeholders all owing collective responsibility of the software. Typically, you use some form of Agile development (iterative,  mostly).

Despite using the right tools, right methodology on a strong architecture, we still have software bugs. You see, people are in a hurry to release software. This comprises their quality. The general idea is get out version 1.0 and bugs and change requests can be plugged into the upcoming features. The biggest limitation of software is it’s features. A business has to accommodate itself to this new features. Which means, more so often, software dictates process changes in order for it to be used. Well, this is prevalent in ready made software (both shrink wrapped and cloud versions). There can be new improvements in the next releases. But they either make the software easier to use or make it more difficult.

However, to combat these limitations, most of the software provides:

  1. A parameter list that can be altered. (a limited amount of features over which you have control)
  2. A plugin library. (third party developers can release addons to the software that can make it more powerful)
  3. An API for you to be able to extend the software through programming.

If a software is well balanced, it will have some or all of the features above. But, as said earlier, software development is a trade off. There is no such thing as Software Nirvana. But people working on the same may achieve good insights to take them to the ultimate goal of life – their own emancipation.



No comments: