{"id":192,"date":"2014-11-21T11:59:33","date_gmt":"2014-11-21T11:59:33","guid":{"rendered":"http:\/\/www.davefarley.net\/?p=192"},"modified":"2017-01-24T12:01:04","modified_gmt":"2017-01-24T12:01:04","slug":"the-reactive-manifesto","status":"publish","type":"post","link":"https:\/\/www.davefarley.net\/?p=192","title":{"rendered":"The Reactive Manifesto"},"content":{"rendered":"<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">Over the past couple of months I have been helping out some friends to update the\u00a0<a style=\"text-align: left; background-color: transparent; vertical-align: baseline; color: #0066cc; margin: 0px; padding: 0px; border: 0px none white;\" href=\"https:\/\/archive.is\/o\/LLhot\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">There are several reasons why I agreed to help. First I was asked to, by my old friend\u00a0<a style=\"text-align: left; background-color: transparent; vertical-align: baseline; color: #0066cc; margin: 0px; padding: 0px; border: 0px none white;\" href=\"https:\/\/archive.is\/o\/LLhot\/mechanical-sympathy.blogspot.co.uk\/\">Martin Thompson<\/a>. The most important reason though is because I think that this is an important idea.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">The\u00a0<a style=\"text-align: left; background-color: transparent; vertical-align: baseline; color: #0066cc; margin: 0px; padding: 0px; border: 0px none white;\" href=\"https:\/\/archive.is\/o\/LLhot\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>\u00a0starts from a simple thought. 21st Century problems are not well-served by 20th Century assumptions of software architecture. The game is moving on!<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">There are lots of reasons for this: The problems that we are asked to tackle are growing in scale, sometimes in complexity too; The demands of our users are changing; The hardware environment has, and continues to change. The rate of change in our best businesses is increasing.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">Talk to any of my friends and they will, no doubt, tell you that I am a bore on the topic of software design \u2013 as well as several other subjects<br \/>\n<img style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\" src=\"data:image\/gif;base64,R0lGODlhDwAPAPMAAP\/qAEVFRQAAAP\/OAP\/JAP6dAP+0AP\/+k\/\/9E\/\/\/x\/\/lAP\/\/6wAAAAAAAAAAAAAAACH5BAEAAAwALAAAAAAPAA8AAARXkEkZap2Y1ZXOGRcWcAgCnEMRTEEnnDCQrtrxxjCoJSZw+y+CKnDo\/WAEQ+WAwyUrvWZQGRg0TwKFcFX1xYI6zWCgEJizhBlrTGi31aKAYW4YZlgW2iQCADs=\" alt=\";-)\" \/><br \/>\n<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">I think that we, as an industry, don\u2019t spend enough time thinking about the design of our solutions. Too often we start out projects by saying \u201cI have my language installed, my web-server, I have Spring, Hibernate, Ruby-on-Rails, &lt;insert your favourite framework here&gt; and \u00a0my database ready to go \u2013 now, what is the problem?\u201d. We have become lazy and look for cookie-cutter solutions. We then proceed to write code in straight-lines \u2013 poor abstraction, little modelling, rotten separation of concerns. Where is the fun in any of that?<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">I get genuine pleasure from creating solutions to problems, but I don\u2019t get pleasure from just any old solution. Code that only does the job is not enough for me. I want to do the job with as few instructions as possible, as little duplication. I want the systems that I write to be efficient, readable, testable, flexible, easy to maintain, high-quality, dare I say elegant!<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">I have been lucky enough to work on a few systems that looked like this. Do you know what? When we achieve those things we are also more efficient and more cost-effective as developers. The software that we create is more efficient too, it runs faster, does more with fewer instructions and is more flexible. This not over-engineering, this is professionalism.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">Interestingly their are sometimes similarities in the course-grained architecture of such systems, at least on the larger ones that I have worked on. They are loose-coupled, based on services that implement specific bounded-contexts within the problem domain, that communicate with each other only via asynchronous messaging. These systems almost never look like the standard, out-of-the-box three-layer architecture built on top of a relational database, although pieces of them may use some of the standard technologies, including RDBMS.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">The hardware environment in which our software executes is changing. The difference in the cost per byte between RAM and disk is reducing. The capacity of RAM is increasing dramatically. Distributed programming is the norm now, the relative performance of some of our hardware infrastructure has changed (e.g. Network is now faster than disk). Large-scale non-volatile RAM is on the horizon. All this means that the assumptions that underpinned the \u2018standard-approach\u2019 have changed. The old assumptions don\u2019t match either the hardware environment nor the problems that we are solving.\u00a0<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">The\u00a0<a style=\"text-align: left; background-color: transparent; vertical-align: baseline; color: #0066cc; margin: 0px; padding: 0px; border: 0px none white;\" href=\"https:\/\/archive.is\/o\/LLhot\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>\u00a0is about discarding some of those assumptions. About more effectively modelling the problems in our problem domain, writing code that is easier to test, more efficient to run, easier to distribute and that is dramatically more flexible in use.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">Take a look at the\u00a0<a style=\"text-align: left; background-color: transparent; vertical-align: baseline; color: #0066cc; margin: 0px; padding: 0px; border: 0px none white;\" href=\"https:\/\/archive.is\/o\/LLhot\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>. If you think we are right please sign it, more than 8000 other people have done so so far. If you think we are wrong, tell us where.<br \/>\n<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><span style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px; padding: 0px; border: 0px none white;\">Most importantly of all, please don\u2019t assume that the same old way of doing things is the best approach to every problem.<\/span><\/div>\n<div style=\"text-align: left; background-color: transparent; vertical-align: baseline; margin: 0px 0px 24px; padding: 0px; border: 0px none white;\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Over the past couple of months I have been helping out some friends to update the\u00a0Reactive Manifesto. There are several reasons why I agreed to help. First I was asked to, by my old friend\u00a0Martin Thompson. The most important reason &hellip; <a href=\"https:\/\/www.davefarley.net\/?p=192\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20,3,21,24,22,23],"tags":[],"_links":{"self":[{"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/posts\/192"}],"collection":[{"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=192"}],"version-history":[{"count":2,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions"}],"predecessor-version":[{"id":194,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=\/wp\/v2\/posts\/192\/revisions\/194"}],"wp:attachment":[{"href":"https:\/\/www.davefarley.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.davefarley.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}