Agile Software Development

D2K's Agile Philosphy
Compared to traditional software engineering, D2K agile software development primarily targets complex systems and product development with dynamic, non-deterministic and non-linear characteristics.
Requirements and design are held to be emergent.
Accurate estimates, stable plans, and predictions are often hard to get in early stages. D2K Agile practitioners seek to reduce the leap-of-faith that is needed before any evidence of value can be obtained.
D2K previous industry experiences, learned from years of successes and failures, have shaped our favor of adaptive, iterative and evolutionary development.
Agile is iterative, incremental, and evolutionary
  • Iterations, or sprints, are short time frames (timeboxes) that typically last from two to four weeks.
  • Each iteration involves a cross-functional team working in all functions: planning, analysis, design, coding, unit testing, and acceptance testing.
  • At the end of the iteration a working product is demonstrated to stakeholders. This minimizes overall risk and allows the product to adapt to changes quickly.
  • An iteration might not add enough functionality to warrant a market release, but the goal is to have an available release at the end of each iteration.
  • Multiple iterations might be required to release a product or new features.
  • Working software is the primary measure of progress.
Agile is efficient, face to face communication
  • Developers work remotely connecting with Scrum co-workers daily using video teleconferencing tools like Zoom and Skype.
  • This enables face-to-face interaction, in front of a shared screen showing the project Kanban Board for the current Sprint backlog.
  • It reduces the cycle time typically taken when questions and answers are mediated through phone, persistent chat, wiki, or email.
  • Every Scrum team includes a customer representative (Product Owner). This person is to act on behalf of the stakeholders and customer making a personal commitment to the team to answer questions throughout the iteration.
  •  At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (ROI) and ensuring alignment with customer needs and company goals.
  • The fundamental characteristic in D2K agile software development is the daily scrum. In a brief session, team members report to each other what they did the previous day toward their team's iteration goal, what they intend to do today toward the goal, and report any roadblocks or impediments they can see to achieving the goal.
Agile is adaptive vs predictive
Development methods exist on a continuum from adaptive to predictive. Agile software development methods lie on the adaptive side of this continuum. One key of adaptive development methods is a rolling wave approach to schedule planning, which identifies milestones but leaves flexibility in the path to reach them, and allows for the milestones themselves to change.
  • Adaptive methods focus on adapting quickly to changing realities. When the needs of a project change, an adaptive team changes as well. An adaptive team has difficulty describing exactly 

Risk analysis helps us choose between adaptive (agile or value-driven) and predictive (plan-driven) methods. Each side of the continuum has its own base of operations, as shown above.

what will happen in the future. The further away a date is, the more vague an adaptive method is about what will happen on that date. An adaptive team cannot report exactly what tasks they will do next week, but only which features they plan for next month. When asked about a release six months from now, an adaptive team might be able to report only the mission statement for the release, or a statement of expected value vs. cost.
  • Predictive methods, in contrast, focus on analyzing and planning the future in detail and cater for known risks. In the extremes, a predictive team can report exactly what features and tasks are planned for the entire length of the development process. Predictive methods rely on effective early phase analysis and if this goes very wrong, the project may have difficulty changing direction. Predictive teams often institute a change control board to ensure they consider only the most valuable changes.
Agile is quality focused
Some specific tools and techniques used to improve quality, enhance product development agility, and demonstrate software for customers at any point are:
  • continuous integration, 
  • automated unit testing for validation and verification,
  • pair programming,
  • Object oriented design with reusable objects
  • Peer Review,
  • Decision Tree analysis to improve uncertainty ,
  • Digital Twin modeling,
  • design patterns,
  • behavior-driven development,
  • domain-driven design, and
  • code refactoring.