Software development can be a hard task, if you are thinking about creating some long term piece of software like Windows, or a short term software like your course final project, you want to be efficient and be able to deliver results, but, what steps do you have to follow?, Is there a concrete map of things you have to do?, in fact, there are many to choose from, they are called “life cycles of software development”, and we are going to talk about some of the two most popular approaches that I know quite well and differ quite a bit between each other: Waterfall and Agile models.
It was published for the first time by Dr. Winston W. Royce, being to this date one of the oldest models developed and inspired the creation of many more. It’s pretty straight forward, we have several stages to develop our software, but we have to work with one at the time before proceeding with the next one until everything is completely done. The steps done varies since there are different approaches, but the work that is done can be summarized as follows:
- Requirements: What does the user or client wants? A list of things that the software must have and consider.
- Design: Which approach or framework is going to be used to do the implementation?
- Implementation: Creating and following a strategy to work towards the goals and coding.
- Verification: Making sure everything makes works as expected and that the requirements are fulfilled and code testing.
- Maintenance: Fix bugs, security issues and do enhancements based on the feedback or data gathered.
Sadly, as you can tell, it’s very inflexible because of the limitation of not advancing to the next stage until the one before is finished, so if a mistake is done, it can result in a massive lose of time. On the other hand, because of it’s simplicity, it’s really easy to manage and it works on some projects were the solution has to be in the very first try, e.g. medical equipment, sending astronauts to the moon, etc.
You can find quick and good reads about the opinion of developers about the waterfall model, like this one by Jeff Atwood posted is his blog Coding Horror on why they are not being used so much anymore.
On the current environment of development, we have a ton of changes that happen nearly everyday, we know them as updates, people love and hate them, we are exited to have the newest features and bug fixes of software we have installed, but we do not like when you are on the middle of some online game match and out of nowhere Windows decides to update. We need to have some way to develop through many iterations, and that’s when Agile comes into play.
The way it works it’s by dividing the project into small chunks of work, making them more manageable, allowing for short deadlines and easier development since you don’t need months of preparation. Keep in mind, that the steps can change depending the Agile method you using, there are many, some examples are Extreme Programming and Scrum.
This model allows close interactions and communication with the customer to make changes from the continuous inputs they gave (like the ratings from your phone’s app store), providing a way to adapt to the wild environment of constant changing demands from clients, and it’s very flexible to make changes during each iteration compared to the Waterfall model.
If you want to learn more information about this methodology, there’s a lot you can read from the Agile Alliance webpage, my recommendation is to read their manifesto and 12 principles.
One of the things that I was struggling with when creating this post was: “which and how many life cycles do I write about?“. There are many popular, and it would be tired and boring to write about all of them, of course, a lot of them are useful, but from my perspective, it depends on the work you are doing, I just showcase two of them to get some starting point to a world of no correct answers. I cannot state what is the best of the two models I talked about or the other ones that exist, because it depends on the context and what you need at the time, likewise, if a perfect model existed, I don’t think people would still create articles like “this X model sucks!” (although is the Internet, who knows).
My recommendation to you is to choose whatever is best for you, read more about the other ones that are available, there a lot of articles that talk about other models that you can learn from, or you can read more about the other Agile methods, or just create your own cycle that works the best with the environment you work on. But remember, no matter what you plan, there are going to be obstacles and challenges that you need to face.
I really like the illustration above, it really shows how the real world works, and it can easily translate to software development. From my pasts experiences, I can tell you that no matter how well you prepare, there’s going to be something that fails because of internal or external reasons. There’s no secret formula to avoid these mistakes, the best thing you have to do is to prepare and act fast when this happens, and also don’t feel bad, I ensure you that it happens to the best people in every industry, just learn what you can from the mistakes 🙂