{"id":15403444,"url":"https://github.com/mbj/developers-bicycles","last_synced_at":"2026-06-10T06:34:42.181Z","repository":{"id":54871233,"uuid":"329203295","full_name":"mbj/developers-bicycles","owner":"mbj","description":"A talk on developer efficiency gains through mutation testing.","archived":false,"fork":false,"pushed_at":"2021-01-23T15:39:13.000Z","size":1742,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-01-10T08:39:15.690Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/mbj.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}},"created_at":"2021-01-13T05:27:05.000Z","updated_at":"2021-01-23T15:39:13.000Z","dependencies_parsed_at":"2022-08-14T05:20:20.379Z","dependency_job_id":null,"html_url":"https://github.com/mbj/developers-bicycles","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fdevelopers-bicycles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fdevelopers-bicycles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fdevelopers-bicycles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mbj%2Fdevelopers-bicycles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mbj","download_url":"https://codeload.github.com/mbj/developers-bicycles/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240996400,"owners_count":19890953,"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":"2024-10-01T16:08:35.251Z","updated_at":"2026-06-10T06:34:37.129Z","avatar_url":"https://github.com/mbj.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nauthor: Markus Schirp\ntitle: Development with Bicycles for Brains\ndate: 2021\n---\n\n## Intro\n\nHumans outclass all living beings in terms of movement efficiency when using a bicycle.\n\nWe should have the equivalents of bicycles for developer brains.\n\n---\n\n## Outline\n\nThis talk is about `mutant`, a tool to improve developer efficiency.\n\nBefore going into details of the tool, let's focus on the need for more\nefficient reviews.\n\n---\n\n## Cost of software development\n\nThe most valuable and indeterministic resource in software development is human time.\n\n* Human time is the biggest software development expense.\n* Human performance varies with each time window.\n* Some time windows are significantly more productive than others.\n* Some time windows are actively affecting the software product negatively.\n\n---\n\n## Solution?\n\nProvide developers with tools and processes to increase their\nefficiency in productive time windows.\n\nBut decrease the likelihood that their bad moments lead to a reduction in\nproduct value (also known as bugs).\n\nAll of this is easier said than done.\n\n---\n\n## More Technical Solution\n\nAt a high level we can aim for:\n\n1) Reducing feedback time on actionable work to get more done.\n2) Automating constraints to not introduce regressions without noticing.\n\nOn 1) with Ruby we have excellent feedback time. But what about 2), the constraints?\n\n---\n\n## Available constraints\n\n* Types (Brand new! Future topic!)\n* Tests\n\nBut are tests good constraints?\n\n---\n\n## Tests as Constraints\n\nTests, at a high level, are: A set of input output relations.\n\n* Fail a test: Fix the code (or the test).\n* Pass a test: Move on?\n\n---\n\n## Coverage\n\nA passing test suite only signals the **lower bound** of\nsemantics a program can express.\n\nWhat constrains the **upper bound**?\n\nEnter code reviews.\n\n---\n\n## Code reviews\n\nManual verification that there is nothing the code does in addition to\npassing the tests.\n\nThis can, in part, be automated! Saving time, increasing efficiency.\n\n---\n\n## Example\n\nAutomated code review output example:\n\n```diff\nUncovered Mutation (tests still pass):\n\n def foo\n-  do_a\n   do_b\n end\n```\n\nThe `do_a` call site can be removed without the tests noticing.\n\n---\n\n## Interpretation\n\nThe mutation testing tool tells you:\n\n\u003e Hey Human: Either remove `do_a` or prove to me it should exist\n\u003e via a test, but for now it's floating.\n\nThe reviewer saved time and can act on this information to\nverify if `do_a` is actually needed.\n\n---\n\n## Live coding\n\n[here mutant gets shown in action to the audience]\n\n---\n\n## Consequences\n\nConsistently applying mutation testing using `mutant` reduces the cost of software development.\n\nMore time can be spent on non automatable parts.\n\nMost importantly: New developers can **self train** without needing access to peers!\n\n**Reduces the entry barrier to software development with Ruby.**\n\n## Marketing\n\nMutant is commercial software.\n\nBut it's **Free to use for opensource projects**.\n\nFind mutant:\n\n[https://github.com/mbj/mutant](https://github.com/mbj/mutant)\n\nFind me (on twitter):\n\n[https://twitter.com/\\_m\\_b\\_j\\_](https://twitter.com/_m_b_j_)\n\nFind this presentation (wihout the life coding part):\n\n[https://mbj.github.io/developers-bicycles](https://mbj.github.io/developers-bicycles)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbj%2Fdevelopers-bicycles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmbj%2Fdevelopers-bicycles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmbj%2Fdevelopers-bicycles/lists"}