A reflective design approach to achieve software design agility by modelling change as a vector and tracking it to aid refactoring decisions.

 

Preface about the talk

Software design is a field that has always fascinated me and I have tried to be an obedient student trying to learn this art. Like any other design problem, software design is also a wicked problem. Horst Rittel and Melvin Webber defined a “wicked” problem as one that could be clearly defined only by solving it, or by solving part of it .This paradox implies, essentially, that you have to “solve” the problem once in order to clearly define it and then solve it again to create a solution that works.

Hence you need an architect with magical powers to get your design correct in the first go .This is the core philosophy behind emergent design in which we do not think too much about future . As Uncle Bob sarcastically points out, your customers somehow knows your design and they will come up with a requirement that will break your assumptions and thus your design. In emergent design you embrace aggressive refactoring religiously and few teams rebelliously for the good. It has also been observed that during emergent design refactoring step more focus is towards class design than higher abstract architecture elements. This creates technical debt which can go unnoticed for a long time.

In this talk I will be introducing a novel technique called change vector tracking that will address the above described problem. Change Vector Tracking is a reflective design approach to achieve software design agility by modelling change as a vector and tracking it through ceremonies like Change Vector Tracking meetings.

Change vector tracking doesn’t prevent customers from coming up with requirements that would invalidate previous design assumptions, it helps us in monitoring these changes and aids in making informed decisions of where and when to redesign. It helps us keep a check on design debt which otherwise would be overseen and not addressed at the right time .Design debt is invisible to tools initially, only when it grows beyond a scale tools can catch it. Change vector tracking is a technique to capture this design debt in a very early stage. “A stitch in time saves nine”.

 
4 favorite thumb_down thumb_up 3 comments visibility_off  Remove from Watchlist visibility  Add to Watchlist
 

Outline/structure of the Session

Structure of the talk

  1. why ?: 5 min
  2. what ?: 10 min
  3. How ? Solution, Change vector tracking: 5 min
  4. Modelling change as a vector: 5 min
  5. Weighted vectors: 5 min
  6. Process and ceremonies: 5 min
  7. Future work : 5 min
  8. Q&A : 5 min

Learning Outcome

  1. Attendees will understand the problem related to design debt and the difficulty in identifying/measuring early during product development 
  2. Understand the need for Emergent design and constant refactoring  
  3. They will be in a position to correlate the discussed problems with their project.
  4. An in-depth understanding of the solution called change vector tracking
  5. Knowledge of how change can be modeled as a weighted vector to aid to take decision-related to architecture refactoring.
  6. How to evaluate design options using the change vector and make key refracting decisions early in the product development 
  7. They can readily apply the solution to the project without the need of any tools and reap the benefits by reducing technical debt

Target Audience

Developer , Architect ,Scrum Master

schedule Submitted 1 year ago

Comments Subscribe to Comments

comment Comment on this Proposal
  • Sergey Shishkin
    By Sergey Shishkin  ~  1 year ago
    reply Reply

    Hi Rajith,

    Thank you for this proposal. Emergent design is a vary important topic.

    I'm a bit puzzled by the description of the talk, please help me out. I can't make the logical connection between "[...]you need an architect with magical powers to get your design correct in the first go" and "This is the core philosophy behind emergent design".

    Also, after learning change vector tracking from the slides, I still don't understand how does it prevent customers from coming up with requirements that would invalidate previous design assumptions.

    Again from the slides I understand that change vector tracking is a method of evaluating software design alternatives and formalizing architectural needs. I think it would benefit potential attendees to clarify it upfront in the abstract.

    Please update the abstract to address the points I mentioned.

    • Ranjith Tharayil
      By Ranjith Tharayil  ~  1 year ago
      reply Reply

      When I say “you need an architect with magical powers to get your design correct in the first go” means it’s difficult or close to impossible to get the design / architecture right in the first go, especially if it is a waterfall step. Requirements keeps changing our understanding of the system keep changing and our design also needs to change accordingly. Which is the core Philosophy behind emergent design.

       

      You are correct, Change vector tracking doesn’t prevent customers from coming up with requirements that would invalidate previous design assumptions, it helps us in monitoring these changes and aids in making informed decisions of where and when to redesign. It helps us keep a check on design debt which otherwise would be overseen and not addressed at the right time .Design debt is invisible to tools initially, only when it grows beyond a scale tools can catch it. Change vector tracking is a technique to capture this design debt in a very early stage. “A stitch in time saves nine”.

      • Sergey Shishkin
        By Sergey Shishkin  ~  1 year ago
        reply Reply

        Thanks for clarifications and updating the abstract!


  • Liked Ranjith Tharayil
    keyboard_arrow_down

    Ranjith Tharayil - Adapting BDD for software maintenance projects using the “dEep” model.

    45 mins
    Talk
    Intermediate

    Behaviour driven development has been a tried and tested technique to help us build the right product. In the recent years many teams who are in green field development projects are adopting it and finding great success. The core of BDD is the collaboration angle that enables teams to build the right product. BDD team members work together in identifying different scenarios and elaborated them in the form of examples. During these discussions, technology facing members get a better understanding of business and vice-versa. It has also been observed that identifying, discussing and debating scenarios helps the team in analysing and studying the feature in much detail. Many teams benefit from this practice as it aids them shape their product.

    But when it comes to teams whose primary responsibility is to maintain previously built software system, BDD as a technique is something that they really don’t know how to utilize to make the best of it. This is because BDD’s primary focus is on driving the development of new features / stories, in case of enhancement projects this driving the development phase was history. Also we are considering a context in which these projects run-on lots of legacy code. This article discusses on how software maintenance projects can benefit from this second generation agile methodology. As you would all agree we will not able to use BDD as it is directly, we need to customize according to our needs to get the best of it. We discuss one such customisations called the “dEep” model.

    The “dEep” is a model that I have come up with for software maintenance projects teams that I coach to get the best of BDD.

     

    “dEep” model is just a template frame work for adapting BDD for software maintenance projects. It may need customization as per specific project context.

    By studying various Software enhancement projects I have categories the type of work into 4 different types  

    • Defects,  “d”.
    • Complex (problem space) enhancements, “E”.
    • Simple (problem space) enhancements, “e”.
    • Urgent production issues, “p”.

     Hence the word “dEep”

    The team during pre-grooming classifies work items into E, e and d. The classification of enhancements into Complex enhancements “E” and simple enhancements “e” is the trickiest aspect here. It is based on the complexity in problem space and not the size of the enhancements. This means that there could be a work item with was estimated as “XL” (T-shirt sizing )  could be classified as  simple enhancements “e” and another work item estimated as “L” could be  classified  Complex enhancements, “E” . The reason is because here we look into the complexity of problem space and not solution space. For more reading on problem space complexity and effects on it during BDD cycle kindly read my paper - Tharayil, Ranjith (15 February 2016). "When to embrace Behaviour Driven Development (BDD)?". SolutionsIQ.

    Each work items classified as  “d” ,”E” ,” e” ,”p”  follows different treatment wrt to the engineering practices like BDD, TDD, , Test first , Test last ,review etc which is based on context that is defined by the team . An example context is presented in my talk.

  • Liked Vinay Krishna
    keyboard_arrow_down

    Vinay Krishna - Built-in Quality through Vertical Slicing of User Story, BDD scenario writing and Test Pyramid

    Vinay Krishna
    Vinay Krishna
    Agile / DevOps Practitioner
    Self
    schedule 1 year ago
    Sold Out!
    45 mins
    Talk
    Intermediate

    Developing product with Built-in quality is always desired outcome. Organizations follow various strategies for the same such as horizontal slicing, acceptance criteria and end-to-end automation testing. In this session I'm going to explain how it can be achieved through:

    Vertical slicing is a technique used to develop software by driving a thin vertical slice (cross-sectional slice through the layers), which is functionally coherent and demonstrable, then progressively widening it with consecutive slices

    BDD stands for Behavior Driven Development and BAs, Dev and testers collaborate and write scenarios to cover expected behavior of application

    Test Pyramid highlights that we should have more low-level tests (such unit tests) than high-level tests (end-to-end tests).

    I have used them effectively while coaching various teams. I'm going to share my experience supporting real time examples through this session.

  • Liked Ranjith Tharayil
    keyboard_arrow_down

    Ranjith Tharayil - When to embrace Behaviour Driven Development?

    45 mins
    Talk
    Intermediate

    Abstract

    Behaviour Driven Development (BDD) is a collaborative and disciplined technique to help us build the right product. In the last decade BDD has had her own bit of glory and criticism. Many teams in the recent past have reaped benefits from this technical practice, while some teams complain that are yet to find any value. This talk focuses on answering two questions;  What are the ideal conditions when teams should adopt it? How to adopt it the right way ?

    In this talk we come up with a BDD adoption matrix to help us answer the above questions. We also assert that for successful product development it is crucial to bridge the gap between the problem space and solution space, each of which has its own set of complexities. We conclude that Behavior Driven Development can be one of the effective techniques to bridge this gap especially if the problem space is complex. In case the problem space is simple it might be an over kill and teams might not find real value practicing BDD. We also observe that teams whose problem space is simple can continue to document scenarios and automate acceptance testing but they need not spend elaborate time and effort towards discussing and debating scenarios.

     

    Preface about the talk 

    Behaviour driven development has been a buzz word in the recent years and many teams are adopting it. The core of BDD is the collaboration angle that enables teams to build the right product. As a side effect BDD gives you a very essential output, which is an automated acceptance test suite. BDD team members work together in identifying different scenarios elaborated in the form of examples. High performing teams ensure through working agreements to only pull those features in which scenarios are well defined. These scenarios define the acceptance criteria of the feature. The scenario identification process involves full team participation and in these meeting its essential that the three amigos i.e. the entire development team, QA engineers and product owner should participate.  Along with the three amigos any other members who can constructively contribute in scenario identification are also welcomed.

    During these interactions technology facing members get a better understanding of business and vice-versa. It has also been observed that identifying and discussing scenarios helps the team in analysing and studying the feature in much detail. Many teams benefit from this practice as it helps them shape their product ,  saying so few teams are yet to find value in investing time and effort towards these meetings and ceremonies . One should keep in mind that for BDD to be effective we require full team participation.

    In this talk I am making an assumption that these teams who are not finding much value in adopting BDD, were practicing it in fullest of its spirits and not just documenting scenarios for creating an automated test suite. This talk discuss on how to effectively adopt it ,the right way based on problem space complexity of the feature .