Sunday, June 3, 2018

Agile Software Development

Agile Software Development manages and develops software in an iterative and incremental way.

The four important values that guide the principles of Agile Development are

a.Individuals and interactions over tools and processes
b.Working software over comprehensive documentation
c.Customer collaboration over contract negotiation
d.Responding to change over following a plan. 





In Agile development the process is deliberately more iterative. - Right, instead of trying to complete each phase up front it stresses flexible collaboration between both workers and customers around frequent inner room deliverables of working software. This can quickly generate solutions that better address customer needs with fewer lingering quality problems.

12 Principles of Agile are,





























































What are the benefits for Organisations ?

From a business perspective, the two biggest wins are visibility and the continuous delivery of business value. Because product owners are a part of the team building the software, they can visualize the progress towards a working product through every iteration. 
If necessary, they can make changes from iteration to iteration. From a business perspective, owners always know how the project is progressing. - That's right.
















In a traditional waterfall development cycle, the communication between product owners and development happens frequently at the start of the project but declines as the project progresses. - In later stages, when the product owner does get an update and requests changes, these can be really difficult to make. From a dev teams perspective, it changes the scope and affects the product timeline. This can understandably cause friction between the owners and the developers. - An Agile approach is deliberately more iterative. You deliver working software from the very beginning.















Another key differentiator of Agile is communication. Frequent communication between the team members and with external stakeholders during the entire project lifecycle allows the whole team to be more adaptable. - The development team can anticipate upcoming changes in scope.Product owners can see iterative progress. And test and deployment teams are aware of what's coming up and can be prepared. - Finally because the entire team is working in sync, the overall status and risk of the project is known in a manner that's impossible in traditional development processes. The developers on the team can raise concerns about complexity or issues with specific features to the product owners during the implementation phase, giving them the chance to revisit workflow and requirements. The added communication reduces risk and gives everyone further visibility into where features actually stand.




These include Extreme Programming, called XP for short, Scrum, Kanban, Dynamic Systems Development Method, Feature Driven Development, Lean, Scrumban, Rational Unified Process, also known as RUP for short and a few others. Artifacts are deliverables, activities or units of work and workflow.

RUP ( Rational Unified Process) is an entire framework that covers whole areas of the development process from business modeling through deployment and has deliverables for each phase in addition to well defined handoffs.












Scrum comes from a rugby term and refers to a tight player formation that's trying to move the ball towards the goal.
















This is the Scrum life cycle. Every project has a product backlog which is a prioritized set of desired product features.The highest priority items are selected and implemented in a two to four week period in the sprint iteration.

In the Scrum framework, a sprint is simply a time box of a month or less. Everyday there's a quick, daily meeting called a standup where three topics are covered. 

  1. What was covered since the last meeting? 
  2. What is the intended task for the day, and are there any impediments? 
  3. At the end of an iteration, progress is demonstrated in a sprint review meeting followed by retrospective.
Any tasks that weren't completed either get rolled to the next sprint or re-prioritized in the backlog. There are three specific roles in Scrum. 


First, the product owner who represents the customers and stakeholders. They're accountable for developing features that are important to the business. They're also the primary controllers for the Scrum backlog and prioritize tasks on the boards and set sprint goals. 

The development team is a cross-functional team responsible for actually doing the work and shipping iterations of the product.

And finally, the Scrum master facilities the Scrum process and makes sure that the progress is happening as expected. He or she makes sure that the team is not blocked and helps unblock the development team as needed. 




Unlike Scrum, Kanban focuses on delivery and not overloading developers. 
Taiichi Ohno, who was an industrial engineer at Toyota, developed the Kanban methodology to improve efficiency at the manufacturing plant.

Like Scrum, Kanban also has a prioritized backlog. Often, there might be a ready column from which developers pick up tasks followed by a doing column which symbolizes that a task in progress followed by a done column that signifies that a task is complete. Often on a Kanban board, you'll see a number on the column.












Scrum is based on time box sprints where work can be pulled through in batches and no changes are allowed during the iteration. 
Kanban fits great when there's a high degree of change and variability where Scrum fits better in a situation where work can be prioritized and time boxed. 






Lean Technologies 


Lean started in the manufacturing world. - Lean was devised by a combination of innovators including W. Edwards Deming and Taiichi Ohno

Lean is also inspired by statistical process control (SPC) and its focus on continuous improvement in designed experimentation. And it inherits from Henry Ford's original work in Just In Time (JIT) manufacturing.  

Lean is a systematic method to eliminate waste and maximize the flow of value through a system. Value is defined as something your customer will pay money for. 

Lean employs something called value stream mapping.




















The antithesis of value is waste. Waste is effort spent on anything other than the creation of value. 
Lean recognizes three major types of waste all given Japanese names. Muda, Muri and Mura. - 


Muda is the major form of waste.
Effort spent on non-value creating work. It comes in two types. 
Type one, which is technically waste but necessary for some reason, you know, like compliance. 
And type two, which is just plain wasteful. 

Mura is waste from unevenness. Stopping and starting and context switch. 

And finally Muri is waste from overburdening a person, process, or system. 


The theory of constraints identifies the constraints or bottlenecks that reduce throughput of a system. - By measuring and managing throughput, inventory or queue length and operating expenses and identifying and focusing on the lifting of constraints, you can greatly improve a system's overall delivery. This focus on optimizing the entire process or system's thinking is contrasted to local optimization performed by single functional areas which may actually inhibit the overall flow of the system.


Lean also places a high value upon continuous improvement. It has tools and strategies designed to allow teams to improve incrementally day after day from Kaizen to a host of quality tools. - And finally, respect for and empowering both the individual employee and the team is a critical part of Lean. Work can only be improved by harnessing the knowledge of those performing it. 


Mary and Tom Poppendieck's 2003 book Lean Software Development, an Agile Toolkit, famously adapted these Lean techniques to software development. 

They identify seven principles to follow when developing code. 

You amplify learning by short cycles delivering working code that gets tested and elicits feedback continuously. Deciding as late as possible allows you to make final decisions when you have as much information as you can get. Delivering as fast as possible means you're minimizing the gap between finding out the customer's needs and you fulfilling them, which also reduces waste and the thrash that you can get over a long delivery cycle.

Empowering the team pushes decision making down to the individual. Leadership's responsibility is to educate and empower them to improve their work and the product.Building integrity in focuses on finding and eliminating bugs as early in the process as possible, not passing them on to QA, or worse, the customer. Refactoring, automated testing, and other quality improvement techniques come into play here. And finally, seeing the whole advocates keeping the whole system and product in mind when making decisions.















Lean and agile In DevOps










DevOps is the application of agile methodologies to a system administration. 
The four main pillars of DevOps is CAMS
Culture, automation, measurement, and sharing. 



















Mateus Marshall probably summed it up the best in his diagram of the relationship between Lean, Agile, and DevOps.He shows the combination of Agile development, Lean product management, and operations, all as part of DevOps, how the Lean principles of flow informs the entire path of software development process from product conception, through development, to operations.

Thus product development and operations are phases in the pipeline that originate with an idea and ends with something that provides value to a customer. 

Lean is more of a mindset that occurs across all of these phases



















Gene Kim introduced the three ways.The principles underpinning DevOps, which are deeply rooted in Lean. 
Systems thinking, 
Amplifying feedback loops, and 
Creating a culture of experimentation and 
Learning are directly out of the TPS playbook. 













No comments: