Thursday, December 29, 2016

Agile: the hypotheses


The basic promise of a good software development process approach is to provide good results in the context of the target domain – software development – with capabilities to address this domain specific problems & traits -  knowledge work, incertitude and changes, complexity. We need some start hypotheses for what works in managing these specific problems.

Domain: Software development
Domain Problems and Traits: knowledge work, incertitude and changes, complexity.
Promise: Address target domain specific problems and traits by providing effective, efficient and steady capabilities
Solutions hypotheses: Incertitude and complexity could be steady managed ("solved") by being adaptive and lean in the problem context.
Adaptive - Reason 1: Complex problems, with high incertitude, can be solved only with adaptive solution approaches. We need feedback & adapt loops, but these loops must be effective/efficient in each problem context. Reason 2: we need the capability to <follow the (customer) business>, were this target is in continuously change and evolution. More: technologies will change, context will change.
Lean - Incertitude and complexity will increase with any ineffective practice: the ones that not address the problems. In fact, in this generic context - complexity and incertitude - any ineffective practice could instead exponentially increase the initial problems: complexity and incertitude. More: in these conditions any waste create more waste! We need to avoid this spiral of waste.
Context Tailoring we need to solve complex problems, but each problem is different. Each process solution must address both generic traits and specific traits. We need to find what it is generic and what is specific and provide categories of solutions for the categories of problems.
  

A process approach must provide capabilities to address target domain specific problems and traits, where capability suppose both understanding and (deliberate) practice. Also a process approach must provide capabilities to adapt the process to context specific problems and traits.
 

Why Adaptive & Lean? Here also an intuitive answer: we need to be able to continuously change the software products in order to follow the needs of the target (customer) business and to do that without waste. That will serve the economics of both development and customer side.     

I just want to remember some thoughts of Robert C. Martin:
  • The main responsibility of a programmer is to be able to change the software  [1]
  • "I expect ...Inexpensive Adaptability...You will always be Ready...Stable Productivity" [2] 
 [1] - See "Clean Coders" videos ; [2] - see video "Demanding Professionalism in Software Development "

Quality? Lean suppose "No defects!" approach and Adaptive suppose built-in quality, few and easy to fix defects. 

Collaborative Work? Both Lean capability and Adaptive capability are based on a lot of collaborative work practices.