Lets focus on business value




         Power point template by
            Colin Eberhardt
Agenda



How to focus on business value

Domain Driven Design

Concrete patterns; CQRS, MVVM

Bifrost – an open-source framework to cover it all
Who am I




                 Einar Ingebrigtsen




       @einari           einar@dolittle.com


                      http_//www.dolittle.com
                        http://blog.dolittle.com
                 http://www.ingebrigtsen.info
Statistics

Software projects
2009:
- 32% successful
- 24% failed
- 44% challenged

2004:
 - Cancelled projects cost $55 Billion Annually
 http://www.projectsmart.co.uk/docs/chaos-report.pdf
Statistics




http://www.typemock.com/blog/2012/07/18/the-severity-of-bugs-are-we-doomed/
What are we getting paid to do?



Use the most fancy technology out there
 C# 5.0, Roslyn, F#, TPL, ASP.net MVC 3,
 SignalR, RavenDB


Join the alpha geek crew and use all the
latest buzz words and create an architecture
around that showcase our technical skills?
What is business value?


               The short answer

Helping the business achieve its
           objectives

 Faster   Simpler   Cheaper   Better   More
Why is this hard to do?



Developers don’t understand what the
business needs

The Business doesn’t understand what the
business needs
Why is this hard to do?


Even if we do understand what they want,
      we can’t build it because of ...

   Race                                                  Eager
 conditions
              Transactions   Logging    Serialization               Performance
                                                        loading


                                                                      Lazy
 Caching      Mapping        Auditing   Concurrency     Staleness
                                                                    loading
Why is this hard to do?

    If somehow we’ve managed to get our
infrastructure in place and give the business
         what it needs, it’s TOO LATE!


           Legal           New          Market
          Changes        Priorities     Changes



                           New           New
         Acquisitions
                        Requirements   Competitor
Be agile!



Not just in terms of process
 (Scrum, Kanban, XP)


We need to be able to change
 decisions
 priorities
 CODE!!
Understand who your user is
Feedback loop



Talk to users regularly

Test
 TDD / BDD
 Executable Specifications
 Testers
Please fail!




Fail regularly and fail fast

Be Agile and really iterate

Be honest!
Domain Driven Design


Focus on the core domain

Creative collaboration between domain
experts and software practitioners

Create a common language and common
understanding of the domain
Domain Driven Design



Building blocks
 Aggregate Roots
 Value Objects
 Services
 Repositories
 Entities
 … and more…
Bounded Contexts




Different representations in different
contexts
Bounded Contexts - Shopping
Bounded Contexts – Shift Management


Employee
 Plays a central role – identified by Social Security
 Number


Substitute
 It refers to the Employee by concept, but we do
 not need its address – only its availability and
 possibly its name for display purposes
Decoupling


Application Level
 Make many applications


Unit Level
 Interchangeable components


New Code
 Velocity
The opposite of decoupling




DRY – Don’t Repeat Yourself

Use of concrete implementations
Single Responsibility Principle


Types represent one thing

Methods do only one thing

Be fine grained and clear

Easier to name
CQRS

                                  Client


   Command


                                                       Queries
     Domain                    Event Handlers
                     Publish

         Persist               Update




Domain Persistence                              Read Model
Command




Expresses what should happen

Should express intent
 AddItem- / AddAccessory- ToCart - maps to
 AddProduct() on the AggregateRoot
EventSource




The source of events

The place that events originate from
Aggregate Root




Holds only internal state, if needed - no
public state

Exposes behavior as methods
Event




Represents the truth in the system; 
“... this
is what happened...”

Simple DTO with primitive properties only!
MVVM


                  Model   Get from server




           View


Observes
                          Observable
             ViewModel
bifrost
Bifrost


Full end to end framework for line-of-
business application development

Promotes good practices such as CQRS,
MVVM through high focus on DDD

You don’t need the entire thing, but will get
benefits for every component you add
Bifrost




Our motivation
 A platform for us to build LOB applications on
 Make us focus on delivering business value
 Easy to use, hard to use wrong
 “It just works!”
Bifrost



Client focus
 JavaScript
 ASP.net
 Single Page Applications
 Web in general
 Silverlight
 WinRT (Experimental)
Bifrost



Backend
 CQRS
 Cloud scale


Realtime applications
 Clients persistently connected to the server
Bifrost - Architecture
                       Client




  Result that affect
  Queries and                   Invoke Behavior               Results /
  Read Models                                                 Meta Data




                       Server

  Queries                                          Domain

Read Models                                       Meta Data
CQRS – Bifrost Style
                  Client

                                     Command

                                      Command
                                     Coordinator

                                      Command
                                      Handler(s)

                                    Aggregate Root


 Read Model   Event Subscriber(s)       Events


                                      EventStore
User story


Persona: Hannah
 Works with human resources, she is responsible
 for hiring of permanent employees but also for
 finding substitutes when people are on sick
 leaves


As Hannah I need to be able to quickly
register any employees coming in before we
got all the details about the person
User story




Requirements
 First Name - Required
 Last Name - Required
 Social Security Number – Required
  This is what identifies a person uniquely
Where are we??
                  Client

     Model          View            ViewModel



                                      Command

                                      Command
                                      Handler(s)

                                    Aggregate Root


 Read Model   Event Subscriber(s)       Events


                                      EventStore
Bifrost – What did we solve?




Decoupling
  Commands representing the behavior
  Events are the contract
  Read and behavior are two different things


Working in parallel

Making it easier to apply agile principles
Bifrost - Roadmap


Realtime applications
  Clients persistently connected to the server


Refine client model

Formalizations
  Bounded Context, Modules …


Simplifications

Scale out options
  Redis, Azure ++
Getting started
Summary




Domain Driven Design
Will help you establish a language and understand what you’re creating


CQRS
Lets you establish a set of good patterns and practices, mind opener

Bifrost
One incarnation – but not look at it as a CQRS implementation, it is so much more

Please rate the talk at
http://tinyurl.com/BusinessValue2


  http://blog.dolittle.com http://bifrost.dolittle.com
Thanks for your
   attention
Lets focus on business value

Lets focus on business value

  • 2.
    Lets focus onbusiness value Power point template by Colin Eberhardt
  • 3.
    Agenda How to focuson business value Domain Driven Design Concrete patterns; CQRS, MVVM Bifrost – an open-source framework to cover it all
  • 4.
    Who am I Einar Ingebrigtsen @einari einar@dolittle.com http_//www.dolittle.com http://blog.dolittle.com http://www.ingebrigtsen.info
  • 5.
    Statistics Software projects 2009: - 32%successful - 24% failed - 44% challenged 2004: - Cancelled projects cost $55 Billion Annually http://www.projectsmart.co.uk/docs/chaos-report.pdf
  • 6.
  • 7.
    What are wegetting paid to do? Use the most fancy technology out there C# 5.0, Roslyn, F#, TPL, ASP.net MVC 3, SignalR, RavenDB Join the alpha geek crew and use all the latest buzz words and create an architecture around that showcase our technical skills?
  • 8.
    What is businessvalue? The short answer Helping the business achieve its objectives Faster Simpler Cheaper Better More
  • 9.
    Why is thishard to do? Developers don’t understand what the business needs The Business doesn’t understand what the business needs
  • 10.
    Why is thishard to do? Even if we do understand what they want, we can’t build it because of ... Race Eager conditions Transactions Logging Serialization Performance loading Lazy Caching Mapping Auditing Concurrency Staleness loading
  • 11.
    Why is thishard to do? If somehow we’ve managed to get our infrastructure in place and give the business what it needs, it’s TOO LATE! Legal New Market Changes Priorities Changes New New Acquisitions Requirements Competitor
  • 12.
    Be agile! Not justin terms of process (Scrum, Kanban, XP) We need to be able to change decisions priorities CODE!!
  • 13.
  • 14.
    Feedback loop Talk tousers regularly Test TDD / BDD Executable Specifications Testers
  • 15.
    Please fail! Fail regularlyand fail fast Be Agile and really iterate Be honest!
  • 16.
    Domain Driven Design Focuson the core domain Creative collaboration between domain experts and software practitioners Create a common language and common understanding of the domain
  • 17.
    Domain Driven Design Buildingblocks Aggregate Roots Value Objects Services Repositories Entities … and more…
  • 18.
  • 19.
  • 20.
    Bounded Contexts –Shift Management Employee Plays a central role – identified by Social Security Number Substitute It refers to the Employee by concept, but we do not need its address – only its availability and possibly its name for display purposes
  • 21.
    Decoupling Application Level Makemany applications Unit Level Interchangeable components New Code Velocity
  • 22.
    The opposite ofdecoupling DRY – Don’t Repeat Yourself Use of concrete implementations
  • 23.
    Single Responsibility Principle Typesrepresent one thing Methods do only one thing Be fine grained and clear Easier to name
  • 24.
    CQRS Client Command Queries Domain Event Handlers Publish Persist Update Domain Persistence Read Model
  • 25.
    Command Expresses what shouldhappen Should express intent AddItem- / AddAccessory- ToCart - maps to AddProduct() on the AggregateRoot
  • 26.
    EventSource The source ofevents The place that events originate from
  • 27.
    Aggregate Root Holds onlyinternal state, if needed - no public state Exposes behavior as methods
  • 28.
    Event Represents the truthin the system; 
“... this is what happened...” Simple DTO with primitive properties only!
  • 29.
    MVVM Model Get from server View Observes Observable ViewModel
  • 30.
  • 31.
    Bifrost Full end toend framework for line-of- business application development Promotes good practices such as CQRS, MVVM through high focus on DDD You don’t need the entire thing, but will get benefits for every component you add
  • 32.
    Bifrost Our motivation Aplatform for us to build LOB applications on Make us focus on delivering business value Easy to use, hard to use wrong “It just works!”
  • 33.
    Bifrost Client focus JavaScript ASP.net Single Page Applications Web in general Silverlight WinRT (Experimental)
  • 34.
    Bifrost Backend CQRS Cloudscale Realtime applications Clients persistently connected to the server
  • 35.
    Bifrost - Architecture Client Result that affect Queries and Invoke Behavior Results / Read Models Meta Data Server Queries Domain Read Models Meta Data
  • 36.
    CQRS – BifrostStyle Client Command Command Coordinator Command Handler(s) Aggregate Root Read Model Event Subscriber(s) Events EventStore
  • 38.
    User story Persona: Hannah Works with human resources, she is responsible for hiring of permanent employees but also for finding substitutes when people are on sick leaves As Hannah I need to be able to quickly register any employees coming in before we got all the details about the person
  • 39.
    User story Requirements FirstName - Required Last Name - Required Social Security Number – Required This is what identifies a person uniquely
  • 40.
    Where are we?? Client Model View ViewModel Command Command Handler(s) Aggregate Root Read Model Event Subscriber(s) Events EventStore
  • 41.
    Bifrost – Whatdid we solve? Decoupling Commands representing the behavior Events are the contract Read and behavior are two different things Working in parallel Making it easier to apply agile principles
  • 42.
    Bifrost - Roadmap Realtimeapplications Clients persistently connected to the server Refine client model Formalizations Bounded Context, Modules … Simplifications Scale out options Redis, Azure ++
  • 43.
  • 45.
    Summary Domain Driven Design Willhelp you establish a language and understand what you’re creating CQRS Lets you establish a set of good patterns and practices, mind opener Bifrost One incarnation – but not look at it as a CQRS implementation, it is so much more Please rate the talk at http://tinyurl.com/BusinessValue2 http://blog.dolittle.com http://bifrost.dolittle.com
  • 46.

Editor's Notes

  • #16 Bring up Saga, EventStore, View->Query->ReadHonesty is really omportant – people tend to cover up failures!
  • #22 Fewer regression bugsMore stabile softwareEasier to estimate and be on timeLess complexityWriting mostly new code at this point – true velocity!
  • #23 DRY : Inheritance for instance – to save propertiesPut in place abstractions for your application needs – not rewrite things!
  • #24 The S in SOLID