{"id":651,"date":"2009-09-26T16:39:14","date_gmt":"2009-09-26T23:39:14","guid":{"rendered":"https:\/\/dubinko.info\/blog\/?p=651"},"modified":"2009-09-27T21:35:08","modified_gmt":"2009-09-28T04:35:08","slug":"geek-thoughts-stability-theory","status":"publish","type":"post","link":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/","title":{"rendered":"Geek Thoughts: stability theory"},"content":{"rendered":"<p>My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl interpreter, you&#8217;re in for some long nights. Via multiplication, a corollary is that the more layers a system has, the less likely it is to work well. (As an aside, I&#8217;m not arguing that all software architectures should have fewer layers&#8211;other forces outside the scope of this article work against systems with too few layers.)<\/p>\n<p>Joel said something similar lately in the article <a href=\"http:\/\/www.joelonsoftware.com\/items\/2009\/09\/23.html\">The Duct Tape Programmer<\/a>. There is a strong tendency for many coders to over-engineer a system, building towering heights of abstraction. In contrast, a Duct Tape Programmer gets the job done by making something ugly (and with fewer layers) but at least it works. So far this is a fit with what stability theory predicts.<\/p>\n<p>But then he speaks out against unit testing, referring to it in similar terms to the extravagant tower. Quoting JWZ: &#8220;If there\u00e2\u20ac\u2122s no unit test the customer isn\u00e2\u20ac\u2122t going to complain about that.&#8221; Here stability theory makes a different prediction. Particularly in the lower levels of the system, flakiness is disastrous. You have to be sure that your foundation is stable before building upon it, or you&#8217;re in for keyboard-on-forehead-induced head trauma. This is true no matter how tight the deadlines are or how much pressure is on. In fact, when you don&#8217;t have time for a write-over, its even more important to get it right the first time.<\/p>\n<p>The top accomplishment for a coder is shipping software. Duct Tape Programmers make this happen by avoiding needless complexity, which is a great principle to live by. I&#8217;m reminded of what Brian Kernighan is attributed as saying:<\/p>\n<p style=\"padding-left: 30px;\">Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.<\/p>\n<p>Debugging, or more generally making software that works well all the way to the user-facing layer, is hard. Anything that provides fundamental assertions about the stability of your foundation is a useful tool, so don&#8217;t slack off on the unit testing.<\/p>\n<p>What about you? Have you found stability theory to be supported by the facts? Comment below.<\/p>\n<p>-m<\/p>\n","protected":false},"excerpt":{"rendered":"<p>My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[284,22],"tags":[46,1179,860,861,862,1163,858,859],"class_list":["post-651","post","type-post","status-publish","format-standard","hentry","category-geekthoughts","category-software","tag-development","tag-geekthoughts","tag-joel","tag-jwz","tag-kernighan","tag-software","tag-stability","tag-theory"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"mdubinko\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Geek Thoughts: stability theory | MicahLogic Queryopticon\" \/>\n\t\t<meta property=\"og:description\" content=\"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2009-09-26T23:39:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2009-09-28T04:35:08+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Geek Thoughts: stability theory | MicahLogic Queryopticon\" \/>\n\t\t<meta name=\"twitter:description\" content=\"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#article\",\"name\":\"Geek Thoughts: stability theory | MicahLogic Queryopticon\",\"headline\":\"Geek Thoughts: stability theory\",\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"},\"datePublished\":\"2009-09-26T16:39:14-07:00\",\"dateModified\":\"2009-09-27T21:35:08-07:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#webpage\"},\"articleSection\":\"geekthoughts, software, development, geekthoughts, joel, jwz, kernighan, software, stability, theory\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"name\":\"software\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"position\":2,\"name\":\"software\",\"item\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#listItem\",\"name\":\"Geek Thoughts: stability theory\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#listItem\",\"position\":3,\"name\":\"Geek Thoughts: stability theory\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/tags\\\/software\\\/#listItem\",\"name\":\"software\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/\",\"name\":\"mdubinko\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g\",\"width\":96,\"height\":96,\"caption\":\"mdubinko\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#webpage\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/\",\"name\":\"Geek Thoughts: stability theory | MicahLogic Queryopticon\",\"description\":\"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/2009\\\/09\\\/geek-thoughts-stability-theory\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/author\\\/admin\\\/#author\"},\"datePublished\":\"2009-09-26T16:39:14-07:00\",\"dateModified\":\"2009-09-27T21:35:08-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/\",\"name\":\"MicahLogic Queryopticon\",\"description\":\"Yields undecidable when preceded by its quotation\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/dubinko.info\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Geek Thoughts: stability theory | MicahLogic Queryopticon","description":"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl","canonical_url":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#article","name":"Geek Thoughts: stability theory | MicahLogic Queryopticon","headline":"Geek Thoughts: stability theory","author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"},"datePublished":"2009-09-26T16:39:14-07:00","dateModified":"2009-09-27T21:35:08-07:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#webpage"},"isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#webpage"},"articleSection":"geekthoughts, software, development, geekthoughts, joel, jwz, kernighan, software, stability, theory"},{"@type":"BreadcrumbList","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","position":1,"name":"Home","item":"https:\/\/dubinko.info\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","name":"software"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","position":2,"name":"software","item":"https:\/\/dubinko.info\/blog\/tags\/software\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#listItem","name":"Geek Thoughts: stability theory"},"previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#listItem","position":3,"name":"Geek Thoughts: stability theory","previousItem":{"@type":"ListItem","@id":"https:\/\/dubinko.info\/blog\/tags\/software\/#listItem","name":"software"}}]},{"@type":"Organization","@id":"https:\/\/dubinko.info\/blog\/#organization","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","url":"https:\/\/dubinko.info\/blog\/"},{"@type":"Person","@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author","url":"https:\/\/dubinko.info\/blog\/author\/admin\/","name":"mdubinko","image":{"@type":"ImageObject","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/c1160c0ab9ce581a55013f96fd61356e166ffc9a00666a5062bc8121922fcdcd?s=96&d=retro&r=g","width":96,"height":96,"caption":"mdubinko"}},{"@type":"WebPage","@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#webpage","url":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/","name":"Geek Thoughts: stability theory | MicahLogic Queryopticon","description":"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/dubinko.info\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/#breadcrumblist"},"author":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"creator":{"@id":"https:\/\/dubinko.info\/blog\/author\/admin\/#author"},"datePublished":"2009-09-26T16:39:14-07:00","dateModified":"2009-09-27T21:35:08-07:00"},{"@type":"WebSite","@id":"https:\/\/dubinko.info\/blog\/#website","url":"https:\/\/dubinko.info\/blog\/","name":"MicahLogic Queryopticon","description":"Yields undecidable when preceded by its quotation","inLanguage":"en-US","publisher":{"@id":"https:\/\/dubinko.info\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"MicahLogic Queryopticon | Yields undecidable when preceded by its quotation","og:type":"article","og:title":"Geek Thoughts: stability theory | MicahLogic Queryopticon","og:description":"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl","og:url":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/","article:published_time":"2009-09-26T23:39:14+00:00","article:modified_time":"2009-09-28T04:35:08+00:00","twitter:card":"summary","twitter:title":"Geek Thoughts: stability theory | MicahLogic Queryopticon","twitter:description":"My personal stability theory, as it applies to software engineering: in a multilayered software architecture, the likelihood layer N works well can be expressed as a probability (less than 1 in practice) relative to the lower level layer N-1. For example, if you attempt to write a mission critical Tcl app on a flaky Tcl"},"aioseo_meta_data":{"post_id":"651","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-02-04 08:07:39","updated":"2025-12-10 03:26:57","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dubinko.info\/blog\/tags\/software\/\" title=\"software\">software<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tGeek Thoughts: stability theory\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/dubinko.info\/blog"},{"label":"software","link":"https:\/\/dubinko.info\/blog\/tags\/software\/"},{"label":"Geek Thoughts: stability theory","link":"https:\/\/dubinko.info\/blog\/2009\/09\/geek-thoughts-stability-theory\/"}],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p8eo8l-av","jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/comments?post=651"}],"version-history":[{"count":2,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/651\/revisions"}],"predecessor-version":[{"id":653,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/posts\/651\/revisions\/653"}],"wp:attachment":[{"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/media?parent=651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/categories?post=651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dubinko.info\/blog\/wp-json\/wp\/v2\/tags?post=651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}