32
Why do projects drag? Developers don't have domain knowledge Scope creep Business rule changes Misunderstood or uncaptured requirements Complex code/domain Steep ramp up Bugs “Just get something up there” Change is a complexity multiplier

Why do complex software application projects drag?

Embed Size (px)

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.

Citation preview

Page 1: Why do complex software application projects drag?

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?

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?

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?

3 things developers love to do

Documentation Write Tests Deal with changing user requirements

Page 5: Why do complex software application projects drag?

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?

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?

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?

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?

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?

Elements of a domain

Entities Value Object Aggregates Events Non-Entity Services Workflows

Page 11: Why do complex software application projects drag?

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?

Entities

Properties Actions Invariants

Page 13: Why do complex software application projects drag?

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?

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?

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?

Invariants

Property level Entity level

Page 17: Why do complex software application projects drag?

Events

Page 18: Why do complex software application projects drag?

Non entity services

Page 19: Why do complex software application projects drag?

Workflows

Page 20: Why do complex software application projects drag?

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?

Complexes

Entry point Can be contained in a number of constellations

Page 22: Why do complex software application projects drag?

Tests/Behavior specification

Behavior Driven Design− http://www.thoughtworks.com/products/twist-agile-testing

Page 23: Why do complex software application projects drag?

Moving from Abstraction to something usable

Page 24: Why do complex software application projects drag?

Level 1: Communication

Result is a dynamic, multilevel domain map

Page 25: Why do complex software application projects drag?

The real secret is automation

The real real secret is translation

Page 26: Why do complex software application projects drag?

Level 2: Stubs

Interfaces → reference annotated code− Not just models, but tests

Page 27: Why do complex software application projects drag?

Level 3: Full generation

Interfaces → code Auto-generated skeleton UI 2 way binding?

Page 28: Why do complex software application projects drag?

Simple Interface Implementations

Page 29: Why do complex software application projects drag?

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?

Dynamic Interface Implementation

Sandbox any sort of state, any constellation

Page 31: Why do complex software application projects drag?

Abstracted actions

Log action call and parameters Combined with data backup, allows replay of system

operation− Automated testing− Shadow data repository