Software development methodologies & philosophies
Author: Isaac Kuri
Summary
The following post/document contains an essay about topics we have been seeing during the advanced programming course. As unit two just went by, as a rule we have to make an essay to prove and reinforce our knowledge. Henceforth the contents of this document will regard mainly to philosophies and methodologies applied in software development enviroments.
Keywords: Software, Methodologies, Philosophy, Strategy.
Introduction
Have you ever asked yourself, how is it possible to work as a team in software development? Are there any strategies? I have surely asked my self as a future engineer, how ever once you are looking at these questions as a subject of study. Then you realize that in fact there are many ways to handle a software development team.
Many people seem to think that there is a set solution for a problem, but the reality is that all solutions must be adapted in such way that the team is able to work with the solution in the first place and, then attack the problem with the right methods.
That is why over a short span many philosophies and methodologies have sprung, in the advanced programming class we limited ourselves to study the following: Agile software development, Crystal, Kanban, Extreme programming and Scrum. These methodologies follow a set ground of philosophies but also in our delimitations we only took a look into Lean and Agile.
Before going right into the main text, I would like to reinforce that some methodologies are not popular enough to see the light of day, in fact the solution might not lie in any of these and coming up with a hybrid-methodology might be the best answer for the team’s organization.
What I meant from the last paragraph is that you should not be afraid of going out of the box and grab strategies that will in fact enhance the performance of your team. Courage surely is needed in this field of humanities knowledge.
Having this ideology in mind I now recommend you go ahead and read some of my highlights about some of these models and philosophies.
Philosophies
First let’s understand what a philosophy is, according to Cambridge dictionary “A philosophy is also the beliefs you have about how you should behave in particular situations in life”, there are also other definitions, but I think that it is the closest one to our view of the topics, as methodologies reflect behaviors and procedures that are carved in the methods.
Lean
Let’s get to know a bit of lean as quoted from the organization site “The core idea is to maximize customer value while minimizing waste.
A lean organization understands customer value and focuses its key processes to continuously increase it. The ultimate goal is to provide perfect value to the customer through a perfect value creation process that has zero waste.
Eliminating waste along entire value streams, instead of at isolated points, creates processes that need less human effort, less space, less capital, and less time to make products and services at far less costs and with much fewer defects, compared with traditional business systems.”
Lean is like a continues artificial evolution in which only the fittest and most needed individuals and processes are kept for the sake of economy and quality.
The Lean philosophy can also be compared to evolutionary algorithms as families get by with test and error the process gets trained overtime to be perfected to its near maximum potential.
I do think that evolutionary processes are one of our best approaches to dominate problems since they don’t see failure as a hassle but more like signs and areas of opportunity.
Agile
Now going into Agile territory, in contrast to Lean, we have that results have more value than processes themselves, quoted from the Agile Alliance Manifesto “
-Individuals and interactions over processes and tools
-Working software over comprehensive documentation
-Customer collaboration over contract negotiation
-Responding to change over following a plan”
Agile takes schemes and throws them away if needed, that’s why many methodologies are modeled after Agile rather than philosophies like Lean since taking into account problems and difficulties is always a good assumption.
It is important to note that Agile is a set of principles and values it has properties similar to a framework like glossaries, but it is not a framework itself.
I think that companies who value client retention should follow the Agile philosophy because the client can will have a glance at his request as soon as possible.
Software development methodologies
You are now familiar with philosophies but what is a methodology? I myself like to think of it plainly as a set of methods. What is a method? According to Oxford “A particular procedure for accomplishing or approaching something, especially a systematic or established one.”
With all the previous information in mind I now will start to go into the methodologies. I strongly recommend that if any pick your interest to look it up for yourselves since I will only touch the tip of the iceberg.
ASD
Adaptive software development better known as ASD, is a methodology based on the constant changes in circumstances during a project, its main feature are its iterative cycles, which consist of speculate, collaborate and learn.
Speculate, refers to the phase in which the team identifies the problem, their limitations and goals. Each iteration might alter the original goals and the limitations should decrease over time.
Collaborate, in ASD collaboration it the phase in which knowledge flows through the team ensuring that everyone has the same information. Also, development occurs during this phase.
Lastly Learn during the learn phase teams have a record of what they have learned and add feedback. After each learn phase the cycle goes back to the start until the product is ready.
Main advantage: The team learns from their mistakes and starts with a new strategy.
Main disadvantage: Mistakes overlooked by the development team will go thought all the iterations.
Who do I think should use ASD? I think that ASD is best suited for small teams whose objective is to learn about a new topic, and for companies that want to test out a pilot team.
Crystal
Crystal is an agile software development method which its main approach focuses on people and their interactions while working on a project. It’s founder Alistair Cockburn believed that peoples interactions had the most impact in the overall result of the project. Crystal is based on two assumptions; first teams can streamline their processes as their work and become a more optimized team; second projects are unique and dynamic, so they require specific methods.
Since crystal is based on people Alistair decided to create various models based on crystals. They are categorized by colors the darker the color the higher the amount of people.
Other factors that play in the color are Life, Essential Money, Discretionary Money and Comfort.
Some examples of crystals are:
Crystal Clear, appropriated for short-term projects with an ideal size of six people.
Crystal Orange appropriated for mid-term (1-2 years) projects with a size of 10-40 people.
Where do I think Crystal is headed to? I think that for smaller teams there are better options than crystal, since they won’t be working with a big amount of diversity. But in the other hand bigger projects around the Orange category gain a big advantage over the other methodologies since Crystal has a well-established multidisciplinary approach, and many areas of opportunity are covered by it.
Kanban
Kanban is an approach to incremental evolutionary process and systems change for organizations. It’s biggest feature it the way of their process. Kanban offers a limit in work in progress with a focus on work flow.
Kanban manages its work through the use of Kanban Board but in contrast to other backlog-like structures its composed of To do, In progress and Complete.
In Kanban all tasks are written in Kanban Cards, depending on the team there might be many types of Kanban Cards.
Kanban Cards are used to control the work in progress which is limited to a certain amount on cards, this is to relief the stress on the developers and focus on work.
Main advantage: Allows for a controlled workflow.
Main disadvantage: It can lead to bottlenecks in the workflow and delay deployment.
Who is best suited for Kanban? I think that Kanban is best suited for developers that have a strong set goal, also that they are confident on the domain of their knowledge since it’s a not so forgiving methodology since the Kanban Board can lead to bottlenecks.
Extreme programming (XP)
XP is a software developing methodology designed to improve the quality of the software, as any other agile methodology XP aim to provide iterative and frequent releases thought the project. In contrast to other methodologies XP principles values the exhaustive documentation of the project which is its biggest feature.
XP is based in 5 values: communication, simplicity, feedback, courage, respect.
I want to emphasize on courage since I think its one of the main characteristics of XP, programmers really need courage to face the project, once we are confronted with an issue we shouldn’t backdown at the first misstep, looking back at our mistakes is what makes us humans.
Just so you know XP is role based. The original proposal from its founder Kent Beck, composed of Programmer, Client and Test Manager.
Lastly the life cycle of XP which consist of Exploration, Delivery Planning(release), Iterations, Production, Maintenance and Project Death.
Main advantage: Highly organized, well documented methodology.
Main disadvantage: It requires dedication from the team, to learn the principles of XP.
Is XP for any project? No, I believe that XP has place in projects that depend on a strong documentation because of its longevity, difficulty or rotation of people. In those cases, a strong documentation would come handy to keep the project going.
Scrum
Scrum itself is a simple framework for effective team collaboration on complex products. Scrum its one of the most famous methodologies and has been very well documented in The Guide written by Scrum co-creators Ken Schwaber and Jeff Sutherland.
Scrum biggest strength are its glossary, events and roles that basically make the framework so powerful.
The glossary is a set of terms used in any framework to identify certain events, roles or objects. I would say that the most important word to understand within the Scrum Glossary is the backlog and the backlog-sprint but before explaining the concept of the backlog we must briefly explain the roles and events.
Scrum has three roles the Project Owner, who is the one putting the vision and the money; the Scrum Masters, whose work is to communicate the dev-team with the Project Owner to ensure that work is being done and goals are being set and done; And the development team which is in charge of coding, and solving the various task given by the project owner.
Scrum has a set of events first, the Sprint it’s the way Scrum measures an increment (End of a Sprint-Backlog) lasting around 3-5 weeks, in each sprint a set of goals is added to the backlog during the second event the Sprint Planning; The backlog is a set of task that the team needs to develop and are set defined at the start of each sprint the team chooses a set of task called Sprint-Backlog to work on; Third we have the Daily Scrums that server as a short 15min meeting with the Scrum Master, to know how the team is doing, problems etc.; Fourth the Sprint Review in which the Scrum Team double checks the work done before publishing; And fifth the Sprint Retrospective in which the team gets feedback from the Project Owner and the Scrum Master.
Main advantage: Scrum delivers a functional product in each increment.
Main disadvantage: If any team member leaves the project suffers a lot.
Who is Scrum for? I think that Scrum is made for projects that don’t compromise its users nor the client like webpages and web-apps that can be incremented little by little; in contrast to a bank account application that can lead to big loses.
Conclusion
First, I want to emphasize de having a clear philosophy is of higher importance than following a methodology. I dare to say these because many teams and organizations lose their essence and the employees suffer from bad practices because of that, it hurts production, it hurts the final product as it loses the vision from the very beginning.
But if the philosophy is clear I think then you can choose a model based on your philosophy, one that matches the values of your philosophy, also that everyone in your team will be devoted to because in many cases what one person wants its not the same as the rest and that can lead to internal conflict with in the team.
Personally, the two methodologies which I could devote myself to are Kanban and Scrum, because they have levels of organization and set goals, I like the fact that Scrum has a framework to gain a glossary from; a glossary makes team communication much easier and fluidly. But regarding the backlog I think that Kanban has a superior one because the control of the workflow. It is made in such a way that the person doesn’t feel overwhelmed by the work. But regarding roles I would much prefer Scrum since I think that a head is needed to maintain objectives throughout the team members. And the last reason is that they are all incremental and progress can be seen from the very beginning.
As for my final position I think that there’s no set strategy or methodology for each project but using ones that have proven to work in the past doesn’t make any harm. As they say you don’t need to reinvent the wheel, just add to the wheel as you see fit and I think that following this mentality will lead to success.
Bibliography
https://dictionary.cambridge.org/us/dictionary/english/philosophy
https://www.lean.org/WhatsLean/
https://en.wikipedia.org/wiki/Evolutionary_algorithm
https://www.agilealliance.org/agile101/the-agile-manifesto/
https://activecollab.com/blog/project-management/crystal-methods
https://en.oxforddictionaries.com/definition/method