{"id":24799135,"url":"https://github.com/tomibennett/evolutionary-design-exploration","last_synced_at":"2025-06-28T07:32:52.144Z","repository":{"id":69790658,"uuid":"561308121","full_name":"tomibennett/evolutionary-design-exploration","owner":"tomibennett","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-28T08:43:04.000Z","size":127,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-30T02:16:44.757Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomibennett.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-11-03T12:15:18.000Z","updated_at":"2024-04-08T16:31:48.000Z","dependencies_parsed_at":"2023-07-11T21:01:01.347Z","dependency_job_id":null,"html_url":"https://github.com/tomibennett/evolutionary-design-exploration","commit_stats":null,"previous_names":["tomibennett/evolutionary-design-exploration"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomibennett%2Fevolutionary-design-exploration","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomibennett%2Fevolutionary-design-exploration/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomibennett%2Fevolutionary-design-exploration/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomibennett%2Fevolutionary-design-exploration/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomibennett","download_url":"https://codeload.github.com/tomibennett/evolutionary-design-exploration/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245366194,"owners_count":20603438,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-30T02:16:46.145Z","updated_at":"2025-03-24T22:43:02.472Z","avatar_url":"https://github.com/tomibennett.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Evolutionary Design - Training\n\nAs you may know, writing code consists mostly of two activities which are:\n\n- an implementing activity, or adding **behavior** and;\n- an refactoring activity, or refining the **design**.\n\nMost of the time, we are writing code doing both of these activities at the same time. Differentiating them, only up to a certain point but never completly.\n\nThe underlying reasoning on whose these activities are based are called **deductive** and **inductive** approaches.\n\nMixing those two have certain advantage, like going faster, but also have some costs.\n\nNot only the written design is bound to previous mental models that we have met on previous codebases, i.e. our own experience, instead of being purely organic (i.e. related only to the domain and implemented behavior), but more importantly, this leads to design to be made more with opinion based decisions than with facts (thus observable elements) and proofs.\n\nIn other word, this methodoloy helps writing source code relying most exclusively on the **inductive approach**.\n\nSurely, this is nothing new for someone with a TDD background, but! This method goes way further and maybe (surely) it not (yet) stamped \"production ready\", it does worth being discovered and played with, if only to better undersand our evolved apes decision making processes and better apprehend the great complexity of it; as well as going slowly and learn ways and techniques to better evolve the design of our code bases.\n\n\nHopefully, this introduction will make you want to know more. If so, look just below, it's a collection of resources gathered during my exploration.\n\n## More on this repository\nThis repository is my exploration on this methodology.\n\nIt contains tries, failures, errors and notes. Steps taken are not made to be easily readable or accessible. It's more a draft and a proof a work that the methodology works and can be used. Though, it definitely should be made some day...\n\nThis example uses a kind of a bingo game. [Advent of Code's day 4: Giant Squid](https://adventofcode.com/2021/day/4) is the full problem description.\n\n# Resources\n[What is Evolutionary Design?](https://blog.adrianbolboaca.ro/2017/05/what-is-evolutionary-design/) introduces the reader to this concept. Site is currently down, but a [snapshot](https://web.archive.org/web/20210624124613/https://blog.adrianbolboaca.ro/2018/05/what-is-evolutionary-design/) has been made in 2021.\n\nThe concept is presented [here](https://web.archive.org/web/20210624121834/https://blog.adrianbolboaca.ro/2017/06/evolutionary-design-normalize-growth/) with a gardening analogy. Site is currently down, head over the [snapshot](https://web.archive.org/web/20210624121834/https://blog.adrianbolboaca.ro/2017/06/evolutionary-design-normalize-growth/) instead.\n\nThe above mentioned article plus links to other resources are compiled [here](https://blog.adrianbolboaca.ro/evolutionary-design/). Once again, tthe target resource is down, so what about visiting this [snapshot](https://web.archive.org/web/20201128070715/https://blog.adrianbolboaca.ro/evolutionary-design/) instead?\n\nBecause theory is nothing without practice, this collection of [live coding](https://www.youtube.com/playlist?list=PLlOmk325wSKLjw_RGzpBV8MIfi4zSlbwM), by Adrian Bolboaca, is a great way to learn about the processes and see the actual growth happening.\n\nAdrian Bolboaca's slides [Evolutionary Design - Refactoring Heuristics](https://www.slideshare.net/adibolb/evolutionary-design-refactoring-heuristics) exposes its reflexion on code evolution and showcases some refactoring pattern.\n\nIn it's [TDD as If You Meant It](https://cumulative-hypotheses.org/2011/08/30/tdd-as-if-you-meant-it/) article, Keith Braithwaite explains how TDD is often misused and provides a way of doing using other steps that do not lead to the same mistakes. It's like a first step towards evolutionary design as a discipline.\n\nCyrille Martaire's blog article [Adrian Bolboaca on Evolutionary Design](https://medium.com/@cyrillemartraire/adrian-bolboaca-on-evolutionary-design-inductive-vs-deductive-approaches-a7cead4bdd20) summarizes Adrian Bolboaca meetup on Evolutionary Design. It's a great resource to better understand inductive and deductive approaches as well as having a glimpse of the methodology processes themselves.\n\n Bob Martin's blog article [Transformation Priority Premise](https://blog.cleancoder.com/uncle-bob/2013/05/27/TheTransformationPriorityPremise.html) introduces transformations (changes in code that occur outside of the refactoring part) and show how it can help better conduct changes.\n\nThe wikipedia entry for [Transformation Priority Premise](https://en.wikipedia.org/wiki/Transformation_Priority_Premise) is a good spot to go too.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomibennett%2Fevolutionary-design-exploration","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomibennett%2Fevolutionary-design-exploration","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomibennett%2Fevolutionary-design-exploration/lists"}