<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Dave Guarino</title>
	<subtitle>Dave Guarino</subtitle>
	
	<link href="https://www.daveguarino.com/feed/feed.xml" rel="self"/>
	<link href="https://www.daveguarino.com/"/>
	<updated>2023-11-01T00:00:00Z</updated>
	<id>https://www.daveguarino.com/</id>
	<author>
		<name>Dave Guarino</name>
		<email>dave@fidg.org</email>
	</author>
	
	<entry>
		<title>Government Stuff #1</title>
		<link href="https://www.daveguarino.com/notes/government-stuff-number-1/"/>
		<updated>2023-11-01T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/government-stuff-number-1/</id>
		<content type="html">&lt;p&gt;I wrote a new newsletter walking through the (very reasonable) idea maze of setting quality control metrics for a public benefits program — and how banal accounting details can lead to large structural forces. &lt;a href=&quot;https://daveguarino.substack.com/p/government-stuff-1&quot;&gt;Click here&lt;/a&gt; or below to go give it a read!&lt;/p&gt;
&lt;a href=&quot;https://daveguarino.substack.com/p/government-stuff-1&quot;&gt;
  &lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/TD1X4EVz7t-640.webp 640w, https://www.daveguarino.com/img/TD1X4EVz7t-768.webp 768w, https://www.daveguarino.com/img/TD1X4EVz7t-1342.webp 1342w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/TD1X4EVz7t-640.jpeg&quot; alt=&quot;Newsletter: Government Stuff #1&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1342&quot; height=&quot;1522&quot; srcset=&quot;https://www.daveguarino.com/img/TD1X4EVz7t-640.jpeg 640w, https://www.daveguarino.com/img/TD1X4EVz7t-768.jpeg 768w, https://www.daveguarino.com/img/TD1X4EVz7t-1342.jpeg 1342w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;
&lt;/a&gt;
</content>
	</entry>
	
	<entry>
		<title>What might LLMs/generative AI mean for public benefits and the safety net/tech?</title>
		<link href="https://www.daveguarino.com/notes/what-might-llms-generative-ai-mean-for-public-benefits-and-the-safety-net-tech/"/>
		<updated>2023-07-26T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/what-might-llms-generative-ai-mean-for-public-benefits-and-the-safety-net-tech/</id>
		<content type="html">&lt;p&gt;There is so much excitement about things like GPT-4, and the Executive Summary Epistemology™ of broad, sweeping summaries of things people are saying about things other people are saying and which actually have very little grounding in tactile interactions with the technology are proliferating.&lt;/p&gt;
&lt;p&gt;In general, given just how new this wave of AI is, my perspective is that people should be spending more time experimenting with it on their problems than generating takes. But doing so does require a solid understanding of actual problems, rather than the Imagined Problems (so-high-level-to-be-meaningless) that both drive a lot of work and drive a lot of well-intentioned people to madness.&lt;/p&gt;
&lt;p&gt;So here are some scattered thoughts to hopefully inform and encourage more experimentation. I mean them as generative (ha!) — I hope they catalyze your own thoughts for experiments; these are less predictions than provocations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Replace “a chatbot that knows things” with “a calculator for words” as your anchor mental model.&lt;/strong&gt; The chat experience is an interface or affordance. The underlying technology breakthrough is actually software that can process and reason about words much, much more effectively. Similarly, it’s not about these models having the answers. GPT-4 scores 88th percentile on the LSAT. That is a test of reasoning—not knowledge. Don’t think of these models as domain experts. Think of them more like an intern in your office going to law school in the fall and who got an 163 on the LSAT.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Much of the substance of what constitutes “government” is in fact text.&lt;/strong&gt; A technology that can do orders of magnitude more with text is therefore potentially massively impactful here. Law, policy, regulations, guidance, business process and operating procedures, official letters and notices—much of the substance of what we consider government is in fact made up of text. This gives LLMs much more potential in the context of interacting with or delivering government, almost definitionally, than many other domains.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Many of the sub-tasks of the work of delivering public benefits seem amenable to the application of large language models to help people do this hard work.&lt;/strong&gt; Eligibility operations are a value chain with concrete work involved. Processing. Verifying. Mapping messy reality to abstract rules. I see many opportunities for large language models to assist the public servants doing that in ways that may increase throughput and decrease the difficulty (and frustration) of parts of that work. Examples just off the top of my head:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Next-level OCR for documents&lt;/em&gt;: OCR is currently good at well-structured tasks like processing a single form that is very common (think a tax return.) We likely now have the technology to effectively extract arbitrary information from virtually any paystub, for example, without requiring more than a human review.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Pulling up applicable rule citations for an edge case / copilot for policy&lt;/em&gt;: Public benefits programs represent the accreted complexity of decades. It is very complicated and difficult work to identify the applicable rules in more complicated cases, often an exception to the exception to the exception. A human may have to reason about convoluted logic spread across 3 distinct sources of policy to get to an answer. LLM’s reasoning capabilities likely can make this much easier.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Sensemaking, analysis, and prioritization of complaints or appeals&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Automated support for simplifying client-facing language&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Next-generation self-service options that avoid the “talking to a wall” robot experience&lt;/em&gt;: Chatbots may not be the core of this technology, but the sub-task of “compose an answer that is more directly responsive to this question (even if that is that you can’t answer it)” is one LLMs handle extremely well.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;LLMs + RPA to streamline interactions with legacy systems&lt;/em&gt;: Robotic Process Automation has been an increasingly common shim layer to make easier or quicker doing common tasks in legacy systems where the task might be time-intensive (many clicks.) LLMs likely supercharge this, given that it can take an arbitrary task, click around in a test environment, and generate a reasonable starting place for an RPA script that does a task. (Remember, a system screen is generally a page with text! Text, folks!)&lt;/li&gt;
&lt;li&gt;Lots more&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Many of the sub-tasks of interacting with or assisting someone with public benefits are amenable to LLMs&lt;/strong&gt;. Some examples:&lt;br /&gt;
&lt;i&gt;&lt;/i&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explaining complicated notices or letters&lt;/li&gt;
&lt;li&gt;Helping with questions on application forms&lt;/li&gt;
&lt;li&gt;Generating public web content from direct assistance help interactions, to scale discoverability and distribution of that help&lt;/li&gt;
&lt;li&gt;Triaging and assisting with escalations and appeals of issues&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Lots more&lt;br /&gt;
&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Flowing from the above two points: we may see a path divergence in speed of adoption inside vs. outside&lt;/strong&gt;. This has implications worth gaming out and considering deeply. In particular, the scale software and low/no cost user discovery brings could well overwhelm systems that currently display linear-to-human-staff scalability.&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Also related to the above: LLMs may enable a new generation of software-based agents on top of government systems—figuring out how to align incentives in the right direction for those would be a useful conversation to start.&lt;/strong&gt; The metaphor of “Turbotax for X” is so ubiquitous as to be somewhat annoying at this point. But its ubiquity is a function of how densely it compresses complicated experience information. People see two things: (1) “a simple, guided experience for navigating a complicated form”; (2) pernicious industry rent seeking on top of government services. The only point I seek to make here is that #2 largely came from the incentive design of the Free File program. My prior work building GetCalFresh was also a software-based agent helping people navigate a complicated program, but with fundamentally different incentives. If the cost of developing such agents has collapsed, the more useful question to start asking is: what is a strong interface-access regime that aligns incentives towards public aims? (Corollary: absent this conversation, things will likely arise anyway but be managed in a much more ad hoc way, missing opportunities and creating costs and frustration on both sides.)&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;LLMs are “unstable material” like so many other engineering materials, and so strong quality checks/monitoring/humans in the loop by default are probably necessary to ensure low failure rates&lt;/strong&gt;. We don’t have a good sense yet of failure rates. In fact they may well be dynamic—some are reporting GPT-4 performance changing re-running tasks, as the model takes in input and is modified and being aligned for competing goals. This makes monitoring, QA, human checks all very critical to any use of these things, particularly in sensitive contexts where downside risk costs are significant. (Obligatory note: the status quo’s costs are also worth weighing here.)&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Moonshot hope—maybe zero cost code generation solves the “our legacy system is so hard to change” problem&lt;/strong&gt;. This could be a post all on its own. The short version:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;if the starting point for reducing the cost of change is adding lots of automated tests that characterize the system’s current behavior, and&lt;/li&gt;
&lt;li&gt;generation of such tests has become effectively zero-cost, and&lt;/li&gt;
&lt;li&gt;models in short order get good at reasoning about existing code bases&lt;/li&gt;
&lt;li&gt;then maybe “the legacy system problem” is about to get much, much easier to “modernize” (if we define that as 1. making changes we need, and 2. making changes that make other changes easier in the future)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Overall: I’m cautiously optimistic&lt;/strong&gt;. Zooming out, what are the fundamentals that make me optimistic? We have complicated programs that are largely comprised of text and a fundamental technology breakthrough about processing and reasoning about text. Of course things are more complicated; these are all complex, decentralized systems at the end of the day. Complex systems are intrinsically hazardous. Things can and will get messy. But it seems to me that these fundamentals have net positive implications for reducing burden (on many different actors) and making things better overall.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;But&lt;/strong&gt;—all of this is fairly low confidence unless and until I see these things working against concrete problems! A 90% success rate vs. a 20% success rate will have very different implications.&lt;/p&gt;
&lt;p&gt;So my final exhortation: take these thoughts as inspiration for tests and experiments to run, not as opinions or prognostications to evaluate. (And share what you find!)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>What might better accountability systems for government technology (and customer experience) look like?</title>
		<link href="https://www.daveguarino.com/notes/what-might-better-accountability-systems-for-govt-tech-and-cx-look-like/"/>
		<updated>2023-06-02T18:10:00Z</updated>
		<id>https://www.daveguarino.com/notes/what-might-better-accountability-systems-for-govt-tech-and-cx-look-like/</id>
		<content type="html">&lt;p&gt;I wrote down some thoughts on accountability, feedback loops,&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;a href=&quot;https://daveguarino.substack.com/p/what-might-better-accountability&quot;&gt;Read these meandering thoughts over on Substack&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;(I&#39;ll eventually cross-post the content here)&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Some ideas on more safely prototyping LLM products</title>
		<link href="https://www.daveguarino.com/notes/thoughts-on-more-safely-prototyping-llm-products/"/>
		<updated>2023-04-22T19:02:26Z</updated>
		<id>https://www.daveguarino.com/notes/thoughts-on-more-safely-prototyping-llm-products/</id>
		<content type="html">&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/7b0Go2fCAN-640.webp 640w, https://www.daveguarino.com/img/7b0Go2fCAN-768.webp 768w, https://www.daveguarino.com/img/7b0Go2fCAN-1024.webp 1024w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/7b0Go2fCAN-640.jpeg&quot; alt=&quot;&#39;a computer mainframe with duct tape on it in cyberpunk style&#39; (Dalle)&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1024&quot; height=&quot;1024&quot; srcset=&quot;https://www.daveguarino.com/img/7b0Go2fCAN-640.jpeg 640w, https://www.daveguarino.com/img/7b0Go2fCAN-768.jpeg 768w, https://www.daveguarino.com/img/7b0Go2fCAN-1024.jpeg 1024w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;&lt;br /&gt;
&lt;em&gt;&#39;a computer mainframe with duct tape on it in cyberpunk style&#39; (Dalle)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I really enjoyed two recent posts about engineering and LLMs:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mitchell Hashimoto&#39;s &amp;quot;&lt;a href=&quot;https://mitchellh.com/writing/prompt-engineering-vs-blind-prompting&quot;&gt;Prompt Engineering vs. Blind Prompting&lt;/a&gt;&amp;quot;&lt;/li&gt;
&lt;li&gt;Apenwarr&#39;s &amp;quot;&lt;a href=&quot;https://apenwarr.ca/log/20230415&quot;&gt;System design 2: what we hope we know&lt;/a&gt;&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A theme that struck me as underlying both posts is nicely captured in the (rough) quote of the latter&#39;s engineering professor:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Engineering isn&#39;t about building a paperclip that will never break, it&#39;s about building a paperclip that will bend enough times to get the job done, at a reasonable price, in sufficient quantities, out of attainable materials, on schedule.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Put another way: engineering is about building things that meet people&#39;s needs at an &lt;em&gt;appropriate&lt;/em&gt; cost and an &lt;em&gt;appropriate&lt;/em&gt; level of safety — there is &lt;em&gt;no&lt;/em&gt; 100% safety level, and the work is in large part applying methods to get at the empirical math of tradeoffs across cost and safety.&lt;/p&gt;
&lt;p&gt;Unsurprisingly, both these posts were concerned with Large Language Models (LLMs) such as ChatGPT, GPT-4, Llama, etc.&lt;/p&gt;
&lt;p&gt;Mitchell&#39;s post gestured towards a few examples of how to safely develop on top of such innately unstable material, under the umbrella of &amp;quot;Trust But Verify and Continuous Improvement&amp;quot; - for example:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For our calendar application example, we may want to explicitly ask users: &amp;quot;is this event correct?&amp;quot; And if they say &amp;quot;no,&amp;quot; then log the natural language input for human review. Or, we can maybe do better to automatically track any events our users manually change after our automatic information extraction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now I very squarely identify as a &lt;em&gt;product engineer&lt;/em&gt; when it comes to building software. What that means is I&#39;m most interested in building things where the undefined variable is the user&#39;s needs and preferences (or call those requirements) and applying the right set of methods to meet the goal of &lt;em&gt;building the right thing&lt;/em&gt; (this I would juxtapose with what might be considered more pure technical work aimed at &lt;em&gt;building the thing right&lt;/em&gt; - &amp;quot;the thing&amp;quot; is much better defined at that point!)&lt;/p&gt;
&lt;p&gt;So these posts got me thinking it might be useful to put fingers-to-keyboard on some of the methods that I think might be useful in starting to build products, prototypes, and services on top of LLMs.&lt;/p&gt;
&lt;p&gt;Nota bene: AI safety is its wholly its own field and I&#39;m not an expert. But I do have the benefit of having built actually-in-production-and-use things on top of unstable material in domains and contexts where the potential downside human cost is not small. I hope this catalyzes more thinking and exchange of ideas rather than be taken as some gospel.&lt;/p&gt;
&lt;h3 id=&quot;some-ideas-for-building-on-top-of-llms-with-increased-safety&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/thoughts-on-more-safely-prototyping-llm-products/#some-ideas-for-building-on-top-of-llms-with-increased-safety&quot;&gt;Some ideas for building on top of LLMs with increased safety&lt;/a&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Let the user review and tell you if it&#39;s right&lt;/strong&gt;: this is Mitchell&#39;s example above of extracting a date and asking the user if it&#39;s right before using it&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delayed-response for 100% manual human review&lt;/strong&gt;: for example, start prototyping a service as one where a user can email and get a response within 24 hours; all LLM-generated responses are reviewed by a human before responding to the actual end-user, and corrections are made by human reviewers while building up a training data set of input-output pairs for evaluation and fine-tuning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standardize and &amp;quot;whitelist&amp;quot; outputs that can be returned to users safely&lt;/strong&gt;: for example, if you have some common responses that you know are generally never &lt;em&gt;that&lt;/em&gt; bad an idea for the end-user, you might whitelist pre-vetted responses, use the model to select among them (or say none are appropriate and send to a human), and give the user a pre-vetted response; an example from a domain that I&#39;ve worked in is that while helping people navigate the SNAP or food stamp program, it&#39;s often a quite safe escape hatch to tell them to call their local agency and provide them the phone number&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use LLM output to &lt;em&gt;try&lt;/em&gt; to handle edge cases/error states, but with user review&lt;/strong&gt;: so for example if someone puts in some info that seems to fail some sort of validation, instead of preventing the user from fixing it, try to use an LLM to fix it and show the user the output to review first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Try using a separate model as a safety check&lt;/strong&gt;: If you have some concern that certain responses might not be safe, try having a &lt;em&gt;separate&lt;/em&gt; model review with some rules - again, you could be very aggressive in trying to flag things that seem even maybe unsafe by asking it to only not flag if certain criteria seem to be definitively met&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;(Weird but true!) Limit user volume to always be able to have a human review!&lt;/strong&gt;: this may sound somewhat obvious but I think people tend to under-appreciate how the &lt;em&gt;ways&lt;/em&gt; that users are finding or getting to use a thing is a key variable for safety, and you &lt;em&gt;can&lt;/em&gt; control some of that by design (for example only sharing to certain users to start, having occasional intentional downtime, offering it for only a limited testing time that is given up front, using ads or other links for user acquisition that can be toggled on/off with a URL that cannot be publicly discovered otherwise, etc.)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;All of these are ways that I think one could start to offer services to real people (the greatest source of learning, to put my own biases on the table!) while having a lot more control over potential negative cases.&lt;/p&gt;
&lt;p&gt;Have other ideas? Have ways these could be better or further de-risked? &lt;a href=&quot;mailto:dave@fidg.org&quot;&gt;Drop me a note&lt;/a&gt; and I&#39;ll happily add your own to this post or another with attribution so that we can collectively get smarter at this and make more things people need and want on top of these (pretty darn impressive if unstable) materials.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>A newsletter</title>
		<link href="https://www.daveguarino.com/notes/newsletter/"/>
		<updated>2023-04-17T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/newsletter/</id>
		<content type="html">&lt;p&gt;I&#39;ve decided to try out &lt;a href=&quot;https://daveguarino.substack.com/p/daves-occasional-newsletter-2-updates&quot;&gt;a newsletter using Substack&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I plan to keep blogging here, but people have varying preferences in how they get stuff like this, so I&#39;m considering the Substack to be:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A way to do email distribution where I aggregate and share some things that may be here (or in toots/tweets)&lt;/li&gt;
&lt;li&gt;A bit of a test to find serendipity on that nascent network, which seems to be settling into a place at the very least worth exploring&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;(It&#39;s also a decidedly reversible decision, so why not! My first newsletter experiment used Mailchimp, and Substack has so far been both better as a CMS experience and on the cost outlook front.)&lt;/p&gt;
&lt;p&gt;So go check out &lt;a href=&quot;https://daveguarino.substack.com/p/daves-occasional-newsletter-2-updates&quot;&gt;Dave&#39;s Occasional Newsletter&lt;/a&gt;.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Problems, messes, and LLMs</title>
		<link href="https://www.daveguarino.com/notes/problems-messes-and-llms/"/>
		<updated>2023-03-21T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/problems-messes-and-llms/</id>
		<content type="html">&lt;p&gt;&lt;em&gt;This post goes into the bucket of &amp;quot;draft&amp;quot; or &amp;quot;thinking out loud&amp;quot;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I — like many others — am very excited by newly accessible large language models (LLMs) like ChatGPT and GPT-4 from OpenAI. I have been experimenting with these tools, and am rapidly developing a viewpoint that LLMs are about to change how we use software fairly dramatically, and fairly quickly.&lt;/p&gt;
&lt;p&gt;Recently I tried connecting OpenAI&#39;s GPT-3 model via API to the (using a tool called LLamaIndex) to a large PDF document - specifically a SNAP advocacy guide for Massachusetts residents from the legal services and advocacy org MLRI.&lt;/p&gt;
&lt;p&gt;The results were very impressive. &lt;a href=&quot;https://twitter.com/allafarce/status/1634724190074073090&quot;&gt;Given a general question&lt;/a&gt;, the model - using the content from the guide - generally composed a solid answer.&lt;/p&gt;
&lt;p&gt;I even gave it &lt;a href=&quot;https://twitter.com/allafarce/status/1634959510916980738&quot;&gt;a &lt;em&gt;real&lt;/em&gt; question&lt;/a&gt; from a Massachusetts resident who posted on /r/foodstamps on Reddit and... it answered extremely well.&lt;/p&gt;
&lt;p&gt;I then wanted to pop in this model to a simple web app so I could share it with some folks and let them play around. Since the code was already in Python, I figured a small Flask app worked great for this. The problem is I hadn&#39;t built a Flask app from scratch in a bit, forgot the syntax and boilerplate.&lt;/p&gt;
&lt;p&gt;So... &lt;a href=&quot;https://twitter.com/allafarce/status/1637859868332752896?cxt=HHwWgIC8veu37LotAAAA&quot;&gt;I just asked GPT-4 to write the tiny app for for me&lt;/a&gt; and... the code worked. Completely and with minimal modification.&lt;/p&gt;
&lt;p&gt;What do I make of all this?&lt;/p&gt;
&lt;h2 id=&quot;problems-vs.-messes&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/problems-messes-and-llms/#problems-vs.-messes&quot;&gt;Problems vs. messes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A tangent first: a lot of how I perceive software getting built is in problem decomposition: given a stated problem, what series of sub-steps or -problems are necessary to tackle that build up to a solution to the problem.&lt;/p&gt;
&lt;p&gt;A concept I first read about in Lorin Hochstein&#39;s great post &lt;a href=&quot;https://surfingcomplexity.blog/2021/12/28/the-ambiguity-of-real-work/&quot;&gt;&amp;quot;The ambiguity of real work&amp;quot;&lt;/a&gt; is the distinction between &lt;em&gt;problems&lt;/em&gt; and &lt;em&gt;messes&lt;/em&gt;, from Russell Ackoff&#39;s paper &lt;a href=&quot;https://ackoffcenter.blogs.com/files/the-future-of-operational-research-is-past.pdf&quot;&gt;&amp;quot;The Future of Operational Research is Past&amp;quot;&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Managers are not confronted with problems that are independent of each other, but with dynamic situations that consist of complex systems of changing problems that interact with each other. I call such situations &lt;em&gt;messes&lt;/em&gt;. Problems are abstractions extracted from messes by analysis; they are to messes as atoms are to tables and chairs. We experience messes, tables, and chairs; not problems and atoms.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Because messes are systems of problems, the sum of the optimal solutions to each component problem taken separately is &lt;em&gt;not&lt;/em&gt; an optimal solution to the mess. The behavior of a mess depends more on how the solutions to its parts interact than on how they act independently of each other. But the unit in [operations research] is a problem, not a mess. Managers do not solve problems; they manage messes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This resonates with me in particular because, as much as I love programming, I&#39;ve always identified with the bundle of characteristics that gets called &lt;em&gt;product engineering&lt;/em&gt;. And a key part of that for me has been comfort with ambiguity.&lt;/p&gt;
&lt;p&gt;And I will say, it&#39;s not been my experience that everyone likes ambiguity! I know plenty of folks whose passion is solving well-scoped problems where the criteria for optimization are clear. It&#39;s certainly frustrating to be told your problem is X, work it, and then find out the problem was in fact Y. But also... the world is messes. To be able to be in a &amp;quot;problem solving&amp;quot; mode, there is a prerequisite of &lt;em&gt;someone having decomposed an ambiguous, uncertain, subjective mess into a technical problem&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And reasoning about messes is very different than reasoning about problems. Managing messes are often less about decomposition into clear axioms (&amp;quot;a new page in a web form entails additional routes and a view&amp;quot;) and more about poking and prodding at a system to see how it responds in actuality; or modeling it from first principles; or or or...&lt;/p&gt;
&lt;h2 id=&quot;llms-and-a-shift-in-the-human-role&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/problems-messes-and-llms/#llms-and-a-shift-in-the-human-role&quot;&gt;LLMs and a shift in the human role&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;What does this have to do with LLMs?&lt;/p&gt;
&lt;p&gt;I think what I&#39;m realizing is that LLMs increasingly cover the surface area of many &lt;em&gt;problems&lt;/em&gt;. Writing the correct syntax for a piece of logic in a given language is a &lt;em&gt;problem&lt;/em&gt;. Transforming or extracting from a corpus of text is fundamentally a &lt;em&gt;problem&lt;/em&gt;. These are things can be solved and optimized.&lt;/p&gt;
&lt;p&gt;I also think that means that more of the human operator role in technology or software becomes dealing with &lt;em&gt;messes&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;I don&#39;t think this is all that different from prior developments in software. Most who know me in a technology context know I really like the web framework Ruby on Rails.&lt;/p&gt;
&lt;p&gt;Why? Because what I most enjoy is spelunking complex domain messes in which problems exist. Once something gets to an unambiguous and clearly scoped problem, I will confess I get a little bored!&lt;/p&gt;
&lt;p&gt;Rails enabled me to apply software to &lt;em&gt;messes&lt;/em&gt; over and over again, because the problems in the bucket of &amp;quot;how you make a web app&amp;quot; were largely taken care of. My own work was overwhelmingly spent in applying methods to make sure I was building the right thing, not building the thing right (already taken care of!)&lt;/p&gt;
&lt;p&gt;I &lt;em&gt;think&lt;/em&gt; what I see with LLMs is that same shape of a shift, just at a much more profound level: that more and more of the human work of software and technology will be reasoning about and managing messes.&lt;/p&gt;
&lt;p&gt;Take the example above: given a decent piece of documentation on navigating a public benefit program, creating a query interface a user could use is now quite easy. I do not exaggerate when I say that most of the similar interfaces in production now I&#39;m aware of &lt;em&gt;hard code responses&lt;/em&gt; to an intent detector. This is likely your experience with a government chatbot if you&#39;ve ever used one.&lt;/p&gt;
&lt;p&gt;As another example, we still have a lot of situations where a human is reviewing a bunch of uploaded PDFs to get information out of them and type that into a screen. We were already close to that being solvable with hard-coded logic on top, but are about to get to a world where we now just need to say &amp;quot;these documents show information about income — extract how much income they prove and what the timeframe was (month, biweekly, weekly, etc.)&amp;quot; That... might well work in a high percentage of cases out of the box as of... this month.&lt;/p&gt;
&lt;p&gt;So where does the human attention (a scarce resource!) go to? The messy layers above, around ensuring that answers are safe, relatively confident, having feedback loops, etc etc. Still a lot of work to be done! And that&#39;s not even taking into account all of the &lt;em&gt;institutional mess&lt;/em&gt; work that entails making use of these technologies in large, old, and complex organizations and markets. An LLM can certainly extract text content much better; it is much worse at, say, navigating a relationship with a regulator, or making in-roads into a multi-sided market.&lt;/p&gt;
&lt;p&gt;A conclusion for me: &lt;strong&gt;tacit knowledge about domain messes might well soon become the top constraint (and highest ROI human work on deployment of this technology&lt;/strong&gt;. And when I say tacit knowledge, I don&#39;t necessarily mean the &lt;em&gt;formal&lt;/em&gt; knowledge of a domain. Instead I mean understanding &lt;em&gt;how domains really work&lt;/em&gt; rather than how we like to think they work. (An effective counter-argument here is that I love that kind of domain spelunking so, so much that this whole last argument is so squarely in my own interest that it&#39;s worth being deeply skeptical of!)&lt;/p&gt;
&lt;p&gt;I don&#39;t know where this will go. But I&#39;m spending a lot of time right now doing two things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Testing LLM performance about problems I &lt;em&gt;know&lt;/em&gt; exist under messes in domains I know a bit about&lt;/li&gt;
&lt;li&gt;Thinking about ways for LLMs to provide leverage &lt;em&gt;on&lt;/em&gt; spelunking complex domains&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It&#39;s always a bit easy and dangerous in a hype-incentivized domain like tech to say this time is different. But best I can tell — this time sure seems different.&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Masoor dal (red lentils) is a great test app for cooking</title>
		<link href="https://www.daveguarino.com/notes/masoor-dal-is-a-great-test-app-for-cooking/"/>
		<updated>2023-01-30T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/masoor-dal-is-a-great-test-app-for-cooking/</id>
		<content type="html">&lt;p&gt;I put a lot of intentional time into learning cooking during the pandemic. To be completely frank, I&#39;ve never cooked much at all in my life, getting by mostly with frozen meals and cost-effective takeout like tacos (a blessing of living in California.) So this was a significant change for me.&lt;/p&gt;
&lt;p&gt;A lot of folks have talked about the parallels between cooking and programming. (Aside: I think it&#39;s not shocking that &lt;a href=&quot;https://www.inkandswitch.com/potluck/&quot;&gt;Ink and Switch&#39;s recent research prototype Potluck&lt;/a&gt; uses cooking and recipes as the domain to explore dynamic documents as personal software.) They are activities that can be done solo, in general, with relatively quick feedback loops, plenty of tacit knowledge, and levels of abstraction that can be achieved and transferred across different instances of problems or aims.&lt;/p&gt;
&lt;p&gt;Having acquired a number of cooking books during this effort, two really stuck with me as the most valuable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.saltfatacidheat.com/buy-book&quot;&gt;Salt Fat Acid Heat&lt;/a&gt; by Samin Nosrat - This is the highly predictable guess.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.amazon.com/Masala-Lab-Science-Indian-Cooking/dp/0143451375&quot;&gt;Masala Lab: The Science of Indian Cooking&lt;/a&gt; by Krish Ashok - This is the less predictable and standout book for me! While focused on Indian cooking&#39;s methods, it generalizes and goes into the science quite well. What&#39;s more, Ashok &lt;em&gt;explicitly&lt;/em&gt; takes an algorithmic approach, describing for example a general-purpose algorithm for composing Indian gravies (dba &amp;quot;curries&amp;quot; in many corners) with different variables to tinker with to yield different flavor profiles that evoke the cuisines of different regions.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;What both books have in common is a focus &lt;em&gt;less&lt;/em&gt; on specific recipes, and more on &lt;em&gt;patterns and abstractions&lt;/em&gt; that are useful across dishes.&lt;/p&gt;
&lt;p&gt;But to actually use any of these patterns and abstractions, you actually need a concrete context, and that generally means applying the ideas to generate &lt;em&gt;a dish that does not suck.&lt;/em&gt; For an amateur, I&#39;ll confess I think that&#39;s easier said than done!&lt;/p&gt;
&lt;h2 id=&quot;masoor-dal%3A-a-kind-learning-environment&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/masoor-dal-is-a-great-test-app-for-cooking/#masoor-dal%3A-a-kind-learning-environment&quot;&gt;Masoor dal: a kind learning environment&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Remember &lt;a href=&quot;https://todomvc.com/&quot;&gt;TodoMVC&lt;/a&gt;? It&#39;s a site that shows how to implement a small todo app in a variety of Javascript frameworks. The point is to illustrate the different tools, how they work, how you use them, all with a sufficiently compact problem domain that your attention goes less to that problem and more to the details of each framework.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/aTuFxebVil-640.webp 640w, https://www.daveguarino.com/img/aTuFxebVil-768.webp 768w, https://www.daveguarino.com/img/aTuFxebVil-1600.webp 1600w, https://www.daveguarino.com/img/aTuFxebVil-2048.webp 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/aTuFxebVil-640.jpeg&quot; alt=&quot;TodoMVC screenshot&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;1316&quot; srcset=&quot;https://www.daveguarino.com/img/aTuFxebVil-640.jpeg 640w, https://www.daveguarino.com/img/aTuFxebVil-768.jpeg 768w, https://www.daveguarino.com/img/aTuFxebVil-1600.jpeg 1600w, https://www.daveguarino.com/img/aTuFxebVil-2048.jpeg 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Masoor dal - red lentils - has been a wonderful &amp;quot;test app&amp;quot; for me.&lt;/b&gt; It&#39;s relatively easy, very fast (20-30 mins?), exceedingly cheap (reducing downside risk cost of a failed attempt), and maybe most importantly it is an excellent medium for trying many different flavors and micro-methods involved in cooking.&lt;/p&gt;
&lt;p&gt;Put another way, masoor dal has represented a &amp;quot;kind learning environment&amp;quot; for cooking. This concept comes from &lt;a href=&quot;https://www.google.com/books/edition/Educating_Intuition/fsffJGkpwVIC?hl=en&amp;amp;gbpv=0&quot;&gt;psychology&lt;/a&gt; which differentiates between &lt;em&gt;kind&lt;/em&gt; and &lt;em&gt;wicked&lt;/em&gt; learning environments, which can also be read as feedback loop environments. I first learned of the concept from &lt;a href=&quot;https://davidepstein.substack.com/&quot;&gt;David Epstein&lt;/a&gt;&#39;s &lt;em&gt;Range: Why Generalists Triumph in a Specialized World&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;To quote from that book:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;[In] &#39;kind&#39; learning environments. Patterns repeat over and over, and feedback is extremely accurate and usually very rapid. In golf or chess, a ball or piece is moved according to rules and within defined boundaries, a consequence is quickly apparent, and similar challenges occur repeatedly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;In &#39;wicked&#39; domains, the rules of the game are often unclear or incomplete, there may or may not be repetitive patterns and they may not be obvious, and feedback is often delayed, inaccurate, or both. In the most devilishly wicked learning environments, experience will reinforce the exact wrong lessons. [1]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Making masoor dal has let me quickly &lt;em&gt;do&lt;/em&gt; something, and see how it works (or doesn&#39;t.)&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/TKu9T0ycE8-640.webp 640w, https://www.daveguarino.com/img/TKu9T0ycE8-768.webp 768w, https://www.daveguarino.com/img/TKu9T0ycE8-1600.webp 1600w, https://www.daveguarino.com/img/TKu9T0ycE8-2048.webp 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/TKu9T0ycE8-640.jpeg&quot; alt=&quot;Red lentils cooking and pan with oil and cumin in it&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2730&quot; srcset=&quot;https://www.daveguarino.com/img/TKu9T0ycE8-640.jpeg 640w, https://www.daveguarino.com/img/TKu9T0ycE8-768.jpeg 768w, https://www.daveguarino.com/img/TKu9T0ycE8-1600.jpeg 1600w, https://www.daveguarino.com/img/TKu9T0ycE8-2048.jpeg 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Careful observers may note the post-it reading &lt;b&gt;Is the oven off?&lt;/b&gt; affixed to the stove face. As they say: service design is my passion - aaand I keep leaving the oven on.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Some examples of the micro-skills I spend more of my attention on when making it over and over:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Understanding &amp;quot;when the oil shimmers&amp;quot; as a signal of sufficient heat to add whole spices like cumin&lt;/li&gt;
&lt;li&gt;Figuring out what onions being cooked to some &amp;quot;golden&amp;quot; and vaguely transparent level really means&lt;/li&gt;
&lt;li&gt;Smelling garlic or ginger (or other spices) cooking in oil and learning what &amp;quot;when the spices are aromatic&amp;quot; actually means experientially&lt;/li&gt;
&lt;li&gt;Chopping onions (yes! chopping onions well is not something humans leave the womb fully-formed in capability on! and what&#39;s more this task drives me to a yak shave - getting a proper chef&#39;s knife, which I now use for virtually everything and on the order of 10-30 times per day)&lt;/li&gt;
&lt;li&gt;Cooking down fresh tomatoes (and the relative differences of using canned tomatoes - which are great too for this!)&lt;/li&gt;
&lt;li&gt;The significant effect of a &lt;em&gt;tiny&lt;/em&gt; amount of turmeric on a tomato and onion flavor profile&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/eHhZ0lDhOt-640.webp 640w, https://www.daveguarino.com/img/eHhZ0lDhOt-768.webp 768w, https://www.daveguarino.com/img/eHhZ0lDhOt-1600.webp 1600w, https://www.daveguarino.com/img/eHhZ0lDhOt-2048.webp 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/eHhZ0lDhOt-640.jpeg&quot; alt=&quot;Tomatoes onions and other spices cooking in a pan&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2730&quot; srcset=&quot;https://www.daveguarino.com/img/eHhZ0lDhOt-640.jpeg 640w, https://www.daveguarino.com/img/eHhZ0lDhOt-768.jpeg 768w, https://www.daveguarino.com/img/eHhZ0lDhOt-1600.jpeg 1600w, https://www.daveguarino.com/img/eHhZ0lDhOt-2048.jpeg 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;And by far the most important of all!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to &lt;b&gt;balance a dish with the incremental addition of salt and acid&lt;/b&gt; (fresh lemon juice is my ride-or-die companion in the kitchen these days)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I can hardly describe the revelatory power of tasting a batch fresh off the stove, squeezing some lemon juice, and then finding the dish to be a &lt;em&gt;completely&lt;/em&gt; different and wonderful flavor.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://www.daveguarino.com/img/WDrtii7h_u-640.webp 640w, https://www.daveguarino.com/img/WDrtii7h_u-768.webp 768w, https://www.daveguarino.com/img/WDrtii7h_u-1600.webp 1600w, https://www.daveguarino.com/img/WDrtii7h_u-2048.webp 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;img src=&quot;https://www.daveguarino.com/img/WDrtii7h_u-640.jpeg&quot; alt=&quot;Dal fully cooked with a small amount of tadka on top&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2048&quot; height=&quot;2730&quot; srcset=&quot;https://www.daveguarino.com/img/WDrtii7h_u-640.jpeg 640w, https://www.daveguarino.com/img/WDrtii7h_u-768.jpeg 768w, https://www.daveguarino.com/img/WDrtii7h_u-1600.jpeg 1600w, https://www.daveguarino.com/img/WDrtii7h_u-2048.jpeg 2048w&quot; sizes=&quot;(min-width: 30em) 100vw, 100vw&quot; /&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;my-own-favorite-masoor-dal%3A-a-bengali-flavor&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/masoor-dal-is-a-great-test-app-for-cooking/#my-own-favorite-masoor-dal%3A-a-bengali-flavor&quot;&gt;My own favorite masoor dal: a Bengali flavor&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After much experimentation, my favorite masoor dal to cook these days is a Bengai-flavor-inspired riff using the ideas in  Masala Lab.&lt;/p&gt;
&lt;p&gt;It is... &lt;em&gt;very, very&lt;/em&gt; good. Oh did I mention dal is fairly healthy?&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cookshideout.com/bengali-red-masoor-dal-bangali-musurir-dal-recipe&quot;&gt;This recipe&lt;/a&gt; is an excellent proxy, though I make the following specific changes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;It is a &lt;em&gt;must&lt;/em&gt; to use &lt;em&gt;mustard seed oil&lt;/em&gt; here&lt;/li&gt;
&lt;li&gt;I use 1 serrano pepper specifically for more (and &amp;quot;clean&amp;quot; i.e. unflavored) heat&lt;/li&gt;
&lt;li&gt;I use 1 medium white onion&lt;/li&gt;
&lt;li&gt;I use roma tomatoes, but occasionally use a canned tomatoes, and I&#39;m still undecided which I prefer (canned is perhaps slightly leading for me right now)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I live in the US, and as such there are two ingredients that may be slightly harder to find, and so recommend visiting an Indian grocery or ordering from online (Amazon has both) - these are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mustard seed oil&lt;/li&gt;
&lt;li&gt;Panch phoron spice mix (a mix of 5 whole spices, so if you happen to be a spice nut already, and you have cumin, fenugreek, brown mustard seeds, fennel and nigella seeds on hand, you&#39;re good to go)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;[1] Source of these quotes is the book, but are pulled from &lt;a href=&quot;https://www.driverlesscrocodile.com/books-and-recommendations/more-from-david-epstein-on-kind-and-wicked-learning-environments/&quot;&gt;https://www.driverlesscrocodile.com/books-and-recommendations/more-from-david-epstein-on-kind-and-wicked-learning-environments/&lt;/a&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Designing for flexibility (or: users find a way)</title>
		<link href="https://www.daveguarino.com/notes/designing-for-flexibility-or-users-find-a-way/"/>
		<updated>2022-12-23T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/designing-for-flexibility-or-users-find-a-way/</id>
		<content type="html">&lt;p&gt;I spend a lot of time thinking about &amp;quot;practical knowledge.&amp;quot; Or, a slight variation, how different forms of practice or participation in a system yield differential access to certain knowledge about a system.&lt;/p&gt;
&lt;p&gt;One category of knowledge on my mind lately is the understanding of edge cases when users of software are given some degree of flexibility: for example, allowing input on a front end that may be invalid downstream, open ended questions asking for freeform text, an on-page chat interaction to ask for help.&lt;/p&gt;
&lt;p&gt;During the 6 years I spent working on &lt;a href=&quot;https://www.getcalfresh.org/&quot;&gt;GetCalFresh&lt;/a&gt; - but particularly in the early years of rapid iteration and high-touch concierging issues people had trying to apply for food stamps through the service - I came upon &lt;em&gt;many&lt;/em&gt; examples of unexpected user behavior. Perhaps even beyond &amp;quot;unexpected&amp;quot; and into the category of what I might call &amp;quot;&lt;a href=&quot;https://www.destroyallsoftware.com/talks/wat&quot;&gt;wat&lt;/a&gt;.&amp;quot;&lt;/p&gt;
&lt;p&gt;In the early days, I remember fondly returning to a phrase time and again - &lt;strong&gt;users find a way&lt;/strong&gt;. Provided even a modicum of space for novel behavior, users would interact with our service in &lt;em&gt;incredibly&lt;/em&gt; unexpected ways.&lt;/p&gt;
&lt;p&gt;A few examples of unexpected user behavior I have seen first-hand, in the wild:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A user somehow successfully using our web site to apply for food stamps &lt;em&gt;on a video game console browser (if I recall, it was some generation of XBox)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;A user entering their name, character by character, in individual-letter emoji rather than letters themselves&lt;/li&gt;
&lt;li&gt;A user who uploaded a single document attached to their application: it was an audio file in a file format I had never seen of their own voice saying &amp;quot;I don&#39;t have any documents to submit&amp;quot; (upon investigation, I think we discovered that this format came from a particular flavor of Android phone prompting an option to record audio at a file upload point)&lt;/li&gt;
&lt;li&gt;Contra a very fundamental administrative premise of how food stamps work in California (that they are administered at the county-level) many different instances of people putting in an incorrect county for their city/zip code&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;...and many other examples I can&#39;t recall at this early morning hour.&lt;/p&gt;
&lt;p&gt;(I would be remiss here if I did not link to the delightful and evergreen &lt;a href=&quot;https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/&quot;&gt;Falsehoods programmers believe about names by Patrick McKenzie/patio11&lt;/a&gt; as a classic in a similar vein.)&lt;/p&gt;
&lt;p&gt;Now the first few examples above might seem like completely reasonable edge cases that, if impossible, would create a tiny hassle for some people, but maybe not major problems. The last one - county mismatch with city - is potentially a much more significant insight: for me at least, having seen that case (and having figured out how to fix it for people manually prior to submitting it to the correct county) gave me re-anchored me in a very positive way.&lt;/p&gt;
&lt;p&gt;Whereas the most obvious way to design this series of questions was to start right there up front with asking &amp;quot;what county do you live in?&amp;quot; I now had much more texture on the really existing spectrum of user processing of that question. That led to some &lt;em&gt;very&lt;/em&gt; different design approaches over time; approaches that would have never been considered without (1) the initial flexibility for users to signal to us that processing information via their behavior and (2) an active process for investigating and fixing corner cases like this.&lt;/p&gt;
&lt;p&gt;What am I getting at here? Designing software to be flexible specifically in the sense that users &lt;em&gt;can do annoying things you do not anticipate&lt;/em&gt; is a window into the actual domain you are building in that should not be undervalued.&lt;/p&gt;
&lt;p&gt;To get less abstract, I have found a huge amount of learning value myself in things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Minimizing form field validation in the early stages of a service (accept accents characters! accept emoji! accept damn near anything!) even if downstream that form data needs to go into a &lt;em&gt;more&lt;/em&gt; restrictive database (say, a legacy system with character limits or intolerant of accent marks)&lt;/li&gt;
&lt;li&gt;Having open ended questions like &amp;quot;is there anything else we didn&#39;t ask you think is relevant?&amp;quot;&lt;/li&gt;
&lt;li&gt;Building in &amp;quot;escape hatches&amp;quot; at critical points where the default path might be an uncomfortable pushing of a user down some direction, but you allow them to pull the rip cord and say it&#39;s not working for them in some way (say, a terms of service that you suspect might be scary to users in its legalese - you could have an explicit button or way to reach out, offering it if the user is confused or overwhelmed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These examples are grounded in a multi-page web form style service, but I would like to be explicit this concept -  &lt;em&gt;design in flexibility, to let users tell you what you don&#39;t know&lt;/em&gt; - doesn&#39;t solely apply to online or software services. Think about a paper form that might say: &amp;quot;Confused? Overwhelmed? Give us a call here.&amp;quot;&lt;/p&gt;
&lt;p&gt;The other side of this is a big tradeoff: automation. What makes software a peculiar material is that it can scale and automate things so effectively. The more flexibility you build in, the less automation you potentially have. Infinite flexibility, for example - just narrate your situation and we&#39;ll fill out the form for you - is virtually unscaleable. And, huh, what does that &amp;quot;infinite flexibility&amp;quot; sound like? It sounds a lot like a direct service provided by an individual! Much of the really-existing use of technology is framed in the vein of &lt;em&gt;self-service&lt;/em&gt; - definitionally designing something to take on the burden of some direct service for efficiency and other goals. (None of this is intended as judgment, but rather description. There are many reasonable points on this spectrum of flexibility in design based on the constraints of the system in which a serve exists.)&lt;/p&gt;
&lt;p&gt;The primary thing - the &amp;quot;odd bit of tacit knowledge&amp;quot; here - that I&#39;m trying to share is this relationship between intentionally flexible design providing this window into aspects of reality that very few others will have.&lt;/p&gt;
&lt;p&gt;If you have fun examples of &lt;em&gt;wat&lt;/em&gt; user behavior, &lt;a href=&quot;https://www.daveguarino.com/contact/&quot;&gt;send me a little note!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;This post - like all posts here - represents my personal views and experiences, and not those of any employer or affiliated organization past, present, or future.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Does GitHub have a maximum limit on number of issues?</title>
		<link href="https://www.daveguarino.com/notes/does-github-have-a-maximum-limit-for-number-of-issues/"/>
		<updated>2022-07-01T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/does-github-have-a-maximum-limit-for-number-of-issues/</id>
		<content type="html">&lt;h2 id=&quot;no.&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/does-github-have-a-maximum-limit-for-number-of-issues/#no.&quot;&gt;No.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is no (documented) maximum limit for the number of issues a GitHub repository can have.&lt;/p&gt;
&lt;p&gt;Some repos with a large number of issues:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/AdguardTeam/AdguardFilters/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;Adguard Filters&lt;/a&gt;: ~113,000&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aclosed&quot;&gt;Flutter&lt;/a&gt;: ~70,000 issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/kubernetes/kubernetes/issues?q=is%3Aissue+&quot;&gt;Kubernetes&lt;/a&gt;: ~41,000 issues&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tensorflow/tensorflow/issues?q=is%3Aissue+&quot;&gt;Tensorflow&lt;/a&gt;: ~35,000 issues&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;If you know of a documented limit or have evidence of an undocumented limit, please &lt;a href=&quot;mailto:dave@fidg.org&quot;&gt;email me&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
	
	<entry>
		<title>Why I find Google Search ads valuable for user research</title>
		<link href="https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/"/>
		<updated>2022-01-06T00:00:00Z</updated>
		<id>https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/</id>
		<content type="html">&lt;p&gt;Recently, I &lt;a href=&quot;https://twitter.com/allafarce/status/1475528305524678664&quot;&gt;shared&lt;/a&gt; a write-up of some work I worked on with a few wonderful colleagues (Anne and Justin) at the California Office of Digital Innovation, where I&#39;ve done varied work for the past ~1.5 pandemic years or so.&lt;/p&gt;
&lt;p&gt;This work was fundamentally about identifying — in an acute and actionable way — barriers Californians were facing in accessing the Emergency Broadband Benefit (EBB), a pandemic benefit providing $50-$75 per month for internet to lower-income Americans.&lt;/p&gt;
&lt;p&gt;Anne made a comment on Twitter:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/anneneville/status/1475585650246123525&quot;&gt;https://twitter.com/anneneville/status/1475585650246123525&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So I figured I would briefly detail why I really like having Google Search ads (&amp;quot;AdWords&amp;quot;) in the toolbelt for doing user research.&lt;/p&gt;
&lt;h2 id=&quot;1.-you-can-reach-people-right-at-the-point-that-they-have-the-acute-need-you&#39;re-looking-to-understand-(aka-%22already-activated%22)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#1.-you-can-reach-people-right-at-the-point-that-they-have-the-acute-need-you&#39;re-looking-to-understand-(aka-%22already-activated%22)&quot;&gt;1. You can reach people right at the point that they have the acute need you&#39;re looking to understand (aka &amp;quot;already activated&amp;quot;)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Talking to someone who, 15 minutes ago, searched for &amp;quot;cheap internet&amp;quot; or &amp;quot;internet discount&amp;quot; is very different than talking to, for example, someone who is generally eligible for an internet subsidy because they live on a lower income.&lt;/p&gt;
&lt;p&gt;The slightly more jargon-y way to put this is the person is already &lt;em&gt;activated&lt;/em&gt;: the need is top of mind, and they&#39;re pursuing it — right now.&lt;/p&gt;
&lt;p&gt;Talking to people who may want but don&#39;t have broadband internet at home is also useful; it&#39;s just getting at a different piece of the puzzle.&lt;/p&gt;
&lt;p&gt;In our case, we wanted to understand what might be standing in the way of a person who &lt;em&gt;is eligible&lt;/em&gt; and has &lt;em&gt;already decided they have this need&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And that&#39;s precisely the research context where connecting with someone based on a search query they made is so useful.&lt;/p&gt;
&lt;h2 id=&quot;2.-with-ads%2C-you-can-control-volume-(%23-of-people-who-see-the-ad-and-who-you-reach-out-to)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#2.-with-ads%2C-you-can-control-volume-(%23-of-people-who-see-the-ad-and-who-you-reach-out-to)&quot;&gt;2. With ads, you can control volume (# of people who see the ad and who you reach out to)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can turn ads off and on at will. You can also set a daily budget target that will generally constrain your spend (and how many people see it.) It&#39;s not perfectly precise throttling, but it&#39;s absolutely good enough for most cases.&lt;/p&gt;
&lt;p&gt;Controlling volume is particularly valuable if you want to have fairly involved conversation with someone, like we did actively helping folks through the application as far as they wanted.&lt;/p&gt;
&lt;p&gt;It&#39;s also helpful if you&#39;re, for example, not wanting to drive a &lt;em&gt;massive&lt;/em&gt; amount of traffic to the landing page because this is your very first exposure of users to whatever content you put there. Many government sites are so high-volume that a direct link from, say, a main page would drive an immense amount of traffic. While you should work hard to make whatever landing page content is there valuable, no amount of thinking and working hard on that content is a substitute for getting view into how actual users engage with it. (To riff on an old saying: not even the strongest content design survives first contact with actual users.)&lt;/p&gt;
&lt;p&gt;While search ads are one way to control volume, you can also achieve that in other ways for this kind of recruitment:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Having an on-page &amp;quot;intercept&amp;quot; (thing that actually asks the user if they&#39;re open to talking) that you can toggle on or off&lt;/li&gt;
&lt;li&gt;Sprinkling just a dash of code on the landing page to show only a certain percent of users (say, 1 in 10) the intercept&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3.-while-you-might-not-have-set-up-adwords%2C-other-parts-of-your-organization-(even-in-government)-may-already-have-done-that&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#3.-while-you-might-not-have-set-up-adwords%2C-other-parts-of-your-organization-(even-in-government)-may-already-have-done-that&quot;&gt;3. While you might not have set up AdWords, other parts of your organization (even in government) may already have done that&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Google Search ads are generally a tool for marketing and digital outreach.&lt;/p&gt;
&lt;p&gt;While a research or technology team may not already have done that, a public affairs team or another department might have.&lt;/p&gt;
&lt;p&gt;Plenty of government agencies use AdWords for digital outreach already in fact. (As an anecdote, here in California I have seen search ads for getting a vaccine from a public health agency.)&lt;/p&gt;
&lt;p&gt;So even in organizational contexts where it&#39;s difficult to buy things like pay-as-you-go SaaS, look around and you may well find some smart colleague over in another spot has already navigated all that (albeit not for your research uses!)&lt;/p&gt;
&lt;p&gt;Aside: even if you are in a small, nimble org, setting up AdWords may be a little intimidating (it&#39;s a very powerful tool and design for power does not necessarily lead to simplicity.) It may not be the most zero-friction onboard, but you can definitely do it.&lt;/p&gt;
&lt;h2 id=&quot;4.-you-can-reach-users-without-creating-work-for-others-in-your-org-(or-in-a-partner-org)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#4.-you-can-reach-users-without-creating-work-for-others-in-your-org-(or-in-a-partner-org)&quot;&gt;4. You can reach users without creating work for others in your org (or in a partner org)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A common way to recruit people for research on a web site is to put that intercept &lt;em&gt;on&lt;/em&gt; the page. Let&#39;s say I&#39;m trying to understand user&#39; unmet needs in navigating the Department of Some Benefit (DSB.) Your first thought might be to put an intercept on the DSB home page. And yes, that&#39;s great!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;But&lt;/em&gt; in doing that, you&#39;re creating work for others when you don&#39;t have to. If you step back and think about your work with the incredible point of contact you have at DSB as a design problem itself, you&#39;re actually making the choice a &lt;em&gt;little&lt;/em&gt; bit harder for them because now they may have to go and try and get this prioritized, and communicate with other folks, etc. Sometimes that&#39;s worth it to the end of, for example, creating deeper buy-in.&lt;/p&gt;
&lt;p&gt;I happen to be of the opinion that if you have not talked to at least &lt;em&gt;one&lt;/em&gt; user though, choose whatever path absolutely minimizes the Time To User (TTU.) It&#39;s also nice to be able to say to a partner, &amp;quot;we&#39;re going to talk to some users — no action needed on your end, let us know if you have any questions or concerns!&amp;quot;&lt;/p&gt;
&lt;h2 id=&quot;5.-you-are-reaching-people-before-they-hit-any-friction-or-barriers-in-the-actual-service-that-may-push-them-out&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#5.-you-are-reaching-people-before-they-hit-any-friction-or-barriers-in-the-actual-service-that-may-push-them-out&quot;&gt;5. You are reaching people &lt;em&gt;before&lt;/em&gt; they hit any friction or barriers in the actual service that may push them out&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a lot of people, a web search is &lt;em&gt;the&lt;/em&gt; first step to anything. And it&#39;s on the whole an extraordinarily low friction step to take.&lt;/p&gt;
&lt;p&gt;So if you cast your net there, you can reach a really wide swath of users.&lt;/p&gt;
&lt;p&gt;By contrast, intercepting users &lt;em&gt;later&lt;/em&gt; in some &amp;quot;journey&amp;quot; may add selection bias of in favor of users able to jump over some hoop or point of friction.&lt;/p&gt;
&lt;p&gt;One example: intercepting users at a certain question screen in an online benefits application is great to understand how people might struggle with that question. But did users have to create an account to get there? Now you&#39;re maybe losing vision into those folks&#39; experience.&lt;/p&gt;
&lt;p&gt;There&#39;s no perfect approach, but the point is that there are &lt;em&gt;such&lt;/em&gt; low barriers to making a web search that you get people &lt;em&gt;before&lt;/em&gt; any kind of friction in the process pushes anyone out. That&#39;s pretty valuable, &lt;em&gt;particularly&lt;/em&gt; for services with &amp;quot;heavy front doors&amp;quot; (say, complex account creation or identity proofing steps early on.)&lt;/p&gt;
&lt;h2 id=&quot;6.-being-forced-to-write-a-landing-page-with-some-value-for-users-is-a-good-forcing-function-to-actually-%22work-the-problem%22-(the-mmm-mvp)&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#6.-being-forced-to-write-a-landing-page-with-some-value-for-users-is-a-good-forcing-function-to-actually-%22work-the-problem%22-(the-mmm-mvp)&quot;&gt;6. Being forced to write a landing page with &lt;em&gt;some&lt;/em&gt; value for users is a good forcing function to actually &amp;quot;work the problem&amp;quot; (the MMM-MVP)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For our EBB research, we didn&#39;t just run ads saying &amp;quot;we&#39;re doing research please talk to us!&amp;quot; We wanted to provide actual value to Californians who were searching for a need they had, since this benefit was now available to them.&lt;/p&gt;
&lt;p&gt;So we had to both make ad copy language and write a landing page (in plain, friendly language) that actually communicated the benefit in a way that could create understanding and clarity on (if they wanted) how to go get it.&lt;/p&gt;
&lt;p&gt;And doing that led to very practical knowledge development. Whereas before it had been pretty abstract &lt;em&gt;thinking&lt;/em&gt; about the benefit, being forced to write content actually forced us to grapple with substantive questions (and similar to what users themselves would have to tackle.)&lt;/p&gt;
&lt;p&gt;Example: Do families with kids receiving free and reduced lunch qualify? Yes, but what about the special pandemic situations where families who don&#39;t normally get it did? Have to dig into that!&lt;/p&gt;
&lt;p&gt;It&#39;s not a &lt;em&gt;lot&lt;/em&gt; of work, but it&#39;s very &lt;em&gt;different&lt;/em&gt; work than background research because of the practical motivation of trying to clearly explain this thing to real people.&lt;/p&gt;
&lt;h2 id=&quot;limitations-and-constraints&quot; tabindex=&quot;-1&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://www.daveguarino.com/notes/why-google-search-ads-for-user-research/#limitations-and-constraints&quot;&gt;Limitations and constraints&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Search ads are just one tool. And of course it has limitations! (If you&#39;ve ever met me, you&#39;d know &lt;em&gt;any&lt;/em&gt; totalizing view of some single lever &amp;quot;solving&amp;quot; a messy complex problem is decidedly not my jam.)&lt;/p&gt;
&lt;p&gt;Depending on your aim, you can and should also talk to people who prefer offline (in-person) services; who don&#39;t go to search first; who search in languages other than ones you speak; etc.&lt;/p&gt;
&lt;p&gt;So thinking about how this complements other approaches is good. Particularly, how does this stack up against how your &lt;em&gt;current&lt;/em&gt; default way of finding people to talk to? What different sampling biases does this present relative to the sampling biases in &lt;em&gt;those&lt;/em&gt; approaches?&lt;/p&gt;
&lt;p&gt;(For example, in our case I wanted to make sure we reached users out in more rural parts of California — instead of that being a massive lift and only being limited to one locale we could visit, we were able to talk to multiple people from very &lt;em&gt;different&lt;/em&gt; parts of rural California. On the flip side, we didn&#39;t really get to talk to people who were &lt;em&gt;completely&lt;/em&gt; cut off from internet whatsoever: by definition we were reaching people who often were using smartphones to search or a library or work computer.)&lt;/p&gt;
&lt;p&gt;But a big virtue of this particular tool is — as we found in our EBB work — it&#39;s one of the lowest-friction ways to &amp;quot;get out of the building&amp;quot; and talk to the people who are the &lt;em&gt;only&lt;/em&gt; true experts in their own experience of a thing. And speaking only from my own experience, the longer you wait to do that — and the more you let get in your way — the more likely you are to develop mental models that are detached from that experience.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;If this was useful to you, you can &lt;a href=&quot;https://docs.google.com/forms/d/1XtZpcm2s2VGQvQAc9pBh_4TEM0WlhK2QwKBtc5tIla8/edit#responses&quot;&gt;sign up&lt;/a&gt; for very occasional emails from me on things like this.&lt;/em&gt;&lt;/p&gt;
</content>
	</entry>
</feed>
