Blog Feed

Life of Software Development 101

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.

Waterfall Model

Waterfall model diagram illustration from Wikibooks

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.

Agile Model

Agile diagram from Medium by Abdul.

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.

Comparison between Waterfall and Agile model by Visual Paradigm.

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.

Final Thoughts

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.

Image via Mashable

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 🙂

A long time ago in a galaxy far, far away…

Lucas
Lucas by Joey Gannon, on Flickr

That was the blue static text visible on the opening crawl of the first movie of Star Wars, it marked the beginning of an adventure to become one of the biggest franchises of all time. Starting to blog for the first time doesn’t differ too much from an adventure, you don’t really know where to start or how to do it, there’s no exact guide other than some articles on the Internet that can give you some tips, and for someone that doesn’t use social media to share information, it’s something that seems like out of this world.

The reason behind I started this blog is because this semester my teacher asked to do this task (sorry for the call out), and to be honest, this seems kinda weird, I feel like talking to myself because probably nobody is watching this other than me and the teacher (hopefully my classmates too), but also in some way I feel excitement too.

The concept of registering the things you do and share it with others it’s an awesome experience were both reader and writer can learn from, and personally, it feels like an opportunity to grow other than computer nerdy technical skills. The following posts in this blog will show my progress through the course, I will share on these all the topics that cover the course of Analysis and Modeling of Software Systems, and I expect that you can learn something from the information I present.

Just for the record the things I have done lately are:

  • Setup WordPress (duh).
  • Setting up an account for Hypothes.is (seems cool).
  • Understanding how to use Smalltalk (useful link that summarizes the language, more on this in upcoming posts).

I will be marking the course posts with the category of TC2004, if I have time, I will make other posts with other useful information outside of the scope of the course that can be useful for you, so feel free to poke around :).