{"guid":"6b1f42ce-9c34-4662-aa02-8061b6d8e431","title":"Specification-driven design","subtitle":null,"slug":"bob2022-specification-driven-design-breitner","link":"https://bobkonf.de/2022/breitner.html","description":"Do you, too, think that “implementation-defined” is\na derogary term? Let me describe how I have pushed againt that, and\nfor development model that puts an abstract specification of the\nsystem to be built in a central, pivotal position, flanked by a\nclean-room, decoupled “reference implementation” and a “specification\nacceptance test”, using functional programming for good effect in both\ncases.\n\nMany developers tend to focus on the “how”, and less on the “what”, of\nwhat they are building. This is not bad per se, but if left unchecked,\nthis may lead to systems with an “implementation-defined surface”,\nwith a organically grown interface that leaks abstractions and exposes\nimplementation details.\n\nTo counter this effect, one can write a proper specification for the\nsystem. A document that, in prose and or math, precisely describes the\ninterface of the system, but also its behavior, i.e. its\nsemantics. This decouples the outward-facing aspects of the system\nfrom the internals.\n\nOn top of that one can write a reference implementation of the system,\nbased only on the specification. This checks and clarifies the\nspecification, and by comparing the behavior of the two\nimplementations, one can triangulate bugs and detect when\nimplementations and spec went out of sync.\n\nTo make things even more rigid, one can add a conformance test suite,\nagain based soley on the specification, and probes an implementation\nand checks for certain behaviours. This can be integrated into the\ndevelopent process, e.g. as a CI check, and additionally keep the\nimplementations honest.\n\nAll in all, this gives you a clear picture of the essence of your\nsystem or service, a place to discuss changes between stakeholders on\neither side of the interface without getting distracted by\nimplementation designs, insulates your users from implementation\nchanges and gives your developers a clearly demarked space to go wild\nwithin.\n\t\t","original_language":"eng","persons":["Joachim Breitner"],"tags":["bob2022","88","2022","Talk","BOB","BOBKonferenz"],"view_count":58,"promoted":false,"date":"2022-03-11T14:15:00.000+01:00","release_date":"2022-09-05T00:00:00.000+02:00","updated_at":"2026-01-19T02:15:06.369+01:00","length":2078,"duration":2078,"thumb_url":"https://static.media.ccc.de/media/events/bobkonf/2022/88-6b1f42ce-9c34-4662-aa02-8061b6d8e431.jpg","poster_url":"https://static.media.ccc.de/media/events/bobkonf/2022/88-6b1f42ce-9c34-4662-aa02-8061b6d8e431_preview.jpg","timeline_url":"https://static.media.ccc.de/media/events/bobkonf/2022/88-6b1f42ce-9c34-4662-aa02-8061b6d8e431.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/events/bobkonf/2022/88-6b1f42ce-9c34-4662-aa02-8061b6d8e431.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/bob2022-specification-driven-design-breitner","url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_title":"BOB Konferenz 2022","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022","related":[],"recordings":[{"size":896,"length":2078,"mime_type":"video/webm","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_webm-hd.webm","state":"new","folder":"webm-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2022-09-05T14:42:36.579+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/webm-hd/bob2022-88-eng-Specification-driven_design_webm-hd.webm","url":"https://api.media.ccc.de/public/recordings/61503","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"},{"size":285,"length":2078,"mime_type":"video/webm","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_webm-sd.webm","state":"new","folder":"webm-sd","high_quality":false,"width":720,"height":576,"updated_at":"2022-09-05T14:25:13.494+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/webm-sd/bob2022-88-eng-Specification-driven_design_webm-sd.webm","url":"https://api.media.ccc.de/public/recordings/61491","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"},{"size":31,"length":2078,"mime_type":"audio/mpeg","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_mp3.mp3","state":"new","folder":"mp3","high_quality":false,"width":0,"height":0,"updated_at":"2022-09-05T14:14:56.449+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/mp3/bob2022-88-eng-Specification-driven_design_mp3.mp3","url":"https://api.media.ccc.de/public/recordings/61484","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"},{"size":17,"length":2078,"mime_type":"audio/opus","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_opus.opus","state":"new","folder":"opus","high_quality":false,"width":0,"height":0,"updated_at":"2022-09-05T14:14:03.245+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/opus/bob2022-88-eng-Specification-driven_design_opus.opus","url":"https://api.media.ccc.de/public/recordings/61483","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"},{"size":166,"length":2078,"mime_type":"video/mp4","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_sd.mp4","state":"new","folder":"h264-sd","high_quality":false,"width":720,"height":576,"updated_at":"2022-09-05T14:11:08.923+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/h264-sd/bob2022-88-eng-Specification-driven_design_sd.mp4","url":"https://api.media.ccc.de/public/recordings/61481","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"},{"size":627,"length":2078,"mime_type":"video/mp4","language":"eng","filename":"bob2022-88-eng-Specification-driven_design_hd.mp4","state":"new","folder":"h264-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2022-09-05T13:56:53.671+02:00","recording_url":"https://cdn.media.ccc.de/events/bobkonf/2022/h264-hd/bob2022-88-eng-Specification-driven_design_hd.mp4","url":"https://api.media.ccc.de/public/recordings/61470","event_url":"https://api.media.ccc.de/public/events/6b1f42ce-9c34-4662-aa02-8061b6d8e431","conference_url":"https://api.media.ccc.de/public/conferences/bobkonf2022"}]}