{"id":1911,"date":"2017-01-02T21:07:01","date_gmt":"2017-01-02T20:07:01","guid":{"rendered":"https:\/\/www.entropywins.wtf\/blog\/?p=1911"},"modified":"2018-08-20T08:25:53","modified_gmt":"2018-08-20T07:25:53","slug":"simple-is-not-easy","status":"publish","type":"post","link":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","title":{"rendered":"Simple is not easy"},"content":{"rendered":"<p>Simplicity is possibly the single most important thing on the technical side of software development. It is crucial to keep development costs down and external quality high. This blog post is about why simplicity is not the same thing as easiness, and common misconceptions around these terms.<\/p>\n<h3>Simple is not easy<\/h3>\n<p><strong>Simple<\/strong> is the opposite of <strong>complex<\/strong>. Both are a measure of <strong>complexity<\/strong>, which arises from intertwining things such as concepts and responsibilities. Complexity is objective, and certain aspects of it, such as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Cyclomatic_complexity\">Cyclomatic Complexity<\/a>, can be measured with many code quality tools.<\/p>\n<p><strong>Easy<\/strong> is the opposite of <strong>hard<\/strong>. Both are a measure of <strong>effort<\/strong>, which unlike complexity, is subjective and highly dependent on the context. For instance, it can be quite hard to rename a method in a large codebase if you do not have a tool that allows doing so safely. Similarly, it can be difficult to understand an OO project if you are not familiar with OO.<\/p>\n<h3>Achieving simplicity is hard<\/h3>\n<blockquote><p>I&#8217;m sorry I wrote you such a long letter; I didn&#8217;t have time to write a short one.<\/p>\n<p>&#8212; <a href=\"https:\/\/en.wikipedia.org\/wiki\/Blaise_Pascal\"><span class=\"inline_editor_value\"><span class=\"rendered_qtext\">Blaise Pascal<\/span><\/span><\/a><\/p><\/blockquote>\n<p>Finding simple solutions, or brief ways to express something clearly, is harder than finding something that works but is more complex. In other words, achieving simplicity is hard. This is unfortunate, since dealing with complexity is also hard.<\/p>\n<p>In recent decades the cost of software maintenance has become much greater than the cost of its creation, so it makes sense to make maintenance as easy as we can. This means avoiding as much complexity as we can during the creation of the software, which is a hard task. The cost of the complexity does not suddenly appear once the software goes into an official maintenance phase, it is there on day 2, when you need to deal with code from day 1.<\/p>\n<h3>Good design requires thought<\/h3>\n<blockquote><p><span class=\"highlight\">Questions about whether design is necessary or affordable are quite beside the point: design is inevitable. The alternative to good design is bad design, not no design at all<\/span>.<\/p>\n<p>&#8212; Vaughn Vernon in <a href=\"https:\/\/www.goodreads.com\/book\/show\/28602719-domain-driven-design-distilled\">Domain-Driven Design Distilled<\/a><\/p><\/blockquote>\n<p>Some people in the field conflate simple and easy in a particularly unfortunate manner. They reason that if you need to think a lot about how to create a design, it will be hard to understand the design. Clearly, thinking a lot about a design does not guarantee that it is good and minimizes complexity. You can do a good job and create something simple or you can overengineer. There is however one guarantee that can be made based on the effort spent: for non-trivial problems, if little effort was spent (by going for the easy approach), the solution is going to be more complex than it could have been.<\/p>\n<p>One high-profile case of such conflation can be found in the principles behind the <a href=\"http:\/\/agilemanifesto.org\/\">Agile Manifesto<\/a>. While I don&#8217;t fully agree with some of the other principles, this is the only one I strongly disagree with (unless you remove the middle part). Yay <a href=\"http:\/\/manifesto.softwarecraftsmanship.org\/\">Software Craftsmanship manifesto<\/a>.<\/p>\n<blockquote><p>Simplicity&#8211;the art of maximizing the amount of work not done&#8211;is essential<\/p>\n<p>&#8212; <a href=\"http:\/\/agilemanifesto.org\/principles.html\">Principles behind the Agile Manifesto<\/a><\/p><\/blockquote>\n<p>Similarly we should be careful to not confuse the ease of understanding a system with the ease of understanding how or why it was created the way it was. The latter, while still easier than the actual task of creating a simple solution, is still going to be harder than working with said simple solution, especially for those that lack the skills used in its creation.<\/p>\n<p>Again, I found a relatively high-profile example of such confusion:<\/p>\n<blockquote><p>If the implementation is hard to explain, it&#8217;s a bad idea. If the implementation is easy to explain, it may be a good idea.<\/p>\n<p>&#8212; <a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0020\/\">The Zen of Python<\/a><\/p><\/blockquote>\n<p>I think this is just wrong.<\/p>\n<p>You can throw all books in a library onto a big pile and then claim it&#8217;s easy to explain where a particular book is &#8211; in the pile &#8211; though actually finding the book is a bigger challenge. It&#8217;s true that you need more skills to use a well-organized library effectively than you need to go through a pile of books randomly. You need to know the alphabet, be familiar with the concept of genres, etc. Clearly an organized library is easier to deal with than our pile of books for anyone that has those skills.<\/p>\n<p>It is also true that sometimes it does not make sense to invest in the skill that allows working more effectively, and that sometimes you simply cannot find people with the desired skills. This is where the real bottleneck is: learning. Most of the time these investments are worth it, as they allow you to work <em>both<\/em> faster and better from that point on.<\/p>\n<p><a href=\"https:\/\/www.flickr.com\/photos\/callumscott2\/280532292\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1932\" data-permalink=\"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/pike-o-books\/\" data-orig-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png\" data-orig-size=\"1269,544\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"pike-o-books\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png\" class=\"alignnone wp-image-1932\" src=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png\" width=\"800\" height=\"343\" \/><\/a><\/p>\n<h3>See also<\/h3>\n<p>Following the reasoning in this blog post, you cannot trade software quality for lower cost. You can read more about this in the <a href=\"http:\/\/martinfowler.com\/bliki\/TradableQualityHypothesis.html\">Tradable Quality Hypothesis<\/a> and <a href=\"http:\/\/martinfowler.com\/bliki\/DesignStaminaHypothesis.html\">Design Stamina Hypothesis<\/a> articles.<\/p>\n<p>Ocramius wrote a fun post touching on the same topic titled <a href=\"https:\/\/ocramius.github.io\/blog\/eliminating-visual-debt\/\">Eliminating Visual Debt<\/a>.<\/p>\n<p>The main source of inspiration that led me to this blog post is <a href=\"https:\/\/www.youtube.com\/watch?v=rI8tNMsozo0\">Rich Hickeys 2012 Rails Conf keynote<\/a>, where he starts by differentiating simple and easy. If you don&#8217;t know who Rich Hickey is (he created <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clojure\">Clojure<\/a>), go watch all his talks on YouTube now, well worth the time. (I don&#8217;t agree with everything he says but it tends to be interesting regardless.) You can start with this keynote, which goes into more detail than this blog post and adds a bunch of extra goodies on top. &lt;3 Rich<\/p>\n<p>In <a href=\"https:\/\/www.entropywins.wtf\/blog\/2014\/03\/17\/big-ball-of-mud\/\">my reply to the Big Ball of Mud paper<\/a> I also talk about how achieving simplicity requires effort.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Simplicity is possibly the single most important thing on the technical side of software development. It is crucial to keep&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":true,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[7],"tags":[330,328,439,386,197,215,438,430,365,316,440],"class_list":["post-1911","post","type-post","status-publish","format-standard","hentry","category-programming","tag-agile","tag-clean-code","tag-complexity","tag-learning","tag-planet-wikimedia","tag-refactoring","tag-simplicity","tag-software-architecture","tag-software-craftsmanship","tag-software-design","tag-the-zen-of-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Simple is not easy - Blog of Jeroen De Dauw<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simple is not easy - Blog of Jeroen De Dauw\" \/>\n<meta property=\"og:description\" content=\"Simplicity is possibly the single most important thing on the technical side of software development. It is crucial to keep&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog of Jeroen De Dauw\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-02T20:07:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-08-20T07:25:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png\" \/>\n<meta name=\"author\" content=\"Jeroen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/JeroenDeDauw\" \/>\n<meta name=\"twitter:site\" content=\"@JeroenDeDauw\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeroen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/\"},\"author\":{\"name\":\"Jeroen\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"headline\":\"Simple is not easy\",\"datePublished\":\"2017-01-02T20:07:01+00:00\",\"dateModified\":\"2018-08-20T07:25:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/\"},\"wordCount\":957,\"commentCount\":9,\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/pike-o-books.png\",\"keywords\":[\"Agile\",\"Clean Code\",\"Complexity\",\"Learning\",\"Planet Wikimedia\",\"Refactoring\",\"Simplicity\",\"Software Architecture\",\"Software Craftsmanship\",\"Software design\",\"The Zen of Python\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/\",\"name\":\"Simple is not easy - Blog of Jeroen De Dauw\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/pike-o-books.png\",\"datePublished\":\"2017-01-02T20:07:01+00:00\",\"dateModified\":\"2018-08-20T07:25:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/pike-o-books.png\",\"contentUrl\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/pike-o-books.png\",\"width\":1269,\"height\":544},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/2017\\\/01\\\/02\\\/simple-is-not-easy\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simple is not easy\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/\",\"name\":\"Entropy Wins\",\"description\":\"A blog on Software Architecture, Design and Craftsmanship\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.entropywins.wtf\\\/blog\\\/#\\\/schema\\\/person\\\/4e2ef14f2ca7dc3a0ac137d1692b66b7\",\"name\":\"Jeroen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\",\"caption\":\"Jeroen\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/jeroendedauw\\\/\",\"https:\\\/\\\/x.com\\\/https:\\\/\\\/twitter.com\\\/JeroenDeDauw\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simple is not easy - Blog of Jeroen De Dauw","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","og_locale":"en_US","og_type":"article","og_title":"Simple is not easy - Blog of Jeroen De Dauw","og_description":"Simplicity is possibly the single most important thing on the technical side of software development. It is crucial to keep&hellip;","og_url":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","og_site_name":"Blog of Jeroen De Dauw","article_published_time":"2017-01-02T20:07:01+00:00","article_modified_time":"2018-08-20T07:25:53+00:00","og_image":[{"url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png","type":"","width":"","height":""}],"author":"Jeroen","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/JeroenDeDauw","twitter_site":"@JeroenDeDauw","twitter_misc":{"Written by":"Jeroen","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#article","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/"},"author":{"name":"Jeroen","@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"headline":"Simple is not easy","datePublished":"2017-01-02T20:07:01+00:00","dateModified":"2018-08-20T07:25:53+00:00","mainEntityOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/"},"wordCount":957,"commentCount":9,"publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png","keywords":["Agile","Clean Code","Complexity","Learning","Planet Wikimedia","Refactoring","Simplicity","Software Architecture","Software Craftsmanship","Software design","The Zen of Python"],"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","url":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/","name":"Simple is not easy - Blog of Jeroen De Dauw","isPartOf":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#primaryimage"},"image":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#primaryimage"},"thumbnailUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png","datePublished":"2017-01-02T20:07:01+00:00","dateModified":"2018-08-20T07:25:53+00:00","breadcrumb":{"@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#primaryimage","url":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png","contentUrl":"https:\/\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/01\/pike-o-books.png","width":1269,"height":544},{"@type":"BreadcrumbList","@id":"https:\/\/www.entropywins.wtf\/blog\/2017\/01\/02\/simple-is-not-easy\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.entropywins.wtf\/blog\/"},{"@type":"ListItem","position":2,"name":"Simple is not easy"}]},{"@type":"WebSite","@id":"https:\/\/www.entropywins.wtf\/blog\/#website","url":"https:\/\/www.entropywins.wtf\/blog\/","name":"Entropy Wins","description":"A blog on Software Architecture, Design and Craftsmanship","publisher":{"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.entropywins.wtf\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.entropywins.wtf\/blog\/#\/schema\/person\/4e2ef14f2ca7dc3a0ac137d1692b66b7","name":"Jeroen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g","caption":"Jeroen"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d62e6b5b8e332335cf17854fac850d9c70ba367c4692872613c3110ebd4e009b?s=96&d=mm&r=g"},"sameAs":["https:\/\/www.linkedin.com\/in\/jeroendedauw\/","https:\/\/x.com\/https:\/\/twitter.com\/JeroenDeDauw"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p74TBF-uP","jetpack-related-posts":[{"id":1131,"url":"https:\/\/www.entropywins.wtf\/blog\/2013\/09\/08\/clean-functions\/","url_meta":{"origin":1911,"position":0},"title":"Clean functions","author":"Jeroen","date":"2013-09-08","format":false,"excerpt":"Last week I gave a presentation titled \u201cClean functions\u201d to my Wikidata colleagues. As the title suggests, this presentation is all about how to create clean functions that are easy to understand and modify. Why did I go with this particular design topic rather then one of the dozens of\u2026","rel":"","context":"In &quot;Software&quot;","block_context":{"text":"Software","link":"https:\/\/www.entropywins.wtf\/blog\/category\/software\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2407,"url":"https:\/\/www.entropywins.wtf\/blog\/2019\/01\/14\/readable-functions-guard-clause\/","url_meta":{"origin":1911,"position":1},"title":"Readable Functions: Guard Clause","author":"Jeroen","date":"2019-01-14","format":false,"excerpt":"Guard Clauses are one of my favorite little tricks that allow simplifying code. A guard clause is an if statement with a return in it. Consider the following code: function doThing() { var $thing = 'default'; if (someCondition()) { $thing = 'special case'; } return $thing; } Using a Guard\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1841,"url":"https:\/\/www.entropywins.wtf\/blog\/2016\/11\/24\/rewriting-the-wikimedia-deutschland-funrdraising\/","url_meta":{"origin":1911,"position":2},"title":"Rewriting the Wikimedia Deutschland fundraising","author":"Jeroen","date":"2016-11-24","format":false,"excerpt":"Last year we rewrote the Wikimedia Deutschland fundraising software. In this blog post I'll give you an idea of what this software does, why we rewrote it and the outcome of this rewrite. The application Our fundraising software is a homegrown PHP application. Its primary functions are donations and membership\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/11\/lloc-per-global.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/11\/lloc-per-global.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/11\/lloc-per-global.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2016\/11\/lloc-per-global.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":1327,"url":"https:\/\/www.entropywins.wtf\/blog\/2014\/04\/30\/wikibase-datamodel-entity-v2\/","url_meta":{"origin":1911,"position":3},"title":"Wikibase DataModel: Entity v2","author":"Jeroen","date":"2014-04-30","format":false,"excerpt":"In a recent blog post I introduced the new Term classes introduced in Wikibase DataModel 0.7.3. It also outlined plans for making some big changes to the Entity class and it's derivatives. We have now taken the most difficult step in the process, which is already resulting in much nicer\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"dm-complexity","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2014\/04\/dm-complexity.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":2014,"url":"https:\/\/www.entropywins.wtf\/blog\/2017\/09\/06\/the-fallacy-of-dry\/","url_meta":{"origin":1911,"position":4},"title":"The Fallacy of DRY","author":"Jeroen","date":"2017-09-06","format":false,"excerpt":"DRY, standing for Don't Repeat Yourself, is a well-known design principle in the software development world. It is not uncommon for removal of duplication to take center stage via mantras such as \"Repetition is the root of all evil\". Yet while duplication is often bad, the well intended pursuit of\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.entropywins.wtf\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.entropywins.wtf\/blog\/wp-content\/uploads\/2017\/09\/dry.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":2392,"url":"https:\/\/www.entropywins.wtf\/blog\/2018\/10\/30\/readable-functions-do-one-thing\/","url_meta":{"origin":1911,"position":5},"title":"Readable Functions: Do One Thing","author":"Jeroen","date":"2018-10-30","format":false,"excerpt":"Several tricks and heuristics that I apply to write easy to understand functions keep coming up when I look at other people their code. This post outlines the second key principle. The first principle is Minimize State. Following posts will contain specific tips and tricks, often building on these two\u2026","rel":"","context":"In \"Clean Code\"","block_context":{"text":"Clean Code","link":"https:\/\/www.entropywins.wtf\/blog\/tag\/clean-code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/comments?post=1911"}],"version-history":[{"count":17,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1911\/revisions"}],"predecessor-version":[{"id":2319,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/posts\/1911\/revisions\/2319"}],"wp:attachment":[{"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/media?parent=1911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/categories?post=1911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.entropywins.wtf\/blog\/wp-json\/wp\/v2\/tags?post=1911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}