want to go home (Who likes crunching?) ◉ We don't want to fail: ◦ Fail by having the project rewritten ◦ Fail by not delivering value soon enough and have the company go under ◦ Fail by not delivering value soon enough and being fired
aware, it gives you a domain layer, aka as the Model ◉ You're supposed to put your business logic in the model ◉ However, over time the model becomes too small for an evolving set of business logic ◉ Active Record -> Active Model DDD in Ruby's history
same problem: ◉ If you use your framework's features to define your domain model, eventually your infrastructure will not accommodate you evolving business logic. DDD in Ruby's history
points will suspend a driver? ◦ How long do points count towards suspension? ◉ Things the domain doesn't care about: ◦ New URL for fetching infractions ◦ Infractions are now coming from a FTP text file ◦ New HTTP client, faster, more secure ◦ What if the web service doesn't have a test endpoint? DDD Crash Course
you forget an index on the DB you'll have to rollback ◉ You'll need a test/staging env as close as possible to production ◉ DDD vs 12 factor app* Beware of pitfalls though *https://12factor.net
think of DDD as a tool, but Design skills need to be developed over time ◉ You will discover improvements/mistakes along the way ◉ An environment that fosters refactorings will make your life better DDD means refactorings
not enough. ◉ Domain/Application/Infrastructure ◉ DDD can fail if an evolving model does not come with a decent shipping pipeline. ◉ Deploying once a month is not enough. ◉ What's the cost of replacing obsolete libraries? E.g. Resque vs Sidekiq, HTTParty vs Faraday Conclusion