The evolution of the software and software industry has been remarkable over the years. From the mid 1900's when the first electronic computer originated to today where we have control over almost anything at the tips of our fingers, this journey has completely changed the world we live in. The journey, which began with IBM's first mainframe computer to Apple's iPhone to Artificial Intelligent machines, shows how technology is a perfect blend of great ideas and innovation. The goal was to achieve more sophistication and provide a better user experience. Along with this technical advancement, there were various software development methodologies and practices that evolved to bring in more sophistication. Today in this article, we take a look at one such evolutionary methodology called Agile that changed the way software is created.
Before we deep dive into learning Agile and see how Cazton consulting can work with on various successful Agile practices, let's take a brief look at the Software Development Lifecycle (SDLC) and other methodologies that were in practice before Agile was even formed.
Software Development Lifecycle (SDLC) is a conceptual model that represents different phases in which a software evolves. The system goes through distinct phases, starting from gather requirements or understanding deficiencies in an existing application to designing, building and testing the software product, and finally, delivering and maintaining it. This entire process brings forward different methodologies and practices that are many times combined together to build the highest quality software. This graphic represents those different phases that a software goes through:
When the methodologies and practices of SDLC are followed and implemented correctly, they provide the highest level of management control and help produce high quality software. It brings together all the teams that work together on a particular software and helps them achieve a common goal. Next, let's take a look at the different methodologies that have evolved in the software industry.
The general definition of the word methodology is a system of methods used in a particular area of study or activity. When this word is used with software development, it indicates the different ways or methods being used and implemented to build a successful software. The software development team which may include developers, architects, project and program managers must choose which software development method works best for the project at hand. To date, numerous methodologies have evolved which are used for different reasons and solve different problems. The most common factor behind following any software development methodology is to overcome past mistakes and build the most successful software product possible.
Waterfall Development Methodology is the traditional approach for implementing the software development process. This process contains various phases, which are accomplished in a linear direction. Typically, this methodology consists of five to six phases: requirements gathering and analysis, designing the software (setting up the environment, designing the architecture, etc.), developing the application (actual coding), testing the application (unit tests, system integration tests) and finally deploying & maintaining the software product.
Each phase has to be 100% complete before moving on to the next phase. It does not allow the team to go back and make changes to a process which has already been finished. Such implementation makes this process very rigid and this rigid nature makes the entire development process slow and costly and does not allow the development team to work on new requirements until the entire cycle is finished.
To tackle the issues found in Waterfall development methodology, a new method was originated called the Spiral Development Methodology. This methodology is the combination of both iterative and incremental model implementation where more emphasis is given to risk analysis. The phases as shown in the above diagram is repetitively passed through in multiple iterations. The planning phase being at the core includes gathering, analyzing and understanding system requirements and constantly communicating with the client. Next is the risk analysis phase where a particular solution and its prototype is created and risk analysis is done on that solution. Any risk found in that solution results in creating an alternate solution. The engineering phase is where actual software development and testing work takes place, based upon the planning and risk analysis phase. Finally, at the end, the feature or entire product goes through an evaluation phase where customer feedback is taken.
Any changes or improvements needed will start the spiral process again. The issues with this method is that the entire development process can be very costly, making it a bad option for a small or low budget project. Any failure or mistakes in risk analysis can fail the entire spiral sprint.
Unlike Waterfall and Spiral methodologies, RAD model is based on iterative and prototyping design model. It focuses on creating prototypes, which are equivalent to components of a final product. Because of these small prototypes, a team can get quick reviews of what is being built and any feedback or changes in the requirement can be quickly addressed. RAD model allows developers to quickly adjust to changing requirements. RAD methodology is divided into four phases(Requirements Planning, User Design, Construction, and Deployment) The user design and construction phases are repeated until the user approves that all requirements are met. The issues with RAD method is that it requires highly skilled developers/designers and depends on modeling skills. This method is inapplicable for cheaper projects as cost of modeling and automated code generation is very high.
When we hear the term Agile Software Development or hear someone saying that they follow the Agile process in their company, many people tend to think of Agile as being some kind of a methodology. Well, that isn't correct! Agile is actually a set of values and principles that give people a common foundation for making decisions about the best way to develop software. It isn't a methodology itself, but an umbrella term used for several methodologies like Scrum, Kanban, Crystal Methods, Lean Development, Extreme Programming (XP), Dynamic Systems Development Model (DSDM), Feature Driven Development (FDD) and Joint Application Development (JAD).
The Agile Manifesto was created in the year 2001 where many great scholars and creators of Scrum, XP, Lean, FDD and several other great thought leaders met and established a common set of values and principles for all of the individual agile methodologies listed above. There are twelve principles and four core values, which each of the above-mentioned methodologies deal with in a slightly different way. All of these methodologies have specific processes and practices that promote one or more of these values.
Agile focuses on delivering individual features of the software in an iterative fashion rather than delivering the entire application all at once. Following Agile principles requires a big cultural change. It brings people from both technical and business or functional teams together so that everyone is aware of the current development process. Where technology is always considered to be the most important factor for creating a successful software, Agile recommends collaboration and communication to be considered equally important. As the software product develops, therey are is a high likelihood of requirements changing. The Agile process focuses on quick responses to change and continuous development.
Now that we have learned what Agile is and how it is different from other software development methodologies, let’s take a brief look at those methodologies that follow Agile principles and values:
Scrum is one of the most popular methodologies for implementing Agile. It promotes iterative development of the software product. These iterations are called Sprints. Each Sprint basically lasts for 1-4 weeks and forces the development team to focus and deliver a fully tested and workable piece of software by the end of that sprint. If the goal in a sprint is not achieved, then the remaining work is pushed to the next Sprint. It’s quite common for unforeseen events to delay progress in a sprint; however , it’s not necessarily an indicator of the productivity of the development team. In fact, the only thing that this indicates is a more realistic timeline for achieving the desired outcome of that sprint. It usually takes a few sprints for the team to come up with a more predictable and accurate velocity. Sprints encourage faster development and constant communication between the Scrum team. A Scrum team involves the Product Owner, Scrum Master and Development Team. There are specific events that occur when implementing Scrum:
Scrum Methodology is straight-forward as it values and encourages principles like courage, focus, commitment, respect, and openness. It encourages a faster and shortened development process where the Scrum team focuses on delivering a fully tested, workable and bug-free software product.
Kanban is also one of the most popular software development methodologies adopted by Agile teams. Unlike Scrum, Kanban is less structured, but focuses on incremental development. It isn't a framework, but a model that introduces Kanban Boards and Kanban Cards.
A Kanban Board can be an actual physical pin board, which is used to visualize a workflow. It helps to visually track the status and progress of the development process. A Kanban board shows which team or team member is working on which task, thus enabling easy access to everyone involved in the project. It improves communication between the teams and helps them focus and clear bottlenecks as well as deliver software product in interactive cycle.
Kanban boards hold Kanban cards where each card represents a specific work/task. It gives clear information about which team member is going to handle which card, or in other words, which team is going to handle a specific task. Kanban is really flexible and can even be used by teams following Scrum methodologies. The main advantages of Kanban are to visualize workflow, increase openness and communication between teams, enhance development flexibility, shorten development lifecycle.
Following the Kanban methodology enables organizations to improve their software development process and adopt agile values and principles without having to undergo substantial cultural change.
Crystal methodologies are considered to follow the Agile values and principles. Crystal methodology is lightweight and primarily focuses on people or team members and promotes creating development plans and models based upon team requirements. It gives more importance to people and communications as its organizing principle and most of the properties and techniques are based on strengthening that process.
The Crystal family of methodologies consists of the following variants: Crystal Clear, Crystal Yellow, Crystal Orange, Crystal Orange Web, Crystal Red, Crystal Maroon, Crystal Diamond and Crystal Sapphire. Each of these crystal methods are used in different conditions. In a nutshell, the Crystal approach focuses on iterative and incremental development approach, active user involvement and continuous/incremental product delivery.
Like Scrum and Kanban, Extreme Programming has also been one of the most popular methodologies that follows Agile principles. It focuses on delivering a high-quality software in continuous intervals as well as improving quality of life for the development team. It promotes high customer involvement, rapid feedback loops, continuous testing and planning, and close teamwork to deliver working software at frequent intervals.
The five values of XP are communication, simplicity, feedback, courage, and respect. It follows various sets of development practices, which have changed over the years and they are: pair programming, TDD, refactoring, continuous integration, collective code ownership, coding standards, metaphor, sustainable pace, customer acceptance tests, simple design and smaller releases. These engineering practices are used by development teams to be more effective and produce higher quality code.
FDD focuses on delivering tangible, working software repeatedly in a timely manner. It consists of five basic activities, which are building feature list, planning the features, designing the features, building the features and development of the entire project model. It promotes development in feature-based iterations. While planning the features of the software project, a timeframe is set to finish that particular feature. Usually the period is around 2-3 weeks. And any feature that takes more than that timeframe is broken down into sub features. FDD proposes continuous, smaller and faster project development and involves continuous deployment and communication between team members and stakeholders.
Lean methodology is a set of principles for achieving quality, speed & customer alignment. And one of the most important purposes of introducing Lean methodology is to reduce or eliminate non-value-added activities, thus increasing value to the customer. Eliminating non-value-added activities means eliminating useless meetings, tasks and documentation. It encourages teams to deliver fast by managing flow, limiting the amount of work-in-process to reduce context switching and improve focus.
The Lean principle of Defer Commitment says that Lean organizations should function as just-in-time systems, waiting until the last possible moment to make decisions. This gives organizations the agility to make informed decisions, with the most relevant, up-to-date information available. Some of the basic principles of LEAN development includes iterative development, short feedback loops, disciplined project management, waste elimination, faster delivery and deferred commitments.
Software Development is an art. And to be really good at that art, requires special skills, passion, aptitude and experience. We tend to use Agile, but don’t favor one methodology over another since they are all different and beneficial depending on the nature of the project and the team.
Given our experience working with clients that are usually large corporations and sometimes mid-size as well as start-ups, we are uniquely qualified to use the wealth and breadth of our experience to suit our clients. Along with best Agile practices, we use our experience to understand and remove impediments from a specific development process , utilize technical and functional resources at the optimal level, and can progress even without much documentation or requirements.
Does your organization want to move from a traditional Waterfall model to a more Agile based approach? Would you like help in improving the speed and the quality of your product? Would you like to enhance your development and service delivery processes? Do you feel your organization is not growing at the right speed? Or are you not able to deliver solutions according to your customers ever changing requirements? Don’t fret- We are here to help you.
Our experts respect and follow the values and principles described in the Agile Manifesto. With years of experience delivering high quality software we focus on interacting with development teams, clients and customers and provide a solution that fulfills that ever-changing requirements. Our experts will sit with your team, understand your organization’s culture and issues and come up with processes that follow industry best practices, but that are unique to your needs and best suited to your corporation or project. We provide Agile Consulting, Training as well as Recruiting solutions at a very cost-effective rate. Our services are available with flexible engagements like Contract basis, Contract-to-Hire, Fixed Bid/SOW and Full-time placements. As a Cazton client, you will have on-demand access to world-class technical talent through our amazing network of professionals.
Cazton is composed of technical professionals with expertise gained all over the world and in all fields of the tech industry and we put this expertise to work for you. We serve all industries, including banking, finance, legal services, life sciences & healthcare, technology, media, and the public sector. Check out some of our services:
Cazton has expanded into a global company, servicing clients not only across the United States, but in Oslo, Norway; Stockholm, Sweden; London, England; Berlin, Germany; Frankfurt, Germany; Paris, France; Amsterdam, Netherlands; Brussels, Belgium; Rome, Italy; Sydney, Melbourne, Australia; Quebec City, Toronto Vancouver, Montreal, Ottawa, Calgary, Edmonton, Victoria, and Winnipeg as well. In the United States, we provide our consulting and training services across various cities like Austin, Dallas, Houston, New York, New Jersey, Irvine, Los Angeles, Denver, Boulder, Charlotte, Atlanta, Orlando, Miami, San Antonio, San Diego, San Francisco, San Jose, Stamford and others. Contact us today to learn more about what our experts can do for you.