“ The wits on the planet are constant, but the population increases.”
Nowadays hundreds of companies offer software development services. You may see the following catchy headlines here and there:
- 10 years of experience
- 1000+ completed projects
One might assume that there are lots of experienced developers who can create top-notch software products. Unfortunately, that’s not at all true.
From now on we will be talking about long-lasting projects/products in this article. Building software – is not so easy as it may seem. The misleading impression that coding is easy makes people think that everything is changeable and flexible. In the real world, it doesn’t work like that. The visible simplicity usually hides internal complex interdependency and algorithms.
The wrong approach to software development is like fighting a Hydra:
- you cut off the head (fix the bug)
- a new head appears (one or more mistakes are found in your software)
And that can go on endlessly.
Poorly designed software with complex logic can bring about financial disasters and even lead to ruining the business.
How to avoid that?
The simple answer is:
- Unit testing, and
- Continuous delivery (an iterative multi-stage process of making regular releases of a product with a set of changes introduced every time)
A more extended answer is: there are actually some principles and best practices of software development that cannot be ignored without causing all sorts of problems with your project. We want to briefly go over the major pillars of the development process and explain their importance.
Brainstorming. Before you get your hands dirty with actual development, you need to have an idea. A very specific and clearly articulated idea. At this stage, you also want to think how this idea translates into a marketable product, what alternatives are out there, and how what you envision is different and more appealing. Sure enough, your idea will undergo multiple transformations, additions, and refinements so that you might end up with something entirely distinct from the initial intention. Anyway, you should keep track of these changes in writing to be able to refer to the latest version of your “view of the world” on the subsequent stages.
Formalized design document. At this step, you convert the idea you came up with in the previous step into a list of forms, features, functionalities, etc. The more specific you are, the fewer chances you have of deviating from the goal and losing focus. Specific guidelines for writing this document can be easily found on the web, but are outside the scope of this article.
Prototyping. A prototype is your future product naked – meaning it’s the most minimalistic, yet fully functional, the realization of the product. If it’s a fitness tracking application, it should be able to perform all necessary measurements, such as, for example, counting steps, measuring heartbeat, calculating average speed, etc. It is perfectly reasonable for a prototype to change often – you came up with an additional feature, or figured out the way to implement an existing feature more efficiently – you tweak the prototype to reflect these novelties. And the last thing you should worry about in the prototype is its prettiness – it can be virtually non-existent, as prototype focuses purely on the functional side of your product.
Testing. This is one of those steps that can be run over and over again, and you will never have enough. Bugs and inefficiencies are inevitable, but more severe ones can be eliminated or alleviated once they are detected. Do your best to try and break your product before it goes live (and after it’s out into the world as well) – run automated tests to check regular cases, and use manual testing to test unusual, weird, crazy, impossible, and stupid scenarios. You never know…
Finalizing. There will hardly ever be a moment when you decide to leave your product intact (“I’ve had enough of it!”). So, finalizing, in this case, applies to each release that is going to “hit the shelves”. This is when the design aspect can no longer be ignored but has to become one of the top priorities – this is what people will see first. User experience is also critical – making the interface intuitive, logical, and engaging in an art (the art that is responsible for most of Apple’s sales dollars).
Distributing. You do not develop software for yourself (most of the time) – most of all you want people to enjoy it, see its benefits, and, ideally, pay for it. But first, they have to find it. You may rely on popular software portals to house your product and promote it on their network. Alternatively, you can create a dedicated website presenting your product, allowing downloads, and accept payments. If your software tool is supposed to be free, you can submit it to Github (an open-source project where you can upload the source code of your product, and other members of the community can make use of it in any way they want – fix, improve, or simply use it). If you are developing an online service, you do not need to store the installation package somewhere for others to access – you simply need a website (which will in effect be your service) that people can google and navigate to.
The approach discussed above allows you to build software as complex as Amazon that introduces more than 20,000 changes to the code a day without fear of failure. If Amazon software breaks down, they will get notifications on that and immediately rollback to the previous stable version of the software automatically. To achieve this level of responsiveness and agility, one has to have the code monitoring and analytics in place. This allows to keep an eye on what is going on “inside” the software and take action if necessary.
If you feel like you need guidance for your project or you have ambitious plans you cannot realize yourself in an efficient way – contact us and we will be glad to help you organize the right software development process and invest all of our vast professional experience into its success.