SPA Conference session: Applying Software Design Principles in Practice

One-line description:A workshop to work through a set of design principles by applying them to contrasting scenarios, and to consider how they can be justified by relating them back to higher level requirements and goals
 
Session format: Workshop (150 mins) [read about the different session types]
 
Abstract:Design principles are generally applicable design rules that, when followed, result in desirable qualities in the design of software. In contrast to patterns, design principles don't provide concrete solutions to specific problems but rather are general guidelines that designers should be aware of when creating their designs. While design patterns are a practical embodiment of good design principles, we observe that many designers using patterns don't seem to understand the principles that make them work well. Examples of design principles are "maximise cohesion", "minimise coupling", "liskov substitutability principle", "don't repeat yourself/minimise duplication", ...

In this session, we will examine a specific set of design principles for distributed information systems that the presenters will provide. We'll examine the set from two directions, initially by applying them to specific, contrasting, design problems to see how they influence the design decisions made, how useful they are, and what is missing from the set. Then from the opposite direction, participants will explore how to relate the design principles back to higher level business goals and technical principles, so aligning the design with the system's wider environment. (This latter technique is enormously useful as a practical way of justifying hard-to-explain and possibly expensive design decisions to senior management.)

This process will allow us to analyse, understand and validate the set of proposed design principles, while also gaining experience in applying and justifying design principles to realistic scenarios.

[Andy Longshaw is a fourth presenter for this session, although depending on the sessions accepted or not, may not have time to take part fully]
 
Audience background:Anyone involved in the activity of software design. Ideally participants should have some prior understanding and experience of both design decisions and design principles, but this isn't a requirement to take part in the session.
 
Benefits of participating:* A thorough understanding of a specific set of design principles for distributed information systems that the participants can take back to work and use, if applicable.
* An understanding of the impact of design principles on design decisions based on practice with specific scenarios.
* Practice at relating design principles to higher level requirements and goals and using this to help explain and justify design decisions to senior management.
 
Materials provided:* A set of concrete design principles for distributed information systems (we'd aim for 6 to 8 principles)
* Two information system design scenarios, one scenario for a system which will undergo regular and unpredictable change of functionality and workload, another for a system which is functionally much more stable but has very strict requirements around properties like correctness and resilience (e.g. a fast moving trading system and a high volume payment transaction processing system).
* A set of business goals and drivers and a set of organisation technology principles, both partially related to the design principles already via traceability relationships, but which will allow people to add further relationships between them as part of Exercise 3. We may provide different drivers for the two scenarios if this does not complicate the exercise.
* Template forms for the exercises.
 
Process:* Presentation 1:
* overview of the session, process and goals
* explain what design principles are and why they're useful
* overview of our set of principles

* Split the attendees into small groups. Ideally 8 groups, of 3 but we could deal with any number from 3 groups of 2 up to (say) 8 groups of 4.

* Exercise 1: Thinking About Design Principles (warmup exercise)
* ask the individuals in each group to identify a situation where one of our principles was applied or could have been usefully applied.
* have the individuals in the group describe their insights to each other

* Presentation 2:
* explain our design principles set and the scenarios for the exercise
* explain the exercise

* Exercise 2: Applying Design Principles
* distribute copies of the design principle definitions and the information system design scenarios to each group.
* ask the groups to select one of the scenarios to work on, or to quickly define a scenario of their own based on their work.
* each group considers each design principle and tries apply it to the design problems in their scenario, recording applicability and likely result. As part of the process, the group will evaluate the applicability and usefulness of each principle and will also be invited to identify important principles which are missing from the set.

* Results Gathering: each group gathers their results on a flipchart and reports via a short presentation to the wider session.

* Presentation 3: Explanation of Exercise 3

* Exercise 3: Putting Design Principles into Context
* each group continues to work on their existing scenario.
* distribute copies of the business goals/drivers and technical principles and their traceability to the design principles.
* each group considers how each design principle relates to the business goals and technical principles. Some of these relationships are already done for them, so they need to be understood (and validated if the group isn't initially convinced by the relationship). Other relationships are missing but can be inferred from the information at hand and the groups will be asked to try to identify these missing relationships.

* Results Gathering: each group reports the traceability that they believe exists from the design principles back to the business goals/drivers and technology principles to the wider group

* Presentation 4: Summary and Wrap Up
* presenters summarise the session and the outputs obtained
 
Detailed timetable:00:00 - 00:10 - Presentation 1 (Overview)
00:10 - 00:15 - Exercise 1 setup
00:15 - 00:25 - Exercise 1 (Thinking About Design Principles)
00:25 - 00:35 - Presentation 2 (Exercise 2 Overview)
00:35 - 01:00 - Exercise 2 (Applying Design Principles)
01:00 - 01:10 - Results Gathering
01:10 - 01:25 - Break
01:25 - 01:30 - Presentation 3 (Exercise 3 Overview)
01:30 - 02:15 - Exercise 3 (Putting Design Principles into Context)
02:30 - 02:50 - Results Gathering
02:50 - 03:00 - Presentation 4 (Summary and Wrap Up)
 
Outputs:* A validated set of information systems design principles, with some indications of applicability to different sorts of design scenarios.
* Example traceability for each design principle

Both outputs will be captured on the conference Wiki, if possible while the session is in progress.
 
History:New session, but attempting to follow on from highly related session we ran last year on the same topic
 
Presenters
1. Eoin Woods
BlackRock
2. Chris Cooper-Bland
Endava (UK) Ltd
3. Nick Rozanski
BlackRock