Improving  stakeholder/software developer communication with an  Ubiquitous Language   Alline Watkins & June Clarke
The problem Programmers speak using  technical jargon   (design patterns, acronyms, geeky in-jokes) Domain experts use  terminology specific  to their field of expertise  Computers speak programming languages something's gotta give!
 
u·biq·ui·tous   /yo͞oˈbikwətəs/ Adjective: Present, appearing, or found everywhere. Synonyms: omnipresent (Dictionary.com) UBIQUITOUS LANGUAGE . A language structured around the domain model and used by all team members to connect all the activities of the team with the software.   (Excerpted from Domain-Driven Design by Eric Evans )
"We understand each other."   The Art of Agile Development   James Shore and Shane Warden (O'Reilly. Copyright © 2008. All rights reserved.)
User Stories Project Meetings Team E-mails  Instant Messages Schedule Plan Software Documents AND SOURCE CODE !! Where to apply:
The advantages... Faster communication Less risk of miscommunication Knowledge of Domain can resides in codebase Overhearing Source Code easier to understand (maintainability, extensibility)
NO When  User  logs on with valid credentials, an empty  panel  is displayed. User Story Example: YES When  Player  logs on with valid credentials, an empty  board game  is displayed.  (from a Tic Tac Toe Game software example)
NO . Integer i = new Integer(); . String char1 = new String(); . public class GameDAO() { } . catch (Exception e) Code Example: YES . String realMeaningOfMyString = new String(); . public class ScoreDataLoader() { } . catch (Exception NotLoggedInException) NO . Ambiguities . Inconsistencies . Synonyms . Abbreviations YES . Clarity . Precision . Reuse . Full Names
package tictactoe.client.userInterface; /** * Add the string O or X to a cell in the grid. */ public class  ShowCellGrid { public static void  displayUser  (Grid  grid , Cell cell) { if (! Initialization . flag && Initialization. gameStatus .get Sequence () == null &&  isEmpty (grid, cell)) { Initialization. flag  = true; String  mk =  showString (Initialization.gameStatus .get CurrentUser ().ge tUserString ()); grid .setHTML(cell.getRowIndex(), cell.getCellIndex(),  mk ); Initialization. gameStatus .get Status ()[cell.getRowIndex()][cell .getCellIndex()] = Initialization . gameStatus .get CurrentUser (); GameEnd. checkEnd (Initialization. gameStatus , cell.getRowIndex(), cell.getCellIndex()); } (...) } A class  BEFORE  and  AFTER  Ubiquitous Language package tictactoe.client.userInterface; /** * Performs a move in the game. */ public class  PlayerMove  { /** * When the player clicks in a cell, the game draws an O or a X on the  * game grid depending on which player's turn it is. */ public static void  makeMove   (GameGrid  gameGrid , Cell cell) { if (! GameInitialization. waitingMoveFlag && GameInitialization. currentGameStatus .get SequenceWinner () == null  &&  isCellEmpty (gameGrid, cell)) { GameInitialization. waitingMoveFlag  = true; String  marker  =  showPlayerIcon ( Game Initialization. currentGameStatus .get CurrentPlayer ().get PlayerIcon ()); gameGrid .setHTML(cell.getRowIndex(), cell.getCellIndex(),  marker ); GameInitialization . currentGameStatus .get GameMoves ()[cell.getRowIndex()][cell .getCellIndex()] = GameInitialization. currentGameStatus .get CurrentPlayer (); CheckWinner . checkForWinner ( Game Initialization. currentGameStatus ,  cell.getRowIndex(), cell.getCellIndex()); } (...) } (Excerpted from a Tic Tac Toe Game source code)
Which one would a Stakeholder better understand? Player Move     Performs a move in the game.   Make Move  When the player clicks in a cell, the game draws an O or a X on the game grid depending on which player's turn it is. Is Cell Empty The Player can select a cell only if it wasn't already selected. Show Cell Grid      Add the String O or X to a cell in the grid.    Display User  Is Empty (Excerpted from a Tic Tac Toe Game source code)
[email_address] [email_address]

Ubiquitous Language

  • 1.
    Improving stakeholder/softwaredeveloper communication with an Ubiquitous Language Alline Watkins & June Clarke
  • 2.
    The problem Programmersspeak using technical jargon (design patterns, acronyms, geeky in-jokes) Domain experts use terminology specific to their field of expertise Computers speak programming languages something's gotta give!
  • 3.
  • 4.
    u·biq·ui·tous /yo͞oˈbikwətəs/ Adjective: Present, appearing, or found everywhere. Synonyms: omnipresent (Dictionary.com) UBIQUITOUS LANGUAGE . A language structured around the domain model and used by all team members to connect all the activities of the team with the software. (Excerpted from Domain-Driven Design by Eric Evans )
  • 5.
    "We understand eachother."   The Art of Agile Development   James Shore and Shane Warden (O'Reilly. Copyright © 2008. All rights reserved.)
  • 6.
    User Stories ProjectMeetings Team E-mails Instant Messages Schedule Plan Software Documents AND SOURCE CODE !! Where to apply:
  • 7.
    The advantages... Fastercommunication Less risk of miscommunication Knowledge of Domain can resides in codebase Overhearing Source Code easier to understand (maintainability, extensibility)
  • 8.
    NO When User logs on with valid credentials, an empty panel is displayed. User Story Example: YES When Player logs on with valid credentials, an empty board game is displayed. (from a Tic Tac Toe Game software example)
  • 9.
    NO . Integeri = new Integer(); . String char1 = new String(); . public class GameDAO() { } . catch (Exception e) Code Example: YES . String realMeaningOfMyString = new String(); . public class ScoreDataLoader() { } . catch (Exception NotLoggedInException) NO . Ambiguities . Inconsistencies . Synonyms . Abbreviations YES . Clarity . Precision . Reuse . Full Names
  • 10.
    package tictactoe.client.userInterface; /*** Add the string O or X to a cell in the grid. */ public class ShowCellGrid { public static void displayUser (Grid grid , Cell cell) { if (! Initialization . flag && Initialization. gameStatus .get Sequence () == null && isEmpty (grid, cell)) { Initialization. flag = true; String mk = showString (Initialization.gameStatus .get CurrentUser ().ge tUserString ()); grid .setHTML(cell.getRowIndex(), cell.getCellIndex(), mk ); Initialization. gameStatus .get Status ()[cell.getRowIndex()][cell .getCellIndex()] = Initialization . gameStatus .get CurrentUser (); GameEnd. checkEnd (Initialization. gameStatus , cell.getRowIndex(), cell.getCellIndex()); } (...) } A class BEFORE and AFTER Ubiquitous Language package tictactoe.client.userInterface; /** * Performs a move in the game. */ public class PlayerMove { /** * When the player clicks in a cell, the game draws an O or a X on the * game grid depending on which player's turn it is. */ public static void makeMove (GameGrid gameGrid , Cell cell) { if (! GameInitialization. waitingMoveFlag && GameInitialization. currentGameStatus .get SequenceWinner () == null && isCellEmpty (gameGrid, cell)) { GameInitialization. waitingMoveFlag = true; String marker = showPlayerIcon ( Game Initialization. currentGameStatus .get CurrentPlayer ().get PlayerIcon ()); gameGrid .setHTML(cell.getRowIndex(), cell.getCellIndex(), marker ); GameInitialization . currentGameStatus .get GameMoves ()[cell.getRowIndex()][cell .getCellIndex()] = GameInitialization. currentGameStatus .get CurrentPlayer (); CheckWinner . checkForWinner ( Game Initialization. currentGameStatus , cell.getRowIndex(), cell.getCellIndex()); } (...) } (Excerpted from a Tic Tac Toe Game source code)
  • 11.
    Which one woulda Stakeholder better understand? Player Move     Performs a move in the game.   Make Move  When the player clicks in a cell, the game draws an O or a X on the game grid depending on which player's turn it is. Is Cell Empty The Player can select a cell only if it wasn't already selected. Show Cell Grid     Add the String O or X to a cell in the grid.    Display User  Is Empty (Excerpted from a Tic Tac Toe Game source code)
  • 12.

Editor's Notes

  • #3 Main problem in software is miscommunication
  • #5 The common language is in the middle and not more of business language nor technical language Somewhere in between, not programmers completely conforming to biz language
  • #8 Maintainability – classes and packages are named/grouped in a way that makes sense in the real world Agility improve - Precise Communication
  • #13 We understand each other Software development is by its nature a series of translations and compromises. What the end user wants, what the customer is willing to pay for, and what is technically feasible rarely combine to form a unified set of features. In this talk we will explore how an Agile team can work to understand each other better, in particular at the communication divide between stakeholders and developers. We will show you how to develop a domain-specific ubiquitous language, how to lessen the responsibility gap between managers and developers, and how to use your codebase as the central source for documentation.