Strategic software design

Domains

Generic Domains

not specific to your business

eg : accounting

understood by other companies as well

should be

bought

produced as cheap as possible

outsourcing

Supporting domains

specific to your business but not core

if needed

can be outsourced

eg: amazon book rating by users/readers

Core domains

eg: seller rating by users/buyers

directly relates to

strategy of the company

which often needs to change

due to market conditions

and how software is used to leverage that strategy

need to be developed

by best & most responsible developers

colocated & close to business

usually relatively small

4th solution

Focus on CORE domain

don't fix 'everything'

create Bounded Contexts (BoCo)

and stay consistent in this context only

eg allow duplication between BoCo's

start with platform

anti corruption layer

interfaces with

the big ball of mud

translates

often an ugly layer

introducing even more mudd in the ball of mud

alternative is

then build on top of that

(or within its safe border)

the Core Domain

Model the elephant

hindu story

blind people try to describe an elephant

touching side

elephant is a wall

touching knee

elephant is a tree

touching tail

elephant is a rope

touching trunk

elephant is a snake

model of elephant

is NOT the elephant

describes the elephants features needed in a certain context

could be a wall

supported by 4 trees

withe a snake

and a rope attached on either end: -)

in the context of a single BoCo

an elephant

can be described accuratley enough as a tree

irresponsible hero's

much credit

because they work in

CORE domain

close to business needs

caused instability

is fixed by people

quite

responsible

competent

even though

their solution

has a high cost of delivery

which usually remains invisible

context

problem

new features don't map to legacy system

common solutions

system 2.0

replace legacy with new system

refactor legacy

hack

Subtopic

common results

system 2.0

never gets finished

old legacy is more complex than expected

concepts just copied rather than reworked

refactor

goes on for ever

old legacy is more complex than expected

hack

system becomes more & more

unreliable

unstable