why do complex software application projects drag?
DESCRIPTION
Rough slides from my (also rough) talk given at Philly Bar Camp 2014 about conceptual problems facing complex software application projects and what can be done about these problems.TRANSCRIPT
![Page 1: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/1.jpg)
Why do projects drag?Developers don't have domain knowledge
Scope creepBusiness rule changesMisunderstood or uncaptured requirements
Complex code/domainSteep ramp upBugs“Just get something up there”Change is a complexity multiplier
![Page 2: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/2.jpg)
How to fix it
Problem: Developers don't have domain knowledge
Solutions: Short, clear 2 way communication channel Provide tools for domain experts to express domain concepts
and see the results of changes
![Page 3: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/3.jpg)
How to fix it: part 2
Problem: Complex code/domain
Solutions: Comprehensive documentation Comprehensive test suite Minimalist modular code design Common code practices and conventions
![Page 4: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/4.jpg)
3 things developers love to do
Documentation Write Tests Deal with changing user requirements
![Page 5: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/5.jpg)
Abstraction
What a thing is or what needs to be done Opposite of implementation – how a thing is constructed or
how something is done
Goal is to reach simplest representation that still contains all necessary information
The challenge is to match level of abstraction to needs and capacity of people involved
2 way street – both IT concerns and domain knowledge are abstracted
![Page 6: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/6.jpg)
Steve's Web Development rant
Web development has often leaned heavily towards “just getting something up there” and concerned itself with implementation over abstract design
UI focused – UI tools have traditionally been not good at supporting abstraction
Mismatch between HTML and application needs
We are moving to a place where the complexity of applications calls out for abstraction and the tools and practices are coming along to support thinking about things in an abstract manner
![Page 7: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/7.jpg)
MVC – many models to one view
View Model Interface A view can have a defined interface for how it gets handles
the model data. Providing a translation from your data models to the
interface will allow the view to display and interact with it A table can display a 2d array, a list of objects, steps in a
mathematical series, etc.
![Page 8: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/8.jpg)
MVC – many views for one model
Multiple view types of the same model A single data entity can be displayed by any number of
views e.g. Song
Audio in media player Music staff with lyrics Word Cloud Etc.
![Page 9: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/9.jpg)
Domain Driven Design
Iterative navigating the domain to arrive at a level of abstraction that captures the relevant properties of the system while remaining comprehensible to all parties to the design
This is referred to as the Ubiquitous Language
Represents a shift away from UI-focused thinking
![Page 10: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/10.jpg)
Elements of a domain
Entities Value Object Aggregates Events Non-Entity Services Workflows
![Page 11: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/11.jpg)
Entity versus value object
Entity− Identity is important− Properties are mutable
Value Object− Immutable− Generally dependent on containing entity
![Page 12: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/12.jpg)
Entities
Properties Actions Invariants
![Page 13: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/13.jpg)
Entity Properties
These are not necessarily concrete fields
Data− Derived data – rules− Relative data
States− Relative States
![Page 14: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/14.jpg)
Actions
Can be specified at a range of abstractions, from “it does this” to concrete implementation.
Can have expected input-output pairings and constraints attached
![Page 15: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/15.jpg)
Concrete actions
Generally fall into three types− Update entity (CRUD)− Engage non-entity service− Alter workflow state
![Page 16: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/16.jpg)
Invariants
Property level Entity level
![Page 17: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/17.jpg)
Events
![Page 18: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/18.jpg)
Non entity services
![Page 19: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/19.jpg)
Workflows
![Page 20: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/20.jpg)
Aggregates
A collection of related entities Can in some ways be seen as a meta-entity Usually have a single aggregate root entity
![Page 21: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/21.jpg)
Complexes
Entry point Can be contained in a number of constellations
![Page 22: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/22.jpg)
Tests/Behavior specification
Behavior Driven Design− http://www.thoughtworks.com/products/twist-agile-testing
![Page 23: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/23.jpg)
Moving from Abstraction to something usable
![Page 24: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/24.jpg)
Level 1: Communication
Result is a dynamic, multilevel domain map
![Page 25: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/25.jpg)
The real secret is automation
The real real secret is translation
![Page 26: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/26.jpg)
Level 2: Stubs
Interfaces → reference annotated code− Not just models, but tests
![Page 27: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/27.jpg)
Level 3: Full generation
Interfaces → code Auto-generated skeleton UI 2 way binding?
![Page 28: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/28.jpg)
Simple Interface Implementations
![Page 29: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/29.jpg)
Level 4: Dynamic domain systems
Dynamic proxies of not in focus constellations Dynamic, overridable entity/complex states
![Page 30: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/30.jpg)
Dynamic Interface Implementation
Sandbox any sort of state, any constellation
![Page 31: Why do complex software application projects drag?](https://reader034.vdocument.in/reader034/viewer/2022052412/559791281a28ab48798b4589/html5/thumbnails/31.jpg)
Abstracted actions
Log action call and parameters Combined with data backup, allows replay of system
operation− Automated testing− Shadow data repository