1. Software development strategies should be evaluated through an economic lens considering value, cost, risk, and debt to business needs. An iterative, incremental approach delivers value early while keeping options open and managing risk.
2. Managing dependencies is important as dependencies increase the cost of changing code over time. Techniques like dependency injection, inversion of control, and separating code into vertical and horizontal slices can help manage dependencies.
3. Individual classes should not be considered in isolation, but rather as parts of larger modules or components. This viewpoint helps evaluate single responsibility, collaborations/dependencies, and testing at the module level rather than just the class level.
11. and will let you use the same language from business
Developing an economic
mindset will help you with your
decision making
12. Makes easier to achieve a common goal, a shared vision
Speaking the same language
improves conversation and
trust
13. Economies of scale Cost of opportunity
Cost of acquisition
Marginal cost
Time to market
Return of Investment
RiskDebt, loans, interest
Time Value of MoneyCash flow
Balance sheetLiquidity
Throughput accountingCost accounting
Net present value Real options
Business mindset
Value Cost
14. Economies of scale Cost of opportunity
Cost of acquisition
Marginal cost
Time to market
Return of Investment
RiskDebt, loans, interest
Time Value of MoneyCash flow
Balance sheetLiquidity
Throughput accountingCost accounting
Net present value Real options
In this talk
Value Cost
17. Early delivery of value,
What does business need?
ROI
Risk reduction
Hypothesis validation
Stakeholders shared vision
18. Early delivery of value,
with the lowest possible cost,
What does business need?
19. Early delivery of value,
with the lowest possible cost,
keeping options open,
What does business need?
So that risk is reduced
To face uncertainty with better odds
20. Early delivery of value,
with the lowest possible cost,
keeping options open,
with debt under control
What does business need?
To avoid being unable to pay it off in the future
21. How are our coding strategies
and practices aligned with
business needs?
22. We are biased
Refactoring a Good Thing™
Waterfall is a Bad Thing™
Business people don’t understand us™
23. Can you explain your coding
strategies and practices in terms
of value, cost, options, risk and
debt?
24. How to deal with technology
Context & Tradeoffs
28. Often forgetting to talk about when (context)
Software community is great writing
articles about what & how
29. or how to combine other needs (tradeoffs)
Often forgetting to talk about when (context)
Software community is great writing
articles about what & how
30. How do we choose from the
overwhelming list of things that
we should know?
31. How do we decide what’s the next
thing to work on?
41. In an IT context, when you need to decrease the risk of delivering
misunderstood needs (continuous feedback from stakeholders)
In a Start-up context, when you need to validate your hypothesis
and discover your product
But costs are less important than
value, risk or debt
61. Better value risk and debt, but
we have to deal with the cost
of change
62.
63. First vertical
feature hits
production
We mean by vertical as the minimum
amount of software that adds value,
gets feedback (deals with
uncertainty) and can be shipped to
users
74. To satisfy business needs,
we need to be aware of
economic implications of our
development strategy,
expressed in terms of value,
cost, options, risk and debt.
75. This implies an iterative,
incremental development
strategy of vertical slices
91. Context Boundaries Dependency Injection by constructor
Injection Container / Service Locator
Static abuse / Implicit dependencies
Declarative style
Law of Demeter
Extended SOLIDSOLID
Getters and setters are evilLocal retention / Encapsulation
ModularityAnemic model
Hexagonal architectureVertical & horizontal mental model
Test harness and test doubles Parallel change refactoring
Mikado method Self similarity principle
Inversion of Control
Tools & topics about code dependency management
92. Context Boundaries Dependency Injection by constructor
Injection Container / Service Locator
Static abuse / Implicit dependencies
Declarative style
Law of Demeter
Extended SOLIDSOLID
Getters and setters are evilLocal retention / Encapsulation
ModularityAnemic model
Hexagonal architectureVertical & horizontal mental model
Test harness and test doubles Parallel change refactoring
Mikado method Self similarity principle
Inversion of Control
This talk
93. We need a holistic approach
Abstraction - composition - dependencies
cost to understand - change - evolve
Warning
94. Dependencies are just a lens from which to analyze software
There are other lenses
Warning
95. 2
Reusing is creating dependencies
Good code supports Options
Stop thinking in individual classes
1
3
164. How do we choose what’s inside the Hexagon and what
lies outside?
Your design needs to support Options but how do you
balance it with Y.A.G.N.I.?
How are you going to defer decisions?