{
 "blyg": "0.4",
 "id": "69kf85trtch5q3q4t8v2aw4t2y",
 "kind": "thread",
 "origin": "https://notionparallax.co.uk/",
 "page": "https://notionparallax.co.uk/2015/delegation-programming",
 "author": {
  "name": "Ben Doherty",
  "url": "https://notionparallax.co.uk/"
 },
 "created": "2015-06-20T19:27:31Z",
 "updated": "2015-06-20T19:27:31Z",
 "version": 1,
 "content_md": "# Delegation == Programming\n\n\nI think that delegation to another person is analogous to programming a computer. I want to explain why I think this, and how thinking like this can be useful.\n\nProgramming as a discipline has developed loads of ways of making code better. That might mean more efficient, easier to understand, easier to maintain etc. The general term for this tidy up process is _refactoring_. If you think of delegation as a function call to a human then you can refactor the way you do things to make them better.\n\n<img class=\" size-full wp-image-1773 alignright\" src=\"https://notionparallax.co.uk/assets/shared-understanding.png\" alt=\"shared understanding\" /><img class=\" size-medium wp-image-1774 alignleft\" src=\"https://notionparallax.co.uk/assets/shared-understanding-human-comp.png\" alt=\"shared understanding human comp\" />Lots of tasks are too big for one person to do. Most orgs use some kind of hierarchical model to get these kinds of big jobs done. This means concentrating power and responsibility in the hands of one person who then breaks the job up into tasks. They then assign those tasks to someone else to do.\n\nSaying _someone else_ is a lazy way of saying _entity with the capacity to get the task done_. That might be a future version of themselves, or another person, or a donkey or a computer. All that matters is that there are two entities that are capable of developing a shared understanding. Once that understanding is in place the other entity can go off and do the task.\n\nIf we explore that in a few ways:\n\n- Alice and Bob discuss how to achieve the goal of drinking a cup of tea. Alice delegates tea making to Bob. Bob makes the cup of tea and brings it back to Alice.\n- Charlie wants to do some arithmetic. He punches some numbers into a spreadsheet and gets an answer back.\n- Daisy works at a nuclear plant. The control computer spots an irregularity and sends Daisy off to look at it. Daisy brings a report back to the computer.\n- The _edit_ function in a word processor calls the _format_ function. It then returns some formatted results.<img class=\" size-medium wp-image-1775 aligncenter\" src=\"https://notionparallax.co.uk/assets/comp-masters.png\" alt=\"comp masters\" />\n\n<img class=\" size-medium wp-image-1776 alignright\" src=\"https://notionparallax.co.uk/assets/org-tree.png\" alt=\"org tree\" />None of these are perfect examples, but they give you the idea of one agent getting another agent to do something for them. Usually this is more like a chain, where one person delegates down the chain to get things done[^1].\n\nProgramming a computer is just delegating to it using a tightly controlled set of commands. In human-human interaction we use empathy to substitute for precision. Computers are short on empathy, but good at precision and attention to detail.\n\nComputers will do whatever you ask them to do, but only what you ask them to do. They are very fault prone. If you ask them to do something and you haven't given them an explicit instruction for what to do if it goes wrong, they'll stop. If you have managed to program them to do your bidding they'll continue to do that flawlessly for as long as you like!\n\nPeople are incredibly fault tolerant. They can find all kinds of ingenious ways to complete their tasks in the face of adversity. The problem is that they lack precision, so getting to a shared understanding is difficult.[^2]\n\nAll kinds of delegation need some kind of shared understanding. A computer does this by having libraries of functions and people do it by having common life experiences. If two humans have a common language they can communicate commands incredibly tersely. A great example of this is ER staff communicating a patient's state and what they need to do next. This common language takes a long time to develop and it is like learning the commands in a programming language. If people don’t share an explicit set of commands then the ambiguity is a problem but not an insurmountable one. It just needs the two people to negotiate more[^3].\n\n\nIf we can agree on most of that then maybe we can agree that **delegation is analogous to programming**.\n\nA more difficult task might be convincing you that thinking this way is a useful mental tool. My reasoning goes like this:\n\n1. Most tasks can be decomposed and then delegated, often recursively.</li>\n1. Eventually some part of that task will be automatable.</li>\n\nThis isn't very complicated. The useful part comes when you think about a _frontier of automation_. As technology gets more sophisticated that frontier keeps moving closer to the initial delegator.\n\nOnce you have the idea of a frontier of automation you can blur it a bit. There are things that you:\n\n- can do and a future version of yourself will do them\n- can do, but it'd be better if someone else did them\n- can't do so someone else needs to do them\n\nThe second two are prime for delegation. Using the mental tools developed by programmers you can think about how to best get things done.\n\n[^1]: realistically it's _much_ more complicated once you need to interact with customers etc. Triggers come from all over the place, but they can probably be abstracted away with subsystems. The more important question is if that's a good idea. This is just one way of thinking, a <a href=\"https://en.wikipedia.org/wiki/George_E._P._Box#Quotes\">wrong model</a> if you like.\n\n[^2]: <a href=\"https://github.com/Dawil\">Dave</a> thinks that the precision problem is too great. This might as well be a problem of kind not degree as compilers can't handle the ambiguity. I'm more optimistic and think that we'll develop a way that we'll be able to do natural language programming soon.\n\n[^3]: a lot of the problems I see in life come from people not developing enough shared understanding. I've just started reading about this a bit in <a href=\"http://shop.oreilly.com/product/0636920033851.do\">User Story Mapping</a> by Jeff Patton.\n",
 "content_html": "<h1>Delegation == Programming</h1>\n<p>I think that delegation to another person is analogous to programming a computer. I want to explain why I think this, and how thinking like this can be useful.</p>\n\n<p>Programming as a discipline has developed loads of ways of making code better. That might mean more efficient, easier to understand, easier to maintain etc. The general term for this tidy up process is <em>refactoring</em>. If you think of delegation as a function call to a human then you can refactor the way you do things to make them better.</p>\n\n<p><img class=\" size-full wp-image-1773 alignright\" src=\"https://notionparallax.co.uk/assets/shared-understanding.png\" alt=\"shared understanding\" /><img class=\" size-medium wp-image-1774 alignleft\" src=\"https://notionparallax.co.uk/assets/shared-understanding-human-comp.png\" alt=\"shared understanding human comp\" />Lots of tasks are too big for one person to do. Most orgs use some kind of hierarchical model to get these kinds of big jobs done. This means concentrating power and responsibility in the hands of one person who then breaks the job up into tasks. They then assign those tasks to someone else to do.</p>\n\n<p>Saying <em>someone else</em> is a lazy way of saying <em>entity with the capacity to get the task done</em>. That might be a future version of themselves, or another person, or a donkey or a computer. All that matters is that there are two entities that are capable of developing a shared understanding. Once that understanding is in place the other entity can go off and do the task.</p>\n\n<p>If we explore that in a few ways:</p>\n\n<ul>\n  <li>Alice and Bob discuss how to achieve the goal of drinking a cup of tea. Alice delegates tea making to Bob. Bob makes the cup of tea and brings it back to Alice.</li>\n  <li>Charlie wants to do some arithmetic. He punches some numbers into a spreadsheet and gets an answer back.</li>\n  <li>Daisy works at a nuclear plant. The control computer spots an irregularity and sends Daisy off to look at it. Daisy brings a report back to the computer.</li>\n  <li>The <em>edit</em> function in a word processor calls the <em>format</em> function. It then returns some formatted results.<img class=\" size-medium wp-image-1775 aligncenter\" src=\"https://notionparallax.co.uk/assets/comp-masters.png\" alt=\"comp masters\" /></li>\n</ul>\n\n<p><img class=\" size-medium wp-image-1776 alignright\" src=\"https://notionparallax.co.uk/assets/org-tree.png\" alt=\"org tree\" />None of these are perfect examples, but they give you the idea of one agent getting another agent to do something for them. Usually this is more like a chain, where one person delegates down the chain to get things done<sup id=\"fnref:1\" role=\"doc-noteref\"><a href=\"https://notionparallax.co.uk/2015/delegation-programming#fn:1\" class=\"footnote\" rel=\"footnote\">1</a></sup>.</p>\n\n<p>Programming a computer is just delegating to it using a tightly controlled set of commands. In human-human interaction we use empathy to substitute for precision. Computers are short on empathy, but good at precision and attention to detail.</p>\n\n<p>Computers will do whatever you ask them to do, but only what you ask them to do. They are very fault prone. If you ask them to do something and you haven’t given them an explicit instruction for what to do if it goes wrong, they’ll stop. If you have managed to program them to do your bidding they’ll continue to do that flawlessly for as long as you like!</p>\n\n<p>People are incredibly fault tolerant. They can find all kinds of ingenious ways to complete their tasks in the face of adversity. The problem is that they lack precision, so getting to a shared understanding is difficult.<sup id=\"fnref:2\" role=\"doc-noteref\"><a href=\"https://notionparallax.co.uk/2015/delegation-programming#fn:2\" class=\"footnote\" rel=\"footnote\">2</a></sup></p>\n\n<p>All kinds of delegation need some kind of shared understanding. A computer does this by having libraries of functions and people do it by having common life experiences. If two humans have a common language they can communicate commands incredibly tersely. A great example of this is ER staff communicating a patient’s state and what they need to do next. This common language takes a long time to develop and it is like learning the commands in a programming language. If people don’t share an explicit set of commands then the ambiguity is a problem but not an insurmountable one. It just needs the two people to negotiate more<sup id=\"fnref:3\" role=\"doc-noteref\"><a href=\"https://notionparallax.co.uk/2015/delegation-programming#fn:3\" class=\"footnote\" rel=\"footnote\">3</a></sup>.</p>\n\n<p>If we can agree on most of that then maybe we can agree that <strong>delegation is analogous to programming</strong>.</p>\n\n<p>A more difficult task might be convincing you that thinking this way is a useful mental tool. My reasoning goes like this:</p>\n\n<ol>\n  <li>Most tasks can be decomposed and then delegated, often recursively.&lt;/li&gt;</li>\n  <li>Eventually some part of that task will be automatable.&lt;/li&gt;</li>\n</ol>\n\n<p>This isn’t very complicated. The useful part comes when you think about a <em>frontier of automation</em>. As technology gets more sophisticated that frontier keeps moving closer to the initial delegator.</p>\n\n<p>Once you have the idea of a frontier of automation you can blur it a bit. There are things that you:</p>\n\n<ul>\n  <li>can do and a future version of yourself will do them</li>\n  <li>can do, but it’d be better if someone else did them</li>\n  <li>can’t do so someone else needs to do them</li>\n</ul>\n\n<p>The second two are prime for delegation. Using the mental tools developed by programmers you can think about how to best get things done.</p>\n\n<div class=\"footnotes\" role=\"doc-endnotes\">\n  <ol>\n    <li id=\"fn:1\" role=\"doc-endnote\">\n      <p>realistically it’s <em>much</em> more complicated once you need to interact with customers etc. Triggers come from all over the place, but they can probably be abstracted away with subsystems. The more important question is if that’s a good idea. This is just one way of thinking, a <a href=\"https://en.wikipedia.org/wiki/George_E._P._Box#Quotes\">wrong model</a> if you like. <a href=\"https://notionparallax.co.uk/2015/delegation-programming#fnref:1\" class=\"reversefootnote\" role=\"doc-backlink\">&#8617;</a></p>\n    </li>\n    <li id=\"fn:2\" role=\"doc-endnote\">\n      <p><a href=\"https://github.com/Dawil\">Dave</a> thinks that the precision problem is too great. This might as well be a problem of kind not degree as compilers can’t handle the ambiguity. I’m more optimistic and think that we’ll develop a way that we’ll be able to do natural language programming soon. <a href=\"https://notionparallax.co.uk/2015/delegation-programming#fnref:2\" class=\"reversefootnote\" role=\"doc-backlink\">&#8617;</a></p>\n    </li>\n    <li id=\"fn:3\" role=\"doc-endnote\">\n      <p>a lot of the problems I see in life come from people not developing enough shared understanding. I’ve just started reading about this a bit in <a href=\"http://shop.oreilly.com/product/0636920033851.do\">User Story Mapping</a> by Jeff Patton. <a href=\"https://notionparallax.co.uk/2015/delegation-programming#fnref:3\" class=\"reversefootnote\" role=\"doc-backlink\">&#8617;</a></p>\n    </li>\n  </ol>\n</div>\n",
 "content_hash": "sha256:c77aaf33163d599521e0f2773033c3dcc76f2aac59b24cffa71f3777ff771c05",
 "media": [],
 "changelog": [
  {
   "version": 1,
   "at": "2015-06-20T19:27:31Z",
   "note": null
  }
 ],
 "transclusions": []
}