Lets focus on business value


Published on

A talk I presented at Southern California Team System, 26th of February 2013 about the importance of delivering business value and how you as a developer can much easier meet the requirements of the end user by applying practices like DDD and utilizing things like CQRS and MVVM to help decouple your software and focus better.

1 Like
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

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

    1. 1. Lets focus on business value Power point template by Colin Eberhardt
    2. 2. AgendaHow to focus on business valueDomain Driven DesignConcrete patterns; CQRS, MVVMBifrost – an open-source framework to cover it all
    3. 3. Who am I Einar Ingebrigtsen @einari einar@dolittle.com http_//www.dolittle.com http://blog.dolittle.com http://www.ingebrigtsen.info
    4. 4. StatisticsSoftware projects2009:- 32% successful- 24% failed- 44% challenged2004: - Cancelled projects cost $55 Billion Annually http://www.projectsmart.co.uk/docs/chaos-report.pdf
    5. 5. Statisticshttp://www.typemock.com/blog/2012/07/18/the-severity-of-bugs-are-we-doomed/
    6. 6. 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, RavenDBJoin the alpha geek crew and use all thelatest buzz words and create an architecturearound that showcase our technical skills?
    7. 7. What is business value? The short answerHelping the business achieve its objectives Faster Simpler Cheaper Better More
    8. 8. Why is this hard to do?Developers don’t understand what thebusiness needsThe Business doesn’t understand what thebusiness needs
    9. 9. 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
    10. 10. Why is this hard to do? If somehow we’ve managed to get ourinfrastructure in place and give the business what it needs, it’s TOO LATE! Legal New Market Changes Priorities Changes New New Acquisitions Requirements Competitor
    11. 11. Be agile!Not just in terms of process (Scrum, Kanban, XP)We need to be able to change decisions priorities CODE!!
    12. 12. Understand who your user is
    13. 13. Feedback loopTalk to users regularlyTest TDD / BDD Executable Specifications Testers
    14. 14. Please fail!Fail regularly and fail fastBe Agile and really iterateBe honest!
    15. 15. Domain Driven DesignFocus on the core domainCreative collaboration between domainexperts and software practitionersCreate a common language and commonunderstanding of the domain
    16. 16. Domain Driven DesignBuilding blocks Aggregate Roots Value Objects Services Repositories Entities … and more…
    17. 17. Bounded ContextsDifferent representations in differentcontexts
    18. 18. Bounded Contexts - Shopping
    19. 19. Bounded Contexts – Shift ManagementEmployee Plays a central role – identified by Social Security NumberSubstitute It refers to the Employee by concept, but we do not need its address – only its availability and possibly its name for display purposes
    20. 20. DecouplingApplication Level Make many applicationsUnit Level Interchangeable componentsNew Code Velocity
    21. 21. The opposite of decouplingDRY – Don’t Repeat YourselfUse of concrete implementations
    22. 22. Single Responsibility PrincipleTypes represent one thingMethods do only one thingBe fine grained and clearEasier to name
    23. 23. CQRS Client Command Queries Domain Event Handlers Publish Persist UpdateDomain Persistence Read Model
    24. 24. CommandExpresses what should happenShould express intent AddItem- / AddAccessory- ToCart - maps to AddProduct() on the AggregateRoot
    25. 25. EventSourceThe source of eventsThe place that events originate from
    26. 26. Aggregate RootHolds only internal state, if needed - nopublic stateExposes behavior as methods
    27. 27. EventRepresents the truth in the system; 
“... thisis what happened...”Simple DTO with primitive properties only!
    28. 28. MVVM Model Get from server ViewObserves Observable ViewModel
    29. 29. bifrost
    30. 30. BifrostFull end to end framework for line-of-business application developmentPromotes good practices such as CQRS,MVVM through high focus on DDDYou don’t need the entire thing, but will getbenefits for every component you add
    31. 31. BifrostOur 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!”
    32. 32. BifrostClient focus JavaScript ASP.net Single Page Applications Web in general Silverlight WinRT (Experimental)
    33. 33. BifrostBackend CQRS Cloud scaleRealtime applications Clients persistently connected to the server
    34. 34. Bifrost - Architecture Client Result that affect Queries and Invoke Behavior Results / Read Models Meta Data Server Queries DomainRead Models Meta Data
    35. 35. CQRS – Bifrost Style Client Command Command Coordinator Command Handler(s) Aggregate Root Read Model Event Subscriber(s) Events EventStore
    36. 36. User storyPersona: Hannah Works with human resources, she is responsible for hiring of permanent employees but also for finding substitutes when people are on sick leavesAs Hannah I need to be able to quicklyregister any employees coming in before wegot all the details about the person
    37. 37. User storyRequirements First Name - Required Last Name - Required Social Security Number – Required This is what identifies a person uniquely
    38. 38. Where are we?? Client Model View ViewModel Command Command Handler(s) Aggregate Root Read Model Event Subscriber(s) Events EventStore
    39. 39. Bifrost – What did we solve?Decoupling Commands representing the behavior Events are the contract Read and behavior are two different thingsWorking in parallelMaking it easier to apply agile principles
    40. 40. Bifrost - RoadmapRealtime applications Clients persistently connected to the serverRefine client modelFormalizations Bounded Context, Modules …SimplificationsScale out options Redis, Azure ++
    41. 41. Getting started
    42. 42. SummaryDomain Driven DesignWill help you establish a language and understand what you’re creatingCQRSLets you establish a set of good patterns and practices, mind openerBifrostOne incarnation – but not look at it as a CQRS implementation, it is so much morePlease rate the talk athttp://tinyurl.com/BusinessValue2 http://blog.dolittle.com http://bifrost.dolittle.com
    43. 43. Thanks for your attention