Requirement
As the term says, it is what is required, what is desired to be done. For example, a customer needs an online chat app and looks for a development company to implement it. At this stage, it is set what the application should fulfill, which the functionalities main, what will be the end users, possible restrictions (as for example, in this case, that there should be no delays in sending messages).
All this is agreed between the client and the company, and can be from something more informal as a conversation, to a Requirements Document (example).
That stage is extremely important, since, if the customer says he wants one thing and the development team understands another, it will be as if the customer requests a screwdriver and ends up receiving a hammer. It may sound stupid but it really happens, because many times not even the client knows exactly what he wants, and then when the project is almost ready can see and say "oops, but I didn’t want any of this, do it again". And nobody wants that, right?
This famous image portrays the idea a little:
Analyzing
Possession of the established requirements, the team analyzes what should be done and the focus now becomes as will be done:
- what the application flows will be?
- which developers will be responsible for which part?
- what functionality should be developed before?
- How long should certain functionality take to be implemented? (estimate)
and so on
Just like the requirements, it’s important that everyone understands what must be done and now, how it should be done, So you also have a document or some other form of communication that makes that clear to the whole team. This prevents, for example, two developers from taking the same thing to implement. A very famous and important (and easily understandable) concept in Software Engineering is commonly expressed by the graph below:
Which means "the longer it takes to change something, the more expensive it will cost". To understand this just think about how much it costs to keep a team working on something, for after a while you arrive and "oops, we’ll have to throw it away and do it again". Having to pay salary again and other costs involved, which could be being employed in other projects.
Design
Defining the issues most related to project management, it is time to think about which technologies will be used, such as programming language, which platform the program will be used on (Windows, Linux, Android, multiplatform). In addition, the main structures and routines of the program can be defined, such as the creation of a certain table in the database, a function to log in with Facebook etc.
Implementation
Finally it’s time to get down to business, the time when the structures and routines mentioned above should be implemented, that the functionalities described at a high level should actually be translated into the code.
Testing
After implementation, it is not guaranteed that the product is 100% OK, working properly, without any problem. In fact, it’s practically impossible not to have none bug. The more complex the system, the harder it is to ensure and the harder it is to identify as well.
This is where the tests come in: they are an attempt to search for possible problems, exhaustively (as much as possible), until a minimum of reliability can be guaranteed to the customer (of course this reliability depends a lot on the type of product). There are many types and techniques of Testing, and this has become an important sub-area of Software Engineering. There are people within the team who specialize in testing software. I won’t go into details but the image gives an idea (who is interested just search by the terms).
Integration
It is the moment when the product produced is delivered to the customer and is put into production, actually running. In our example, it’s like when the app is published in the Play Store and released. At that moment there may be problems, as the famous "in my machine works" but in the customer’s. And then this is being adjusted.
It’s not all flowers...
Maintenance
I would like to add the maintenance step that was not mentioned but is a constant in any project. As it is difficult to define all possible problems with the tests, it is possible that the product is delivered and then problems arise that must be fixed, or even a possible improvement can be implemented. It is worth looking again at the graph of change cost x time above: fixing something in a maintenance is much more expensive than solving the problem before.
Finally, this cascade system has problems because it is more plastered, it was used a lot in the past, but today it uses more and more agile methodologies like Scrum, in which these steps are more flexible and not strictly linear.
Simple and practical response, addressing all necessary. + 1 :)
– Luiz Felipe