&lt;?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Nat Torkington</title>
  <subtitle>Nat Torkington — people, software, success</subtitle>
  <link href="https://nathan.torkington.com/" rel="alternate" />
  <link href="https://nathan.torkington.com/atom.xml" rel="self" />
  <id>https://nathan.torkington.com/</id>
  <updated>2026-03-17T03:55:56Z</updated>
  <generator>Hugo -- gohugo.io</generator>
  <entry>
    <title>Simon Willison&#39;s Weblog</title>
    <link href="https://simonwillison.net/" rel="alternate" />
    <link href="https://nathan.torkington.com/links/2026-03-16-sample-link/" rel="via" />
    <id>https://nathan.torkington.com/links/2026-03-16-sample-link/</id>
    <published>2026-03-16T00:00:00Z</published>
    <updated>2026-03-16T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>The inspiration for this site&rsquo;s redesign. Simon builds his blog with a custom Django app and publishes a mix of entries, links, and notes.</p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: C# and .NET</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-c-and-net/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-c-and-net/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context. <strong>(We&rsquo;re hiring WinForms seniors! Mail me: <a href="mailto:nat@ontempo.co.nz">nat@ontempo.co.nz</a>)</strong></p>
<p>[20221224] <a href="https://www.jamesmichaelhickey.com/how-to-structure-your-dot-net-solutions-design-and-trade-offs/">How to Structure Your .NET Solutions: Architecture and Trade-Offs</a> – what it says on the box.</p>
<p>[20221224] <a href="https://dotnet.github.io/docfx/">DocFx</a> – generate static documentation site from embedded XML documentation.</p>
<p>[20221224] <a href="https://dotnet.christmas/2022">.NET Advent Calendar</a> – most are interesting, though they’re so diverse it’s the rare person who’d be interested in all.</p>
<p>[20221210] <a href="https://sergiopedri.medium.com/announcing-computesharp-2-0-run-c-on-the-gpu-with-ease-through-directx-12-and-d2d1-be4f3f2312b4">ComputeSharp</a> – run C# on the GPU.</p>
<p>[20221210] <a href="http://nlua.org/">NLua</a> – .NET Lua interpreter.</p>
<p>[20220719] <a href="https://code-maze.com/lambda-expressions-in-csharp/">Lambdas in C#</a> – quick overview of syntax.</p>
<p>[20220525] <a href="https://blog.ndepend.com/wpf-winforms-ui-refactoring-a-case-study/">Winforms UI Refactoring: A Case Study</a> – brief, just about using their dependency mapping tool to figure out coupling.</p>
<p>[20220525] <a href="https://devblogs.microsoft.com/xamarin/tips-for-porting-your-xamarin-library-to-dotnet-maui/">Moving Your Xamarin Library to MAUI</a> – rewrite/refactor/bifurcate; understand your dependencies; upgrade CSPROJ; implement single-project multitargeting; fix problems caused by dependencies or .NET version shifts; keep same filenames to ease merging.</p>
<p>[20220519] <a href="https://www.syncfusion.com/blogs/post/configuring-life-cycle-events-in-net-maui-apps.aspx">Life Cycle Events in MAUI</a> – Running, Not Running, Deactivated, Stopped are the states, and there are events you can receive when you move between the states.</p>
<p>[20220330] <a href="https://www.stevefenton.co.uk/2022/03/parameter-null-checking-in-c/">Parameter Null Checking in C# 11</a> – !! on a parameter name in the definition automatically performs null checking.</p>
<p>[20220330] <a href="https://github.com/App-vNext/Polly">Polly</a> – a .NET resilience and transient-fault-handling library that allows developers to express policies such as Retry, Circuit Breaker, Timeout, Bulkhead Isolation, Rate-limiting and Fallback in a fluent and thread-safe manner.</p>
<p>[20220324] <a href="https://www.stevefenton.co.uk/2022/02/raw-string-literals-in-c/">Raw String Literals in C#</a> – stolen from Perl which stole it from the Bourne shell, I think.</p>
<p>[20220323] <a href="https://code-maze.com/csharp-populate-array-same-value/">Populating an Array with the Same Value</a> – for() loop is slow but does deep copy; Enumerable.Repeat is faster and lets us say how many copies of a value we get; Array.Fill is fastest but has no option for partial fill.</p>
<p>[20220323] <a href="https://code-maze.com/csharp-params-keyword/">Params in C#</a> – get function parameters in an array instead of naming them in the function definition.</p>
<p>[20220323] <a href="https://www.syncfusion.com/blogs/post/5-important-things-to-make-your-cross-platform-net-maui-app-accessible.aspx">Accessible MAUI Apps</a> - Screen reader assistance; Colors and contrast; Size; Keyboard navigation; Writing or icon representation.</p>
<p>[20220323] <a href="https://restsharp.dev/">RestSharp</a> – HTTP client library with automatic serialization and deserialization, request and response type detection, variety of authentications.</p>
<p>[20220323] <a href="https://www.telerik.com/blogs/building-serverless-web-apps-blazor-chart-4-aws-lambda-function-api">DI in AWS Lambda functions in C#</a> – building an API with Lambda functions in C#, using dependency injection which apparently required some research.</p>
<p>[20220317] <a href="https://www.telerik.com/products/reporting.aspx">Telerik Reporting</a> – huh, they have their own SSRS type thing? Now it’s in React as well.</p>
<p>[20220317] <a href="https://code-maze.com/csharp-datetime-format/">C# DateTime Formats</a> – far more than you ever wanted to know about formatting datetimes.</p>
<p>[20220317] <a href="https://code-maze.com/csharp-differences-between-inequality-is-not-operators/">Inequality Operators</a> – “is not” requires constant expression on RHS, but does boxing and understands inheritance. “!=” doesn’t need constant expr RHS, but will fail if types are different and doesn’t understand inheritance. Consequently errors are different (cannot be applied vs cannot convert). “!=” can be overloaded, “is not” can’t be.</p>
<p>[20220314] <a href="https://www.claudiobernasconi.ch/2022/03/01/13-csharp-nuget-packages-every-dotnet-developer-needs-to-know/">10 .NET Packages Every Developer Needs to Know</a> – they are:</p>
<ul>
<li>
<p><a href="https://www.quartz-scheduler.net/">Quartz.Net</a> - scheduling</p>
</li>
<li>
<p><a href="https://serilog.net/">Serilog</a> - logging library, lots of pre-written integrations</p>
</li>
<li>
<p><a href="https://automapper.org/">Automapper</a> - copy data from one object structure to another, groks conventions like property names</p>
</li>
<li>
<p><a href="http://www.thepollyproject.org/">Polly</a> &ndash; allows developers to express policies when handling API calls, like retry, fallback, rate-limiting etc.</p>
</li>
<li>
<p><a href="https://fakeiteasy.github.io/">FakeItEasy</a> &ndash; creates fake objects, mocks, stubs, and more.</p>
</li>
<li>
<p><a href="https://xunit.net/">XUnit</a> &ndash; unit testing framework by authors of NUnitv2</p>
</li>
<li>
<p><a href="https://fluentvalidation.net/">FluentValidation</a> &ndash; strongly-typed validation rules.</p>
</li>
<li>
<p><a href="https://fluentassertions.com/">FluentAssertions</a> &ndash; extensive set of extension methods to specify the expected outcome of a unit test.</p>
</li>
<li>
<p><a href="https://autofac.org/">Autofac</a> &ndash; IoC container for .NET applications, with API and module system.</p>
</li>
<li>
<p><a href="https://nodatime.org/">Noda Time</a> &ndash; date and time API. E.g., date and time in a specific timezone.</p>
</li>
<li>
<p><a href="http://icsharpcode.github.io/SharpZipLib/">SharpZipLib</a> &ndash; compression library.</p>
</li>
<li>
<p><a href="https://html-agility-pack.net/">HtmlAgilityPack</a> &ndash; HTML parser in C#.</p>
</li>
<li>
<p><a href="https://github.com/jstedfast/MailKit">MailKit</a> &ndash; SMTP, IMAP, POP3.</p>
</li>
</ul>
<p>[20220225] <a href="https://enlear.academy/const-vs-readonly-vs-static-readonly-in-c-755c20aa0b57">Const vs ReadOnly vs Static ReadOnly</a> &ndash; const = compile time; readonly = can only set value in constructor; static readonly = only static methods can change the variable.</p>
<p>[20220217] <a href="https://github.com/roozbehid/WasmWinforms">WASM WinForms</a> –  nuget package that you can install and use your codes unchanged and run it on your browser!</p>
<p>[20220213] <a href="https://github.com/BionicFramework/">Bionic Framework</a> &ndash; using the Ionic Capacitor framework for xplat apps (which comes highly recommended) but with C# and Blazor.</p>
<p>[20220203] <a href="https://docs.microsoft.com/en-au/windows/communitytoolkit/developer-tools/guard">Guard class in Diagnostics toolkit</a> – simplify parameter checking</p>
<p>[20220203] <a href="https://code-maze.com/csharp-intparse-vs-convert-toint32/">int.Parse(), Convert.ToInt32(), and int.TryParse()</a> – behaviour on non-int strings. Parse() throws exceptions, ToInt32() returns 0. TryParse() returns two values, success and parsed value.</p>
<p>[20220128] <a href="https://endjin.com/blog/2022/01/raising-coding-standard-dotnet-analyzers">.NET Analyzer rules in Visual Studio</a></p>
<p>[20220201] <a href="https://www.c-sharpcorner.com/article/implementing-unit-and-integration-tests-on-net-with-xunit/">.NET testing with xUnit</a></p>
<p>[20220201] <a href="https://github.com/EliotJones/LetsShip">Developing and shipping a working .NET 5 application including deployments, devops, migrations, and Linux</a></p>
<p>[20220201] <a href="https://www.youtube.com/watch?v=fsO6pXz0umc">Platform-specific code in MAUI</a> (video)</p>
<p>[20220201] <a href="https://wrapt.dev/blog/building-an-event-driven-dotnet-application-the-fundamentals">Building an event-driven .NET application</a></p>
<p>[20220201] <a href="https://code-maze.com/convert-datetime-to-iso-8601-string-csharp/">DateTime to ISO8601 in C#</a></p>
<p>[20220201] <a href="https://www.banditoth.hu/2021/12/30/upgrading-xamarin-forms-projects-to-net-maui/">Upgrading Xamarin Forms to .NET MAUI</a></p>
<p>[20220201] <a href="https://code-maze.com/csharp-as-is-operators/">C# &ldquo;is&rdquo; and &ldquo;as&rdquo; operators</a></p>
<ul>
<li>
<p>“is” compares types</p>
<ul>
<li>
<p>foo.GetType() == typeof(SomeClass) // exact only</p>
</li>
<li>
<p>foo is SomeClass // understands inheritance</p>
</li>
</ul>
</li>
<li>
<p>“as” converts types</p>
<ul>
<li>var x = foo as SomeClass; // x is of type SomeClass, or is null if invalid conversion</li>
</ul>
</li>
</ul>
<p>[20220201] <a href="https://code-maze.com/csharp-records/">Records in C#</a></p>
<p>[20220201] <a href="https://www.codingwithcalvin.net/whats-the-difference-anyway-class-struct-record-oh-my/">C# structs vs records</a></p>
<p>[20220201] <a href="https://dotnet.microsoft.com/en-us/learn/dotnet/architecture-guides">.NET Architecture Guides</a></p>
<p>[20220201] <a href="https://dev.to/davidortinau/installing-net-maui-on-macos-4mmc">Installing .NET Maui on macOS</a></p>
<p>[20220201] <a href="https://jesseliberty.com/2021/12/29/11531/">Advanced Data Binding</a></p>
<p>[20220201] <a href="https://www.amazon.com.au/Deep-Dive-Modern-Mike-James/dp/1871962714">Deep C# book</a></p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Dev, Architecture, APIs</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-dev-architecture-apis/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-dev-architecture-apis/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://temporal.io/">Temporal.io</a> &ndash; <em>With Temporal, you write your various complex, potentially long-running actions as normal, synchronous code, which Temporal &ldquo;magically&rdquo; turns into distributed, asynchronous, automatically retried, idempotent jobs. The design is really elegant, and removes all of the hard work from writing code that must keep things in sync and handle failures through queueing and retrying.</em> (as described in <a href="https://news.ycombinator.com/item?id=34171751">this Hacker News comment</a>) Also: <em>Temporal jobs/tasks are called workflows because the code is effectively translated into workflow steps—i.e. code progress is made by workers, and each step is persisted so that if the worker dies, you don&rsquo;t lose anything—another worker picks up in the exact same place in the code, with all local variables and threads intact. It also provides helpful built-in features like retries and timeouts of anything that might fail, like network requests, and the ability to &ldquo;sleep&rdquo; for arbitrary periods without consuming threads/resources (other than a timer in a database that is automatically set up for you when you call `sleep(&lsquo;1 month&rsquo;)`).</em></p>
<p>[20221231] <a href="https://blog.daveallie.com/ulid-primary-keys">ULIDs and Primary Keys</a> &ndash; omg there’s an <a href="https://www.rfc-editor.org/rfc/rfc4122">RFC (4122) for UUIDs</a>. There are variants. Author of this blog post likes ULIDs. <em>They contain more randomness and a straightforward structure at the cost of not explicitly exposing the version, variant, or monotonic counter. UUIDs are also the perfect choice if you&rsquo;re writing some apocalypse-scenario software (assuming you have a working computer) as they can continue to be generated until 10,889AD compared to UUIDv7s measly 4,147AD death date.</em></p>
<p>[20221223] <a href="https://evoniuk.github.io/posts/pitfall.html">How Pitfall Builds Its World</a> &ndash; <em>Crane used a single byte to represent the layout of the current room.</em></p>
<p>[20221223] <a href="https://wasmlabs.dev/articles/docker-without-containers/">Docker Without Containers</a> &ndash; wasm managed with the same tools as Docker containers.</p>
<p>[20221221] <a href="https://www.simplethread.com/taming-names-in-software-development/">Taming Names in Software Development</a> &ndash; <em>balancing short v long, conventional v distinctive; make your own pattern for names (eg adjective_noun_unabbreviatedUnits giving minimum_messageLength_bytes).</em> A good read.</p>
<p>[20221221] <a href="https://driftingin.space/posts/you-might-not-need-a-crdt">You Might Not Need a CRDT</a> &ndash; <em>browsers are inherently not peer-to-peer. To run an application from the web, you connect to a server. Since the server is centralized anyway, we can have it enforce a global ordering over the events. That is, every replica receives events in the same orer. With this, we can sidestep the need to pay the CRDT complexity tax.</em></p>
<p>[20221221] <a href="https://specbranch.com/posts/expensive-abstraction/">Abstractions are Expensive</a> &ndash; <em>At companies with huge engineering forces, abstraction management is what a lot of them spend their time on. Often, these engineers are actually the most “productive” in terms of money saved - infrastructure projects tend to result in 8-9 figure savings or unique capabilities, and performance engineering (another form of abstraction alignment) frequently has 8 figure returns per engineer. Another large group of engineers is in charge of making sure that the old abstractions don’t break and crash the entire system.</em></p>
<p>[20221221] <a href="https://www.svix.com/blog/webhook-architecture-design/">Webhook Architecture Design</a> &ndash; awful verbatim transcription of someone with a lot of repetition and “mm hmm”, but the content is good.</p>
<p>[20221221] <a href="https://apisix.apache.org/blog/2022/11/07/webhook-api-gateway-event-driven-apis/">Event-Driven APIs with Webhook and API Gateway</a> &ndash; part II of <a href="https://dev.to/apisix/building-event-driven-api-services-using-cqrs-api-gateway-and-serverless-af4">Building event-driven API services using CQRS, API Gateway and Serverless</a>.</p>
<p>[20221211] <a href="https://www.gitpod.io/">GitPod</a> &ndash; <em>Spin up fresh, automated dev environments for each task, in the cloud, in seconds.</em></p>
<p>[20221210] <a href="https://madebyevan.com/algos/">Algorithms I Prototyped</a> – <em>CRDT Fractional Indexing; CRDT Tree-Based Indexing; CRDT: Mutable Tree Hierarchy: Sync a tree hierarchy between peers. Nodes in the tree retain their identity even if they are reparented somewhere else in the tree; Logarithmically-Spaced Snapshots: Keep periodic snapshots of something, but keep more snapshots of recent events and fewer snapshots of long-ago events.</em></p>
<p>[20221210] <a href="https://shopify.engineering/server-sent-events-data-streaming">Server Sent Events for Shopify Dashboard</a> – Spotify’s Black Friday dashboard built with <a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events">SSE</a>. </p>
<p>[20221126] <a href="https://betterprogramming.pub/why-domain-driven-design-203099adf32a">Domain Driven Design Intro</a> &ndash; very gentle high-level introduction that makes sense to me. Common vocab used in requirements, implementation, tests, bug reports, etc. And an explication of entities (which have a lifetime) vs values (which just exist as a number or string), and aggregate entities (e.g., an order + orderlines, where orderlines have no meaning outside an order). DDD appears to full of guidelines like: consistency rules apply inside an aggregate, an aggregate has a single external identifier, etc.</p>
<p>[20221126] <a href="https://github.com/StackStorm/st2">StackStorm</a> &ndash; <em>event-driven automation for auto-remediation, incident responses, troubleshooting, deployments, and more for DevOps and SREs. Includes rules engine, workflow, 160 integration packs with 6000+ actions and ChatOps.</em> If This Then That for Ops. (I’m interested in every workflow engine)</p>
<p>[20221121] <a href="https://uselessdevblog.wordpress.com/2022/11/10/stop-lying-to-yourself-you-will-never-fix-it-later/">You Will Never Fix It Later</a> – outlines the reasons why the probability a hacky solution will be fixed decreases with its age. For example: <em>The further removed you are from the point where the code was written, the less you understand it. You remember less about what it does, what it’s supposed to do, how it does it, where it’s used, etc. If you don’t understand all its intended use cases, then you’re not confident that you can test all of them. Which means you’re worried that any change you make might break some use case you were unaware of. (yes, good tests help, but how many of us trust their test suites even when we’re not very familiar with the code?)</em></p>
<p>[20221121] <a href="https://failingfast.io/opentelemetry-observability/">The Modern Observability Problem</a> – pithy summary. <em>To resolve problems in a large microservice system: We must be able to find out why they have occurred; For this, our system must be observable; To be observable, a system needs to be instrumented such that the code emits telemetry, which is typically logs, traces and metrics; This telemetry must be sent to a backend that supports joining up that telemetry data and answering questions about the system’s behaviour.</em></p>
<p>[20221119] <a href="https://simonwillison.net/2022/Oct/29/the-perfect-commit/">The Perfect Commit</a> &ndash; <em>a single commit that contains all of the following: The implementation: a single, focused change; Tests that demonstrate the implementation works; Updated documentation reflecting the change; A link to an issue thread providing further context.</em></p>
<p>[20221119] <a href="https://www.fearofoblivion.com/build-a-modular-monolith-first">Build a Modular Monolith First</a> &ndash; what it says on the box. <em>[I]t is all about breaking up the system into modules, and then combining those modules into a monolith for deployment.</em></p>
<p>[20221107] <a href="https://doordash.engineering/2022/11/01/how-to-boost-code-coverage-with-functional-testing/">Functional Testing</a> &ndash; exercise public endpoints without mocking.</p>
<p>[20221107] <a href="https://blog.frankel.ch/structured-errors-http-apis/">Structured Errors in HTTP APIs</a> &ndash; RFC-7807 provides a standardised error structure.</p>
<p>[20221107] <a href="https://eng.lyft.com/recovering-from-crashes-with-safe-mode-77ff572fdfda">Recovering From Crashes with Safe Mode</a> &ndash; when a feature flag causes your program to crash, add a safe-mode to detect the crashes and rollback to a safe feature-flag state.</p>
<p>[20221107] <a href="https://www.willett.io/posts/precepts/">Code Like an SRE</a> &ndash; it’s like getting an SRE drunk and saying “tell me all the stuff you learned the hard way”.</p>
<p>[20221107] <a href="https://getcode.substack.com/p/a-nibble-of-content-defined-chunking">Content-Defined Chunking</a> &ndash; very readable explanation of how to incrementally backup or synchronise files without transferring data you don’t have to.</p>
<p>[20221007] <a href="https://slack.engineering/mobile-developer-experience-at-slack">Mobile Developer Experience at Slack</a> &ndash; putting dollar values on lousy build experiences is clever.</p>
<p>[20221107] <a href="https://www.thoughtworks.com/insights/blog/architecture/demystify-software-architecture-patterns">Demystifying Software Architecture Patterns</a> &ndash; commonalities across Clean, Hexagonal, and Onion architectures: <em>centralized business rules; application specific rules (operation-specific orchestration and related logic); source code dependencies should only point inward; isolation of layers. Core business rules should be independent of how you persist it, how you expose it, and which framework you’re using.</em></p>
<p>[20221102] <a href="https://pmichaels.net/2021/03/02/git-bisect-with-automated-tests/">Git Bisect with Automated Tests</a> &ndash; use a new test to zero in on the commit that failed.</p>
<p>[20221029] <a href="https://www.inkandswitch.com/local-first/#towards-a-better-future">Local First</a> &ndash; developing with CRDTs and the expectation that the local machine is always true, and the truth will be reconciled with others when connected again.</p>
<p>[20221008] <a href="https://engineeringmedia.com/books">Fundamentals of Control Theory</a> – free ebook. See also <a href="https://www.youtube.com/controllectures">Brian Douglas&rsquo;s videos on YouTube</a>, <a href="https://engineeringmedia.com/videos">Brian Douglas&rsquo;s MatLab videos on Control Theory</a>, <a href="https://www.youtube.com/channel/UCm5mt-A4w61lknZ9lCsZtBw">Steve Brunton&rsquo;s videos</a>, and <a href="https://www.youtube.com/c/ChristopherLum">Christopher Lum&rsquo;s videos</a>, and <a href="https://www.youtube.com/c/katkimshow">Kat Kim&rsquo;s videos</a>.</p>
<p>[20221008] <a href="https://www.grucloud.com/">GruCloud</a> – Generate Javascript code from live infrastructures; Deploy, destroy and list resources on various clouds; Share and compose infrastructure; Automatic resource dependencies management.</p>
<p>[20221003] <a href="https://thenewstack.io/lessons-from-deploying-microservices-for-a-large-retailer/">Lessons from Deploying Microservices for a Large Retailer</a> – no containers, NoSQL, or even the cloud.</p>
<p>[20221003] <a href="https://engineering.grab.com/how-we-store-millions-orders">How we Store and Process Millions of Orders a Day</a> – Grab’s architecture.</p>
<p>[20220922] <a href="https://cs-syd.eu/posts/2022-08-22-how-to-deal-with-money-in-software">How to Deal with Money in Software</a> – overview of possible representations, better recommendations, and an addendum of tests.</p>
<p>[20220922] <a href="https://webhooks.fyi/">Webhooks.fyi</a> – a directory of webhook providers and a collection of best practices for providing and consuming webhooks.</p>
<p>[20220922] <a href="https://stenbrinke.nl/blog/reducing-duplicate-code-in-our-applications-using-hateoas/">Reducing Duplicate Code in our Applications Using HATEOAS</a> – includes a nice explanation of Hypertext As The Engine of Application State.</p>
<p>[20220805] <a href="https://semaphoreci.com/blog/bad-microservices">Bad Microservices</a> &ndash; modularise your monolith.</p>
<p>[20220804] <a href="https://www.svix.com/blog/guaranteeing-webhook-ordering/">Why You Can&rsquo;t Guarantee Webhook Ordering</a> &ndash; the <a href="https://news.ycombinator.com/item?id=32333661">discussion</a> was interesting too. Polling, queueing, events, and call-for-response all have their advocates.</p>
<p>[20220803] <a href="https://news.ycombinator.com/item?id=32319147">Use One Big Server</a> &ndash; frequent topic of discussion. One database server (or cluster that lets you separate reads from writes) can get you a long way, and the hardware cost of vertical scaling beats the complexity price of distributed data.</p>
<p>[20220803] <a href="https://semaphoreci.com/blog/deploy-microservices">The Five Ways to Deploy Microservices</a> &ndash; <em>the five ways of running microservices: (1) Single machine, multiple processes: buy or rent a server and run the microservices as processes. (2) Multiple machines, multiple processes: the obvious next step is adding more servers and distributing the load, offering more scalability and availability. (3) Containers: packaging the microservices inside a container makes it easier to deploy and run along with other services. It’s also the first step towards Kubernetes. (4) Orchestrator: orchestrators such as Kubernetes or Nomad are complete platforms designed to run thousands of containers simultaneously. (5) Serverless: serverless allows us to forget about processes, containers, and servers, and run code directly in the cloud.</em></p>
<p>[20220728] <a href="https://medium.com/@msaspence/you-dont-need-microservices-2ad8508b9e27">You Don&rsquo;t Need a Monolith</a> – lots of arguments against, mostly “you get all this power and complexity but you probably don’t need or want it.”</p>
<p>[20220719] <a href="https://www.techrepublic.com/article/improve-application-testing-system/">Improve Your Application Testing</a> – <em>Use template system allocation scripts; Automate resource allocation and deallocation; Perform regular refreshes of test data.</em></p>
<p>[20220718] <a href="https://www.redhat.com/architect/14-software-architecture-patterns">14 Software Architecture Patterns</a> – <em>circuit breaker, client-server, command query responsibility segregation, controller-responder, event sourcing, layered, microservices, model-view-controller, pub-sub, saga, sharding, static content hosting, strangler, throttling.</em></p>
<p>[20220718] <a href="https://semaphoreci.com/blog/monolith-microservices">12 Ways to Prepare Your Monolith for Microservices</a> – Ensure you know what you’re getting into; Make a plan;Put everything in a monorepo; Use a shared CI pipeline; Ensure you have enough testing; Install an API Gateway or HTTP Reverse Proxy; Consider the monolith-in-a-box pattern; Warm up to changes; Use feature flags; Modularize the monolith; Decouple the data; Add observability.</p>
<p>[20220624] <a href="https://www.jeremydaly.com/serverless-reference-architectures/">Serverless Reference Architectures</a> &ndash; for AWS but will work in general.</p>
<p>[20220624] <a href="https://www.jeremydaly.com/serverless-microservice-patterns-for-aws/">Serverless Microservices Patterns for AWS</a> &ndash; <em>The following 19 patterns represent several common microservice designs that are being used by developers on AWS.</em></p>
<p>[20220624] <a href="https://www.youtube.com/watch?v=nEO4eAr2AGE">7 Ways to Fail at Microservices</a> &ndash; distributed != decoupled. (A conference talk, on YouTube)</p>
<p>[20220624] <a href="https://infraeng.dev/efficiency/">Infrastructure Efficiency</a> &ndash; what to worry about at each stage of startup life.</p>
<p>[20220529] <a href="https://kenkantzer.com/learnings-from-5-years-of-tech-startup-code-audits/">Learnings from 5 Years of Tech Startup Code Audits</a> &ndash; <em>simple outlasted smart; never deserialise untrusted data; flaws in business logic are guaranteed to affect the business; Almost no one got JWT tokens and webhooks right on the first try; Our highest impact findings would always come within the first and last few hours of the audit.</em> (<a href="https://news.ycombinator.com/item?id=31506319">discussion</a>)</p>
<p>[20220527] <a href="https://medium.com/paypal-tech/refactoring-and-optimizing-a-high-traffic-api-at-paypal-eb11c373d795">Refactoring and Optimizing a High-Traffic API at PayPal</a> – identifying bottlenecks, segmenting, etc.</p>
<p>[20220526] <a href="https://web.archive.org/web/20220518225937/https://addyosmani.com/blog/software-eng-10-years/">Advice from 10 Years of Software Engineering</a> – good advice. I particularly liked: <em>Be a caretaker, rather than an owner; Write code specifically for the problem at hand, but try to spot places where you can afford to make it a little generic; Defining what is &ldquo;done&rdquo; is time-saving because it helps you estimate the effort required, plan for development, and avoid unnecessary revisions later; A single large release may be divided into a series of lower-risk well-understood rollouts; Coordinate reviews for the design doc and compare the design as it evolves with the original doc to verify that all the relevant constraints are being addressed.</em></p>
<p>[20220526] <a href="https://monzo.com/blog/2022/05/16/how-we-deploy-to-production-over-100-times-a-day">How We Deploy to Production Over 100 Times/Day</a> – <em>optimise the developer workflow for rapid delivery, and this leads to a reduction in risk too; Small revertable changes; change management process is surprisingly light on human touch points; invest heavily in out-of-the-box guardrails, monitoring, and auditing; We associate “tiers” with each service (how critical they are) and warn when PRs make changes to critical ones. This helps engineers get a sense of the relative risk of a change; We bias towards a simple and opinionated user experience, over configurability; The workflow is consistent and familiar; An unintended side effect of reducing friction from the deployment process is we see too many changes being deployed to staging for testing. This increases the number of manual steps engineers take in order to test out changes.</em></p>
<p>[20220524] <a href="https://codeopinion.com/real-world-event-driven-architecture-4-practical-examples/">Real World Event-Driven Architecture</a> – examples of solving problems with events.</p>
<p>[20220524] <a href="https://nolanlawson.com/2022/05/21/the-balance-has-shifted-away-from-spas/">The Balance has Shifted Away from SPAs</a> – for simple things. Some scenarios still need MPAs.</p>
<p>[20220524] <a href="https://jasonformat.com/application-holotypes/">Application Holotypes</a> – short on enterprise code, but still interesting.</p>
<p>[20220524] <a href="https://consulting.drmaciver.com/code-review-quick-fixes/">Quick Fixes to your Code Review Workflow</a> – <em>Simplify the decision of when to review; Distinguish comments from requests; Use pair reviews; Use more and more junior reviewers; Teach people how to do code review; Designated second reviewers; Decide what review is actually for; Adopt a collaborative attitude; Actually figure out what’s wrong with your code review.</em></p>
<p>[20220524] <a href="https://www.construct.net/en/blogs/ashleys-blog-2/simple-software-things-1587">Simple Software Things That Are Actually Very Complicated</a> – nothing is easy! <em>If the browser - or in other environments, the operating system - can do something for you, chances are you definitely want to let it handle that for you. Otherwise you&rsquo;ll learn the hard way just how much work goes in to it.</em></p>
<p>[20220524] <a href="https://chriskiehl.com/article/the-tyranny-of-what-if-it-changes">The Tyranny of &lsquo;What if it Changes?&rsquo;</a> – it’s speculation, divorced from reality, and used as a conversation ender.</p>
<p>[20220519] <a href="https://stackoverflow.blog/2022/03/03/stop-aggregating-away-the-signal-in-your-data/">Stop Aggregating Away the Signal in Your Data</a> – discusses three alternatives to aggregation: Rearranging the data to compare “like to like”; Augmenting the data with concepts that matter, like “summer” vs. “winter” or data-defined categories like “high” or “normal” energy usage; Using the data itself as context by splitting the data into “foreground” and “background,” so the full dataset provides the context necessary to make sense of the specific subset of the data we’re interested in.</p>
<p>[20220504] <a href="https://elvischidera.com/2022-04-29-philosphy-software-design">Philosophy of Software Design</a> – summary of Ousterhout’s book. VERY good.</p>
<p>[20220504] <a href="https://engineering.fb.com/2017/08/31/web/rapid-release-at-massive-scale/">Web Release at Massive Scale</a> – Facebook employees dogfood Facebook changes, which functions as QA.</p>
<p>[20220504] <a href="https://medium.com/geekculture/spotify-system-architecture-6bb418db6084">Spotify System Architecture</a> – once over lightly, but it’s got all the rectangles in the architecture diagram.</p>
<p>[20220504] <a href="https://stackoverflow.blog/2022/04/11/the-complete-guide-to-protecting-your-apis-with-oauth2">Guide to Protecting Your APIs with OAuth2</a> – that’s part 1, see also <a href="https://stackoverflow.blog/2022/04/14/the-authorization-code-grant-in-excruciating-detail/">Part 2</a> <em>The Authorization Code grant (in excruciating detail)</em>.</p>
<p>[20220504] <a href="https://josephmate.github.io/2022-04-14-max-connections/">Max Connections</a> – <em>For a server listening on a port, each incoming connection DOES NOT consume a port on the server. The server only consumes the one port that it is listening on.</em></p>
<p>[20220504] <a href="https://www.scaleyourapp.com/design-for-scale-and-high-availability">Design for Scale and High Availability</a> – a look at Google’s infrastructure, with insights into team composition and how they view incidents.</p>
<p>[20220502] <a href="https://xenitab.github.io/blog/2022/02/23/12factor/">12 Factor Apps in 2022</a> – <em>We end up with an &ldquo;app&rdquo; level and a &ldquo;service&rdquo; level and we have to be careful when considering the original text, since it talks only about the app level, but some of its concerns now reside at the service level.</em></p>
<p>[20220502] <a href="https://jolynch.github.io/posts/distsys_shibboleths/">Distributed Systems Shibboleths</a> – nice explanation of the building blocks of distributed systems, with a smidge more meat than most overviews.</p>
<p>[20220421] <a href="https://linkedrecords.com/the-big-tdd-misunderstanding-8e22c2f1fc21">The Big TDD Misunderstanding</a> – <em>Originally the unit in “unit test” did not refer to the system under test but the test itself. Meaning the test can be executed as one unit and does not depend on other tests to run upfront.</em> Huh.</p>
<p>[20220421] <a href="https://learncsdesign.medium.com/microservices-observability-design-patterns-bdfa5807f81e">Microservices Observability Design Patterns</a> – <em>Health check API; Log aggregation; Distributed tracing; Exception tracking; Application metrics; Audit logging.</em></p>
<p>[20220421] <a href="https://treblle.com/blog/the-10-rest-commandments">10 REST Commandments</a> – <em>(1) use JSON; (2) use the right HTTP methods; (3) use nouns instead of verbs, plural instead of singular; (4) use SSL, use authorisation, don’t send data you don’t need, use an API gateway to block DDoS etc; (5) version your API; (6) be consistent; (7) use HTTP status codes, and a universal error message structure; (8) handle complex processes inside the API, not requiring the cooperation of the client; (9) optimise database, cache, send only data that’s needed, enable compression; (10) document and otherwise help new users of the API.</em>  </p>
<p>[20220421] <a href="https://software.rajivprab.com/2019/12/19/when-feature-flags-do-and-dont-make-sense/">When Feature Flags Do and Do Not Make Sense</a> – <em>Feature flags are a poor man’s alternative to binary rollbacks, and they definitely aren’t a substitute for having a great automated test suite and a robust QA process. And each feature flag immediately doubles the universe of corner cases that your programmers have to understand, and your code is required to handle.</em></p>
<p>[20220421] <a href="https://www.oilshell.org/blog/2022/03/backlog-arch.html">Narrow Waists</a> – narrow waists are interop systems that let N systems talk to M systems with NxM translation systems being necessary. <em>In distributed systems, types are local illusions. Big systems can&rsquo;t be upgraded atomically. They&rsquo;re often running a mix of inconsistent schema versions. When models and reality collide, reality wins.</em></p>
<p>[20220421] <a href="https://danluu.com/simple-architectures/">Simple Architectures</a> – <em>The cost of our engineering team completely dominates the cost of the systems we operate. [&hellip;] By keeping our application architecture as simple as possible, we can spend our complexity (and headcount) budget in places where there’s complexity that it benefits our business to take on.</em></p>
<p>[20220406] <a href="https://thevaluable.dev/cohesion-coupling-guide-examples/">Cohesion and Coupling with Examples</a> – very good.</p>
<p>[20220404] <a href="https://www.alexanderlolis.com/authorization-in-a-microservices-world">Authorisation in a Microservices World</a> – <em>Fine-grained authorization in microservices is hard. Definitely not impossible, but hard. You would expect that a more standardized, all-around, full-proof solution is out there, but I am afraid there isn&rsquo;t. It&rsquo;s a complex matter and depending on what you are building, implementation varies.</em></p>
<p>[20220404] <a href="https://medium.com/bbc-design-engineering/bbc-online-a-year-with-serverless-ffc2ae474277">BBC&rsquo;s Year of Serverless</a> – no outages caused by the serverless platform. They did notice noisy neighbours (other customers on the VM) reducing BBC’s performance on hour and quarter hour.</p>
<p>[20220404] <a href="https://slack.engineering/building-the-next-evolution-of-cloud-networks-at-slack-a-retrospective/">Networking at Slack Retrospective</a> – again I say: networking is HARD. <em>To make matters worse, applications interpret these variables differently too. For example, Ruby and Golang support CIDR blocks in the `no_proxy` variable while Python does not.</em></p>
<p>[20220404] <a href="https://kislayverma.com/software-architecture/on-scalable-software/">On Scalable Software</a> – a mini-bootcamp on scaling with distributed systems. Also: <em>If we know that the workload is going to increase, we should go for a scalable design up-front. But if we are not sure of what the future looks like, a performant but non-scalable solution is a good enough starting point.</em></p>
<p>[20220404] <a href="https://blog.sentry.io/2022/03/31/sentry-points-of-presence-how-we-built-a-distributed-ingestion">Distributed Ingestion at Sentry</a> – they build a CDN but to accept uploads, not cache downloads. This caught my eye: Have you ever seen unexpected 50X responses from your reverse proxy servers with no obvious explanation? You might be a victim of inconsistent idle timeouts between your upstream and downstream applications.</p>
<p>[20220330] <a href="https://blog.postman.com/platform-api-governance/">Enterprise Platform API Governance</a> – common sense behind the big words:</p>
<ul>
<li>Info: Ensure that there are title, description, and other essential information properties.</li>
<li>Versioning: Require a standard semantic or date-based versioning applied to each API.</li>
<li>Operations: Make sure each individual operation has a summary, description, and id.</li>
<li>Parameters: Standardize the format of parameter names, and all have descriptions.</li>
<li>Responses: Push for a common set of status codes, media types, and schema responses.</li>
<li>Schema: Standardize all request and response schema using JSON Schema components.</li>
</ul>
<p>[20220330] <a href="https://auth0.com/blog/using-https-in-your-development-environment/">Using HTTPS in your Development Environment</a> – what it says on the box. More nodey than applies to us.</p>
<p>[20220329] <a href="https://danielcompton.net/2022/03/21/penny-wise-cloud-foolish">Penny Wise and Cloud Foolish</a> &ndash; deep dive into Google Cloud pricing.</p>
<p>[20220324] <a href="https://devblogs.microsoft.com/microsoft365dev/learn-how-to-create-secure-identity-solutions-using-the-microsoft-identity-platform/">How To for the Microsoft Authentication Platform</a> – including delegated and app permissions.</p>
<p>[20220323] <a href="https://techcommunity.microsoft.com/t5/azure-architecture-blog/guidance-for-architecting-mission-critical-apps-on-azure/ba-p/3201745?">Guidance for Architecting Mission Critical Apps on Azure</a> – on the one hand this is good architecture, on the other hand it’s All The Expensive Toys.</p>
<p>[20220323] <a href="http://mywiki.wooledge.org/BashGuide/Practices">Bash Best Practices</a> – quoting, readability, tests, don’t do this, how to debug.</p>
<p>[20220323] <a href="http://mywiki.wooledge.org/BashPitfalls">Bash Pitfalls</a> – common mistakes from the real world.</p>
<p>[20220323] <a href="https://www.jason.af/defaults-matter/">Defaults Matter</a> – “Even the most well-intentioned people have a finite amount of energy to fight against a system that pushes toward bad outcomes.”</p>
<p>[20220322] <a href="https://stackoverflow.blog/2022/02/24/sustainable-architectures-in-a-world-of-agile-devops-and-cloud/">Continuous Architecture</a> – (1) Architect products; evolve from projects to products; (2) Focus on quality attributes, not on functional requirements; (3) Delay design decisions until they are absolutely necessary; (4) Architect for change—leverage the “power of small.” Big, monolithic, tightly coupled components are hard to change; (5) Architect for build, test, deploy, and operate; (6) Model the organization of your teams after the design of the system you are working on.</p>
<p>[20220321] <a href="https://engineering.fb.com/2022/03/17/production-engineering/silent-errors/">Detecting Silent Errors</a> – a mix of opportunistic and ripple testing. Opportunistic = take a long time while the server is out of operation for other reasons. Ripple = inject smaller known workload with known outputs regularly, rotating around the fleet.</p>
<p>[20220315] <a href="https://stackoverflow.blog/2022/02/28/debugging-best-practices-for-rest-api-consumers/">API Debugging Tips</a> – isolate the API issue, examine the HTTP response code, then dig into the data causing it.</p>
<p>[20220311] <a href="https://cloud.google.com/apis/design">Google&rsquo;s API Design Guide</a> &ndash; a general design guide for networked APIs. It has been used inside Google since 2014 and is the guide that Google follows when designing Cloud APIs and other Google APIs. This design guide is shared here to inform outside developers and to make it easier for us all to work together.</p>
<p>[20220311] <a href="https://google.aip.dev/">API Improvement Proposals</a> &ndash; Focused design documents for flexible API development.</p>
<p>[20220310] <a href="https://codeopinion.com/eventual-consistency-is-a-ux-nightmare/">Eventual Consistency</a> – how it happens with clusters, event sourcing, and async processing. And how to handle it: server wait, client polling, push to client, read from primary after you write.</p>
<p>[20220309] <a href="https://fossa.com/blog/three-pillars-reproducible-builds/">Reproducible Builds</a> – Repeatable Builds + Immutable Environments + Source Availability</p>
<p>[20220309] <a href="https://earthly.dev/blog/see-state/">One Way Smart Developers Make Bad Strategic Decisions</a> – </p>
<p>[20220308] <a href="https://blog.frankel.ch/evolve-apis/">Evolve APIs</a> &ndash; use versioned endpoints, and something like APISIX as a router to make old endpoints work.</p>
<p>[20220308] <a href="https://treblle.com/blog/the-10-rest-commandments">The 10 REST Commandments</a> &ndash; some good advice.</p>
<p>[20220308] <a href="https://medium.com/airbnb-engineering/rebuilding-payment-orchestration-at-airbnb-341d194a781b">Payment Orchestration at AirBnB</a> &ndash; how they rearchitected payments as microservices. Every major workflow is divided into a directed acyclic graph (DAG) of retryable idempotent steps, each with well-defined behavior. This allows the payment orchestration layer to maintain eventual consistency with other key services (such as the payment gateway layer and product fulfillment services). This approach has led to five 9s (99.999%) of consistency for payments.</p>
<p>[20220308] <a href="https://tuple.app/pair-programming-guide/antipatterns">Pair Programming Antipatterns</a> – not “you understand this, right?” but “which part of this is hardest to follow?”.</p>
<p>[20220306] <a href="https://martin.kleppmann.com/papers/bft-crdt-papoc22.pdf">Making CRDTs Byzantine Fault Tolerant</a> &ndash; CRDTs let many nodes get the same data  in distributed systems. But what if a number of adversarial nodes join the network and flood it with bad data? This paper offers a solution, making them Byzantine-fault-tolerant.</p>
<p>[20220306] <a href="https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.188.54&amp;rep=rep1&amp;type=pdf">Resumption Strategies After Interrupted Programming Tasks</a> &ndash; return to the last method edited; navigate to remember; task tracking; review source code history. Some facts about interruptions: 57% of tasks are interrupted, 40% of interrupted tasks are not resumed; developers typically require about 15m to recover from an interruption.</p>
<p>[20220303] <a href="https://www.infoq.com/presentations/wasi-system-interface/">WASI</a> – WASM at the edges (of the middle), from Fastly. </p>
<p>[20220224] <a href="https://www.mnot.net/blog/2022/02/20/websockets">Server Sent Events, WebSockets, and HTTP</a> – a look at all three ways of doing pub/sub over the web.</p>
<p>[20220220] <a href="https://twitter.com/mipsytipsy/status/1494856337632608261">Open Telemetry</a> &ndash; use it, it’s an upfront cost in complexity that pays off by giving you lots of tools to choose from.</p>
<p>[20220219] <a href="https://www.cyclic.sh/posts/aws-s3-why-sometimes-you-should-press-the-100k-dollar-button">Pushing the 100k Button</a> – AWS S3 storage balloons, and using policy to expire content isn’t easy. HN comments were interesting: GDPR gives a hammer against PMs who want to indefinitely retain data.</p>
<p>[20220219] <a href="https://www.atlassian.com/git/tutorials/comparing-workflows">Comparing Git Workflows</a> – centralized workflow, feature branch, gitflow, forking.</p>
<p>[20220219] <a href="https://www.openpolicyagent.org/">Open Policy Agent</a> – OPA is an open-source project that implements a single policy language and policy engine that can be applied to solve policy and authorization problems at every layer of the cloud-native stack. It uses a purpose-built declarative language, Rego, to express sophisticated logic over complex hierarchical data structures.</p>
<p>[20220219] <a href="https://longwelwind.net/blog/networking-turn-based-game/">Deterministic Lockstep and Secret State</a> – game networking might have something to teach us about our distributed app state problem.</p>
<p>[20220218] <a href="https://petewarden.com/2022/02/15/my-favorite-debugging-hack/">My Favourite Debugging Hack</a> – printing a variable with line number and filename.</p>
<p>[20220217] <a href="https://future.a16z.com/software-development-building-for-99-developers/">Building for 99% Developers</a> &ndash; accept slow migrations; accept legacy subsystems. Most companies don’t have a FAANG’s technical needs nor number of developers. And most places that talk up their shiny new shit have big mounds of rusty old shit too.</p>
<p>[20220216] <a href="https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/">The Absolute Minimum That Every Developer Should Know About Unicode and Character Sets</a> – what it says on the tin.</p>
<p>[20220216] <a href="https://reflect.run/articles/hidden-dependencies-in-regression-tests/">Test Data Management</a> – interesting description of the problem of managing data in end-to-end tests, and the open source system they built to manage it.</p>
<p>[20220213] <a href="https://germano.dev/sse-websockets/">Server-Sent Events instead of Websockets</a> &ndash; and from a discussion: it&rsquo;s a beautifully simple &amp; elegant lightweight push events option that works over standard HTTP, the main gotcha for maintaining long-lived connections is that server/clients should implement their own heartbeat to be able to detect &amp; auto reconnect failed connections which was the only reliable way we&rsquo;ve found to detect &amp; resolve broken connections.</p>
<p>[20220213] <a href="https://zachholman.com/posts/kobayashi-maru-of-comparing-dates-with-times">The Kobiyashi Maru of Comparing Dates with Times</a> &ndash; if you’re ever saying “is 2022-02-12 &lt; 2022-02-12 03:00” then you are doing it wrong. But you will probably have to at some point. And there’s no right answer.</p>
<p>[20220213]  <a href="https://danluu.com/cache-incidents/">A Decade of Major Cache Incidents at Twitter</a> &ndash; amazingly transparent incident information. Painful how many of the problems happen below the application level.</p>
<p>[20220209] <a href="https://deploywithflags.com/simplifying-your-codebase-using-feature-flags">Simplifying Your Codebase When Using Feature Flags</a> &ndash; Remove old feature flags as soon as possible; Your flag&rsquo;s &ldquo;off&rdquo; position should be stable; Feature flags that aren&rsquo;t temporary aren&rsquo;t feature flags; Test one thing at a time; Create duplicates of components for easier removal.</p>
<p>[20220209] <a href="https://www.mountaingoatsoftware.com/blog/my-favorite-hard-questions-to-ask-when-making-a-decision">Tough Questions to Ask When Making Decisions</a> &ndash; is it reversible, does it paint us into a corner?</p>
<p>[20220206] <a href="https://engineering.salesforce.com/5-design-patterns-for-building-observable-services-d56e7a330419">Five Design Patterns for Building Observable Services</a> &ndash; Outside-In Health Check, Inside-Out Health Check, Real time Alerting, Troubleshooting.</p>
<p>[20220205] <a href="https://twitter.com/mipsytipsy/status/1490229218755579904">Don&rsquo;t replace X with Y unless you expect 10x improvement</a> &ndash; “so cvs to git, but not MySQL to PostgreSQL” (Charity Majors rule)</p>
<p>[20220205] <a href="https://chathura-ekanayake.medium.com/applying-event-driven-architecture-in-digital-transformation-projects-acbcb27440af">Applying Event-Driven Architecture in Digital Transformation Projects</a> – more detail than is usually shown.</p>
<p>[20220203] <a href="https://asatarin.github.io/testing-distributed-systems/">Testing Distributed Systems</a> – papers, books, apps, resources. (tl;dr – is hard)</p>
<p>[20220203] <a href="https://jeremydmiller.com/2022/01/27/creating-the-conditions-for-developer-happiness/">Creating the Conditions for Developer Happiness</a> – avoid handoffs of work between teams, minimise “time to login screen” ie startup time for new developer. Most development tasks are small enough that developers can quickly and continuously flow from small unit tests to completed code and on to the next task. Feedback cycles on the code are quick. Unit tests can cover small areas of the code while still providing value such that it’s rare that a developer needs to use a debugger to understand and solve problems.</p>
<p>[20220203] <a href="https://codeopinion.com/event-sourcing-vs-event-driven-architecture/">Event Sourcing, and Event Driven Architecture</a> – two different things. Event Sourcing = saving your data as events not current state; Event Driven Architecture = building system around messages.</p>
<p>[20220203] <a href="https://thenewstack.io/modern-identity-onboarding-essentials/">Modern Identity Onboarding Essentials</a> – tradeoffs of where personal info is kept, account linking, etc.</p>
<p>[20220203] <a href="https://jimmybogard.com/domain-driven-refactoring-intro/">Domain Driven Refactoring</a> – walks us through writing simple procedural code and then pulling out services, collections, etc.</p>
<p>[20220202] <a href="https://height.app/blog/guide-to-build-context-menus">Guide to Building Context Menus</a> – interesting look at UI design.</p>
<p>[20220201] <a href="https://blog.begin.com/posts/2022-01-27-the-boring-technology-checklist">Boring Technology Checklist</a> – has more detailed checkboxes under familiarity, stability, reliability, well-understood limits &amp; trade-offs.</p>
<p>[20220201] <a href="https://leadership.garden/tips-on-prioritizing-tech-debt/">Tips on Prioritising Technical Debt</a> – “boy scout rule” = leave codebases and systems in better shape than you found them, so refactor when you touch a part of the codebase.</p>
<p>[20220131] <a href="https://jeremymikkola.com/posts/2022_01_29_tech_debt_gets_worse_before_it_gets_beffer.html">Technical Debt Gets Worse Before It Gets Better</a> &ndash; The siren song of the ground-up rewrite calls to us, trying to make us forget the fact that it’s much harder to replace an existing system than it is to create one from scratch. You have to keep supporting old APIs until every client has moved to the new APIs. Existing data has to be migrated to new models. You have to research (and often replicate) the quirks and undocumented features of the existing system. </p>
<p>[20220131] <a href="https://www.morling.dev/blog/whats-in-a-good-error-message/">What&rsquo;s in a Good Error Message?</a> &ndash; context, the error itself, and mitigation.</p>
<p>[20220131] <a href="https://semaphoreci.com/blog/feature-flags">Feature Flags</a> &ndash; develop in main, deployment and release are different.</p>
<p>[20220131] <a href="https://martinfowler.com/articles/patterns-legacy-displacement/legacy-mimic.html">The Legacy Mimic pattern</a> &ndash; assumes you know what your interface IS, of course …</p>
<p>[20220128] <a href="https://engineering.linecorp.com/en/blog/the-baseline-for-web-development-in-2022/">The baseline for web development in 2022</a> – low-spec Android devices in terms of performance, Safari from two years before in terms of Web Standards, and 4G in terms of networks. The web in general is not answering those needs properly, especially in terms of performance where factors such as an over-dependence on JavaScript are hindering our sites’ performance.</p>
<p>[20220128] <a href="https://github.com/automerge/automerge">Automerge</a> – conflict-free replicated data types in Javascript for building distributed apps, which lets you have local-first software. Not suitable for banks.</p>
<p>[20220128] <a href="http://infolab.stanford.edu/~ullman/focs.html">Foundations of Computer Science</a> – book has been taken out of print. Nothing much has changed since it was published in 1992.</p>
<p>[20220128] <a href="https://medium.com/@solidi/my-goal-is-to-ship-c772f63c278d">My Goal is to Ship</a> - 25 years of software engineering. “Even with years of newfound tact, what frustrates me profoundly are projects that sit on shelves. I’ve learned to push them to a conclusion, negotiating their way out the door. If I sensed a project was permanently stuck, I’d leave it behind, despite others who chip away at it.”</p>
<p>[20220128] <a href="https://www.cs.utexas.edu/~zjia/boki-sosp21.pdf">Boki</a> - new serverless runtime that exports a shared log API to serverless functions. “The key enabler is the <em>metalog</em>, a novel mechanism that allows Boki to address ordering, consistency, and fault-tolerance independently.”</p>
<p>[20220201] <a href="https://medium.com/flo-health/how-to-deal-with-tech-debt-at-the-scale-of-super-app-90da136d576d">Tech debt at the scale of a super app</a></p>
<p>[20220201] <a href="https://next-auth.js.org/">Next-auth.js</a> – built in support for google, etc., BYO backend, built-in email/magic link etc, works with cookies</p>
<p>[20220201] <a href="https://aaronstannard.com/extend-only-design/">Extend-Only Design</a></p>
<ul>
<li>breaking changes have one thing in common: something that existed in the past was irrecoverably altered in a future release, and thus broke the downstream applications and libraries that depended upon that prior functionality.</li>
<li>The pillars of extend-only design apply to any and all software systems, and they are thus:
<ul>
<li>Previous functionality, schema, or behavior is immutable and not open for modification. Anything you made available as a public release lives on with its current behavior, API, and definitions and isn’t able to be changed.</li>
<li>New functionality, schema, or behavior can be introduced through new constructs only and ideally those should be opt-in.</li>
<li>Old functionality can only be removed after a long period of time and that’s measured in years.</li>
</ul>
</li>
<li>Extend-only design requires some more planning and perhaps some more flexibility on the application-programming side of things</li>
</ul>
<p>[20220201] <a href="https://steven-lemon182.medium.com/why-our-team-cancelled-our-move-to-microservices-8fd87898d952">Why our team cancelled our move to microservices</a></p>
<ul>
<li>Were heavily reliant on a third party, which limited their ability to divide into microservices.</li>
<li>Couldn’t sufficiently isolate the microservices. “We couldn’t identify any obvious candidates in our monolith to be broken out into a microservice. So instead, we started drawing arbitrary lines between our domain models, and from this, we had the list of microservices we were to create. However, once we started investigating, we found a lot of shared business logic and implicit coupling between the soon to be separate microservice domains. Some further attempts were made to subdivide these microservices into smaller and smaller pieces, but that left us with even more coupling, messages buses everywhere, and a potential big bang of immediately going from one service to ten or more microservices.”</li>
<li>Couldn’t assign ownership of any potential microservice to any team, because all teams touched all microservices for their features.</li>
<li>Platform wasn’t ready.</li>
<li>It wasn’t uncommon for requirements to change mid feature. This uncertainty made creating microservices more fraught, as we couldn’t predict what new links would pop up, even in the short term.</li>
<li>We had a tiny window, just large enough split our monolith into the list of microservices we had been given. What we didn’t have was any extra time to allow us to reflect on what we had created or alter course if required.</li>
<li>None of the people responsible for architecting or implementing the microservices architecture had any specific prior experience</li>
<li>We didn’t have a list of our pain points, and we had no clear understanding of how this would help solve any pain points we do have.</li>
<li>Adopting microservices isn’t free. There is a vast list of additional concerns that you need to address. We would need to revisit many concerns that we had previously addressed in our monolith. For example, we would need to address or revisit: logging, monitoring, exception handling, fault tolerance, fallbacks, microservice to microservice communication, message formats, containerization, service discovery, backups, telemetry, alerts, tracing, build pipelines, release pipelines, tooling, sharing infrastructure code, documentation, scaling, timezone support, staged rollouts, API versioning, network latency, health checks, load balancing, CDC testing, fault tolerance, debugging and developing multiple microservices in our local development environment.</li>
<li>We were using monolith like a loaded term. As if saying “monolith” implies something terrible, and “microservices” implies something good. Once we looked past the stereotypes and branding, the development team had very few issues with our “monolith.”</li>
<li>The more we looked into microservices, the more it seemed that it was less about technology and more about structuring teams and the work that came into them. Had we made a mistake approaching microservices as purely a technology problem?</li>
</ul>
<p>[20220201] <a href="https://www.amazon.com/dp/1484259548/?tag=amavin-20">The Art of Immutable Architecture: Theory and Practice of Data Management in Distributed Systems</a> – “Most software components focus on the state of objects. They store the current state of a row in a relational database. They track changes to state over time, making several basic assumptions: there is a single latest version of each object, the state of an object changes sequentially, and a system of record exists. This is a challenge when it comes to building distributed systems. Whether dealing with autonomous microservices or disconnected mobile apps, many of the problems we try to solve come down to synchronizing an ever-changing state between isolated components. Distributed systems would be a lot easier to build if objects could not change.” … $108 to buy!!!</p>
<p>[20220201] <a href="https://ma.rkusa.st/store-sqlite-in-cloudflare-durable-objects">Store SQLite in Cloudflare Durable Objects</a> – and <a href="https://news.ycombinator.com/item?id=30072997">HN discussion</a></p>
<p>[20220201] <a href="https://docs.google.com/document/d/1pOarvQbjzLd9tz5ZuxktyrYsZ41mbWba5_LUeFj65lI/edit#heading=h.l9tgfkoiwygn">Textbook for system design (WIP)</a></p>
<p>[20220201] <a href="https://github.com/donnemartin/system-design-primer">System Design Primer</a> (for web-scale systems)</p>
<p>[20220201] <a href="https://cprimozic.net/blog/my-selfhosted-websites-architecture/">Self-hosted architecture</a></p>
<p>[20220201] <a href="https://blog.sequin.io/events-not-webhooks">Give me events not webhooks</a></p>
<ul>
<li><a href="https://news.ycombinator.com/item?id=29850570">summary of JMAP&rsquo;s model</a></li>
<li><a href="https://news.ycombinator.com/item?id=27824944">Stripe&rsquo;s webhooks problems</a></li>
</ul>
<p>[20220201] <a href="https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#sending_events_from_the_server">Server Sent Events</a></p>
<p>[20220201] <a href="https://idratherbewriting.com/learnapidoc/#course-slides">Learn how to document APIs</a></p>
<p>[20220201] <a href="https://www.percona.com/blog/2019/11/22/uuids-are-popular-but-bad-for-performance-lets-discuss/">UUIDs bad for MySQL performance</a></p>
<p>[20220201] <a href="https://livebook.manning.com/book/api-design-patterns/chapte">API Design Patterns book</a></p>
<p>[20220201] <a href="https://hoppscotch.io/">Hoppscotch API development</a></p>
<p>[20220201] <a href="https://twirl.github.io/The-API-Book/docs/API.en.html">The API Book (github)</a></p>
<p>[20220201] <a href="https://betterprogramming.pub/flutter-failed-to-solve-the-biggest-challenge-for-our-cross-platform-app-c551afa0ef18">Flutter&rsquo;s short-coming as xplatform</a></p>
<p>[20220201] <a href="https://matduggan.com/mistakes/">Common Infrastructure Errors</a></p>
<p>[20220201] <a href="https://stackoverflow.blog/2021/12/22/best-practices-can-slow-your-application-down/">Best Practices can slow your application down</a></p>
<p>[20220201] <a href="https://twitter.com/norootcause/status/1475518692041510915">Things your CS degree didn&rsquo;t prepare you for but which you must do as a developer</a> (Twitter)</p>
<p>[20220201] <a href="https://www.grapecity.com/blogs/wpf-datagrid-performance-comparison-2022">Data Grid Performance Comparison</a></p>
<p>[20220201] <a href="https://thomasbandt.com/model-view-update">Model View Update</a></p>
<p>[20220201] <a href="https://news.ycombinator.com/item?id=29315414">single-tenancy vs multi-tenancy discussion on HN</a></p>
<p>[20220201] <a href="https://infrastructure-as-code.com/book/2021/11/19/snowflakes-as-code.html">Snowflakes Servers and Snowflakes as Code</a></p>
<p>[20220201] <a href="https://www.linkedin.com/pulse/cloud-architecture-next-10-years-ala-shiban/">Microservices lessons</a></p>
<p>[20220201] <a href="https://shopify.engineering/shopify-monolith">Shopify&rsquo;s Monolith</a></p>
<p>[20220201] <a href="https://stackify.com/interface-segregation-principle">Interface Segregation Principle</a></p>
<p>[20220201] <a href="https://blog.postman.com/5-tips-for-game-changing-api-design-review/">5 Tips for API Design Reviews</a></p>
<p>[20220201] <a href="https://blog.postman.com/api-lifecycle-blueprint/">API Lifecycle Blueprint</a></p>
<p>[20220201] <a href="https://jimmybogard.com/service-locator-is-not-an-anti-pattern/">Service Locator is not an Antipattern</a></p>
<p>[20220201] <a href="https://dev.to/blindkai/rest-api-design-27j9">REST API Design</a></p>
<p>[20220201] <a href="https://www.syncfusion.com/blogs/post/8-simple-tips-for-using-an-api-in-a-mobile-app.aspx">8 Simple Tips for using an API in a mobile application</a> – from SyncFusion</p>
<ol>
<li>Check internet connectivity before an API call</li>
<li>API versioning</li>
<li>Show loading/progress until API responds</li>
<li>Use the status code to display a meaningful error message on failures.</li>
<li>Paginate and lazy load</li>
<li>Code for case where a logged-in user expires.</li>
<li>Plan for forced updates.</li>
<li>Send network type in API request.</li>
</ol>
<p>[20220201] <a href="https://blog.wesleyac.com/posts/consider-sqlite">Consider SQLite</a> - why and how to use SQLite in real situations.</p>
<ul>
<li>It&rsquo;s only when you start needing significantly more than 99.999% uptime that you start to need truly distributed systems</li>
<li><a href="https://litestream.io/">Litestream</a> and <a href="https://github.com/backtrace-labs/verneuil">Verneuil</a> replicate your SQLite database to other machines.</li>
<li>there&rsquo;s no per-request client/server roundtrip latency</li>
<li>But …
<ul>
<li>the type system is bad</li>
<li>Support for migrations is worse</li>
<li>Significantly harder to geoshard your app</li>
<li>Not well supported by some web frameworks</li>
<li>Heavy computations or slow language might make a single server hard</li>
<li>Failure modes of a single thread are different than connection pools, so architect for it.</li>
</ul>
</li>
</ul>
<p>[20220201] <a href="https://ardalis.com/what-are-abstractions-in-software-development/">Abstractions in Software Development</a></p>
<ul>
<li>Good explanation of the SOLID principles</li>
<li>Stable Dependencies Principle = a package should only depend on packages that are more stable than it is.</li>
</ul>
<p>[20220201] <a href="https://deviq.com/principles/liskov-substitution-principle">Liskov Substitution Principle</a> - subtypes must be substitutable for their base types.</p>
<p>[20220201] <a href="https://www.mattblodgett.com/2021/12/challenging-pull-request-orthodoxy.html">Challenging the Pull Request orthodoxy</a> – Ship vs Show vs Ask</p>
<p>[20220201] <a href="https://www.c-sharpcorner.com/article/microservice-strangler-pattern/">Microservice Strangler Pattern</a></p>
<p>[20220201] <a href="https://www.telerik.com/blogs/batching-caching-dataloader">Batching and Caching with Dataloader</a> - GraphQL way to avoid the N+1 problem (you make one query to determine which things to show and then, for each result in that query, make another query to fetch the information about that thing)</p>
<p>[20220201] <a href="https://dzone.com/articles/why-do-you-need-to-move-from-crud-to-event-sourcin">Why do you need to move from CRUD to Event Sourcing?</a> – ES seems optimised for “write a lot, read rarely” because you need to replay events to get to current state. Is there a hybrid? Ah yes, there is. It’s <a href="https://martinfowler.com/bliki/CQRS.html">CQRS</a> pattern – maintain current state in a reporting database and preserve events in the writing database. I wonder how multistep transactions work – are they events handled atomically by the processing code?</p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Front End/Flutter/Dart/UI</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-front-end-flutter-dart-ui/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-front-end-flutter-dart-ui/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://marmelab.com/react-admin/">React Admin</a> &ndash; claims of a full-featured data grid, which is 50-80% of many of our apps. (As well as roles &amp; permissions and validations)</p>
<p>[20221224] <a href="https://emilymstark.com/2022/12/18/death-to-the-line-of-death.html">Death to the Line of Death</a> &ndash; <em>the idea that an application should separate trustworthy UI from untrusted content. The typical example is in a web browser, where untrustworthy web content appears below the browser toolbar UI. Trustworthy content provided by the web browser must appear either in the browser toolbar, or anchored to it or overlapping it. If this separation is maintained, then untrusted content can’t spoof the trustworthy browser UI to trick or attack the user.</em></p>
<p>[20221224] <a href="https://www.grapecity.com/blogs/first-look-at-flexgrid-for-maui-a-cross-platform-datagrid-control">FlexGrid</a> – cross-platform grid for MAUI apps.</p>
<p>[20221210] <a href="https://www.inkandswitch.com/peritext/">PeriText</a> – a CRDT implementation that supports primarily offline use – <em>ometimes people prefer a more asynchronous collaboration style, where they can work on a private copy of a document for a while and share their updates later. The algorithms underpinning services like Google Docs are not designed to support this use case.</em></p>
<p>[20221126] <a href="https://jzhao.xyz/posts/bft-json-crdt/">Building a BZT JSON CRDT</a> &ndash; fault-tolerant conflict-free replicated data types. The <a href="https://news.ycombinator.com/item?id=33694568">HN discussion</a> has interesting notes about the shortcomings of CRDTs (eg, merging two changes might violate the document schema).</p>
<p>[20221126] <a href="https://alistapart.com/article/neveruseawarning/">Never Use a Warning When You Mean Undo</a> &ndash; “do you really want to delete this?” is much worse than just having an Undo button to let you recover if you say “Yes” and then regret it. From <a href="https://news.ycombinator.com/item?id=33721930">HN discussion</a>, “hold to activate” is a useful way to force consideration of truly destructive actions; “never disable a menu item or widget without providing feedback (like a tooltip) about why it’s disabled and what to do to enable it”; GNOME Human Interface Guidelines discourage Yes/No and OK/Cancel in favour of meaningful button names.</p>
<p>[20221119] <a href="https://designsystem.digital.gov/">USWDS</a> &ndash; the US Government’s Web Design Standards. Lots of good info and recommendations here.</p>
<p>[20221008] <a href="https://vanschneider.com/blog/young-designers/junior-designers-vs-senior-designers/">Junior Designers vs Senior Designers</a> – good list of the different behaviours between juniors and seniors. Much of it is owning success and having initiative, vs being told what to do.</p>
<p>[20220922] <a href="https://druids.datadoghq.com/">DataDog&rsquo;s UI Library</a> – code is internal use only but the documentation is public so you get to see their design vocabulary and opinions.</p>
<p>[20220213] <a href="https://zerodha.tech/blog/from-native-to-react-native-to-flutter/">Native to React Native to Flutter</a> &ndash; one project’s experiences. They like Flutter.</p>
<p>[20220213] <a href="https://github.com/nepaul/awesome-flutter">Awesome Flutter</a> &ndash; collection of Flutter resources. Beware, these are usually up to date when the compiler got enthusiastic and compiled them, but most aren&rsquo;t maintained.</p>
<p>[20220201] <a href="https://medium.com/flutter-community/how-to-make-your-flutter-app-offline-first-with-couchbase-lite-86bb23780f74">How to make your Flutter app offline-first with CouchBase Lite</a></p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: GPT-3</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-gpt-3/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-gpt-3/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context. (Also, this was a late addition and I&rsquo;m focused in my interest, so this is thin)</p>
<p>[20221231] <a href="https://lspace.swyx.io/p/reverse-prompt-eng">Reverse Engineering Notion&rsquo;s Prompts</a> &ndash; in <a href="https://news.ycombinator.com/item?id=34165522">Hacker News discussion</a> there’s skepticism you’re getting the actual prompts, vs GPT-3 being its usual stylistically faithful yet factually inaccurate creative self. Someone from Notion confirmed this.</p>
<p>[20221231] <a href="https://scottbelsky.substack.com/p/edition1">Some Short-term Predictions</a> &ndash; <em>the age of AI, if you don’t own the query interface, you’re just assembling training data for those who do</em>. (The behaviour of the social media tech powers mean I do not trust successful AI companies to use their powers wisely)</p>
<p>[20221221] <a href="https://aclanthology.org/2020.acl-main.463.pdf">On Meaning, Form, and Understanding in the Age of Data</a> &ndash; <em>In this position paper, we argue that a system trained only on form has a priori no way to learn meaning.</em></p>
<p>[20221221] <a href="https://dl.acm.org/doi/10.1145/3442188.3445922">On the Dangers of Stochastic Parrots: Can Language Models Be Too Big?</a> &ndash; <em>In this paper, we take a step back and ask: How big is too big? What are the possible risks associated with this technology and what paths are available for mitigating those risks? We provide recommendations including weighing the environmental and financial costs first, investing resources into curating and carefully documenting datasets rather than ingesting everything on the web, carrying out pre-development exercises evaluating how the planned approach fits into research and development goals and supports stakeholder values, and encouraging research directions beyond ever larger language models.</em></p>
<p>[20221221] <a href="https://showgpt.co/s/j40Y1k9R">ChatGPT Playing a Complex Game</a> &ndash; basically a German board game with different resources and rates of conversion.</p>
<p>[20221221] <a href="https://github.com/dair-ai/Prompt-Engineering-Guide">Prompt Engineering Guide</a> &ndash; pointers to papers and tutorials on prompt engineering.</p>
<p>[20221221] <a href="https://microsoft.github.io/prompt-engineering/">Prompt Engineering Guide from Microsoft</a> &ndash; <em>give it a high-level task description, guide it with examples, guide it with high-level contextual information (eg API in comments), guide it with conversational history.</em></p>
<p>[20221221] <a href="https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api">Best Practices for Prompt Engineering with the OpenAI API</a> &ndash; <em>Put instructions at the beginning of the prompt and use ### or &quot;&quot;&quot; to separate the instruction and context; Be specific, descriptive and as detailed as possible about the desired context, outcome, length, format, style, etc; Articulate the desired output format through examples; Articulate the desired output format through examples; Reduce “fluffy” and imprecise descriptions; Instead of just saying what not to do, say what to do instead; Code Generation Specific - Use “leading words” to nudge the model toward a particular pattern (eg you leave SELECT in as the last word of your prompt to build a SQL query).</em></p>
<p>[20221221] <a href="http://ai.stanford.edu/blog/in-context-learning/">GPT-3 Lacks Systematicity</a> &ndash; asking it to reformat dates, sometimes it gets days and months around the wrong way.</p>
<p>[20221221] <a href="https://yaofu.notion.site/How-does-GPT-Obtain-its-Ability-Tracing-Emergent-Abilities-of-Language-Models-to-their-Sources-b9a57ac0fcf74f30a1ab9e3e36fa1dc1">Tracing Emergent Abilities of Language Models to Their Sources</a> &ndash; <em>the initial GPT-3 might be superficially weak, it turns out later that these abilities serve as very important foundations of all the emergent abilities unlocked later by training on code, instruction tuning, and reinforcement learning with human feedback (RLHF). [&hellip;] The ability to respond to human instructions is a direct product of instruction tuning. The ability of generalization to unseen instructions is a free lunch given by scaling types of instructions. The ability of complex reasoning with chain-of-thought is likely to be a magical side product of training on code.</em></p>
<p>[20221221] <a href="https://dugas.ch/artificial_curiosity/GPT_architecture.html">The GPT-3 Architecture on a Napkin</a> &ndash; exactly what I needed.</p>
<p>[20221221] <a href="https://azure.microsoft.com/en-us/pricing/details/cognitive-services/language-service/">Azure Cognitive Service for Language (Pricing)</a> &ndash; ouch.</p>
<p>[20221221] <a href="https://cobusgreyling.medium.com/fine-tuning-with-the-openai-language-api-cb6509632cac">Finetuning with the OpenAI Language API</a> &ndash; giving training examples on the commandline.</p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Intro</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-intro/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-intro/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>I used to read a lot of the technical web and social media for O&rsquo;Reilly Media, where I wrote the daily &ldquo;Four Short Links&rdquo; digest. I still read a lot of online content, but now for my own purposes. I&rsquo;ve been CEO and now CTO of a company that makes retail management software (ERP, POS, and other acronyms for fashion retailers), so I&rsquo;m short of time and my reading is focused on things relevant to my needs.</p>
<p>I kept track of the interesting things I found, and sorted them loosely into piles. Those piles are:</p>
<ul>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-c-and-net/">C# and .NET</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-front-end-flutter-dart-ui/">Front End/Flutter/Dart/UI</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-sql-server-databases/">SQL Server/Databases</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-security/">Security</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-dev-architecture-apis/">Dev, Architecture, APIs</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-product/">Product</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-management/">Management</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-gpt-3/">GPT-3</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-interesting-software/">Interesting Software</a></p>
</li>
<li>
<p><a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-random/">Random</a></p>
</li>
</ul>
<p>Each pile is now a post on this blog. Each post is a list of entries, sorted reverse chronologically. <em>Italicised</em> text is quoted from the site. I&rsquo;ve datestamped the entries.</p>
<p>I&rsquo;m shallowest on C#, SQL Server, and Flutter. We make on-prem WinForms software and I&rsquo;m simultaneously coming up to speed on the .NET tech stack, SQL Server, and our use of it &ndash; while also looking for future platform options. Flutter is one of those. <strong>(We&rsquo;re hiring WinForms seniors! Mail me: <a href="mailto:nat@ontempo.co.nz">nat@ontempo.co.nz</a>)</strong></p>
<p>Product, Dev, Management are the richest veins. I pretty much kept Interesting Software only for open source software I found. And Random is just nerdy interest.</p>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Management</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-management/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-management/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://www.forbes.com/sites/alexledsom/2022/12/05/four-day-workweek-going-well-globally-study-says/?sh=6f465fe24195">Four Day Work Week Going Well</a> &ndash; <em>97% of the 495 respondents want to stay with a four-day workweek and so do the 27 companies that responded.</em></p>
<p>[20221223] <a href="https://wherewithall.com/resources/20-Great-Open-Questions.pdf">20 Great Open Questions</a> &ndash; for <a href="https://larahogan.me/blog/creative-coaching-questions/">coaching</a> and more.</p>
<p>[20221221] <a href="https://www.datocms-assets.com/65181/1667327773-iconiq-analytics-insights-engineering-in-a-hybrid-world.pdf">Engineering in a Hybrid World</a> <strong>&ndash;</strong> <em>At the time of this report,</em></p>
<p><em>over 50% of respondents had no definitive plan to return to the office. As companies scale, more time is spent on improving existing products whereas earlier stage companies can afford to spend more time on building. In the last year, time spent on building new capabilities declined from 61% to 56% of total elective investments. More engineering organizations are starting to track developer productivity, with the top metrics reported on being number of bugs, % of committed software, working software, and PR to release time.</em></p>
<p>[20221221] <a href="https://addyosmani.com/blog/high-leverage-activites/">Andy Grove&rsquo;s High Leverage Activities</a> &ndash; Task-Relevant Maturity (people are good at some things and worse at others); No issue should be discussed in a group unless it affects more than two people; A decision backed by a veto may be fair and well-reasoned — but it won&rsquo;t look that way to other members of the group over time; All your decisions should be made by considering six questions: What decision is needed? By when? Who should be consulted? Who decides? Who ratifies or vetoes? Who needs to be informed? Planning should focus on weekly or monthly cycles rather than quarterly or annual ones.</p>
<p>[20221211] <a href="https://hbr.org/2017/12/to-find-meaning-in-your-work-change-how-you-think-about-it">To Find Meaning in Work, Change How You Think About It</a> &ndash; <em>Connect work to service; Craft your work – and make work a craft; Invest in positive relationships; Remember why you work.</em></p>
<p>[20221211] <a href="https://www.prodpad.com/blog/customer-feedback-sessions">How to Run Customer Feedback Sessions</a> &ndash; what it says on the tin.</p>
<p>[20221211] <a href="https://franciscomt.medium.com/the-engineering-manager-tools-9bc0d738294d">The Engineering Manager&rsquo;s Toolbox</a> &ndash; useful tips for moving systems, people, and rewards.</p>
<p>[20221211] <a href="https://abinoda.substack.com/p/tech-debt-productivity?">Technical Debt and Productivity</a> &ndash; summary of <a href="https://www.researchgate.net/publication/325790190_Technical_Debt_Cripples_Software_Developer_Productivity_-_A_longitudinal_study_on_developers'_daily_software_development_work">a paper</a>. <em>Developers waste 23% of their working time due to technical debt; Wasted time is most commonly spent performing additional testing; Code related issues, testing issues, and architectural issues are most strongly correlated with wasted time; Developers are largely aware of the amount of time wasted due to technical debt. However, managers are not as aware.</em></p>
<p>[20221211] <a href="https://review.firstround.com/investing-in-internal-documentation-a-brick-by-brick-guide-for-startups">Investing in Documentation</a> &ndash; <em>Model good writing habits; Get in the habit of editing; Make writing part of the job ladder; Focus on quality not quantity to set the bar; Act as a journalist; Empower your senior engineers; Assemble your list; Identify ownership; Assign a rotating docs czar; Don’t be afraid to delete; Level up with landing pages; Take a snapshot.</em></p>
<p>[20221210] <a href="https://cyrilgrislain.substack.com/p/startup-restructuring-101">Startup Restructuring 101</a> – all the advice on layoffs.</p>
<p>[20221210] <a href="https://lethain.com/company-team-self/">Company-Team-Self</a> – <em>folks will accomplish more if you let them do some energizing work, even if that work itself isn’t very important. [&hellip;] What folks may not understand, is that for a certain type of person, strictly adhering to the correct path is very energizing. That kind of person, a person who I used to be most of the time (and still revert into today when particularly frustrated), doesn’t need to do sub-optimal energizing work, because doing the correct work is inherently energizing.</em></p>
<p>[20221127] <a href="https://queue.acm.org/detail.cfm?id=3570920">Spit Your Team and Make Them Happier</a> &ndash; when breadth of responsibility makes a long learning curve and inhibits feeling competent.</p>
<p>[20221119] <a href="https://randsinrepose.com/archives/the-seven-levels-of-busy/">The Seven Levels of Busy</a> &ndash; Michael Lopp breaks “busy” down into different degrees. Tag yourself.</p>
<p>[20221107] <a href="https://open.nytimes.com/collective-decision-making-with-ahp-3ef819e5bc2a">Collective Decision-Making with AHP</a> &ndash; pair-wise evaluation of options against criteria.</p>
<p>[20221107] <a href="https://kellanem.com/notes/how-to-plan">How to Plan</a> &ndash; Kellan’s advice lands. I’ve experienced about 80% of his lessons, e.g. planning is the wrong time to introduce new things. This list helped me put words to some of the failures I’ve been a part of.</p>
<p>[20221107] <a href="https://github.com/gleicon/ebook_cto_field_guide/blob/main/index.md">CTO Field Guide (For the First 90 Days)</a> &ndash; ebook made from blog posts. How to figure out where to start.</p>
<p>[20221107] <a href="https://codeclimate.com/blog/kickstarter-address-technical-debt/">Kickstarter Addresses Technical Debt</a> &ndash; look at pull requests merged/day, look at busiest pull requests (ones with most comments/go-arounds), and cycle time. Simplistic story but useful opening context.</p>
<p>[20221003] <a href="https://www.honeycomb.io/blog/an-engineering-managers-bill-of-rights-and-responsibilities">Engineering Manager&rsquo;s Bill of Rights</a> – rights and responsibilities between org and managers.</p>
<p>[20221003] <a href="https://almanac.io/magazine/all-hands-meeting-strategy-why-every-company-needs-one">All Hands Meetings Strategy</a> – balance between learning, progress, and culture.</p>
<p>[20221003] <a href="https://medium.com/wise-engineering/platform-engineering-kpis-6a3215f0ee14">Platform Engineering KPIs</a> – digging into the metrics around delivery, stability, etc.</p>
<p>[20221003] <a href="https://rajmeet.medium.com/multi-cloud-strategy-a-tale-of-two-farms-e779008d0ed3">Multicloud Strategy</a> – through a farm metaphor.</p>
<p>[20221003] <a href="https://www.metaview.ai/resources/blog/how-i-interview-engineers-to-assess-ability-to-deliver-impact">Interviewing to Assess Ability to Deliver Impact</a> – structure for interviewing engineers.</p>
<p>[20221003] <a href="https://medium.com/@SkyscannerEng/setting-your-engineers-up-for-success-how-skyscanner-created-greater-clarity-in-our-competencies-dff8fbfab4ed">Creating Clarity in Competencies and Ladder</a> – visualising ladders and skills then workshopping.</p>
<p>[20221003] <a href="https://casparwre.de/blog/webapp-python-deployment/">Deployment Infrastructure for a Webapp</a> – <em>I use 2 VPS (virtual private servers) running on DigitalOcean; The database is Postgres and is fully managed by DigitalOcean;</em></p>
<p><em>I use a blue-green deployment; Deployment is done via git and ssh; No CI/CD; No containers; Absolutely no Kubernetes.</em> <a href="https://news.ycombinator.com/item?id=32986969">HN Discussion</a> has links to interesting utilities.</p>
<p>[20221003] <a href="https://blog.southparkcommons.com/your-cto-should-actually-be-technical/">A CTO Should Be Technical</a> – educated tradeoffs is the best reason. (<a href="https://news.ycombinator.com/item?id=32987094">HN Discussion</a>)</p>
<p>[20220922] <a href="https://charity.wtf/2022/08/15/rituals-for-engineering-teams">Rituals at Engineering Teams</a> – not sacrifices.</p>
<p>[20220922] <a href="https://archive.ph/yoO97">How to Create Psychological Safety</a> – Approach conflict as a collaborator, not an adversary; Speak human to human; Anticipate reactions and plan countermoves; Replace blame with curiosity; Ask for feedback on delivery; Measure psychological safety.</p>
<p>[20220922] <a href="https://www.aha.io/blog/this-is-why-you-should-never-accept-unlimited-pto?">This is Why You Should Not Accept Unlimited PTO</a> – Company leaders shirk responsibility; Managers and teammates bear the burden; Everyone suffers from unfairness. “Since those in an unlimited PTO organization do not accrue any time, they are typically not paid out for that earned time if they leave the company.”</p>
<p>[20220922] <a href="https://codewithstyle.info/software-vs-systems/">Writing Software vs Building Systems</a> – senior engineers.</p>
<p>[20220922] <a href="https://growing-products.paralect.com/a-development-process-startup-founders-should-use-to-ship-features-weirdly-fast">A Development Process to Ship Features Faster</a> – Avoid Feature Branches; Automate CI/CD pipeline; Use a monorepo; Break features into small, incremental changes; Use feature flags; Define owners; Request at least one demo per week; Deploy weekly; Freeze the code before release; Write tests (or not?).</p>
<p>[20220922] <a href="https://news.ycombinator.com/item?id=32883596">Inherited Worst Team and Code, How Do I Fix It?</a> – comments are good. Exec buy-in, low hanging fruit (step 1: add version control), the Pivotal method.</p>
<p>[20220910] <a href="https://lethain.com/one-on-ones-with-executives/">One on Ones with Executives</a> &ndash; different types of meetings and what you should do in each. Sound advice.</p>
<p>[20220901] <a href="https://medium.com/@ElizAyer/organizational-boundary-problems-too-many-cooks-or-not-enough-kitchens-2ddedc6de26a">Organizational Boundary Problems</a> &ndash; <em>Open cultures can have a dark side too, though. Openness doesn’t come for free, and without structure to enable participation, a culture that calls itself “open” can easily evolve to increase the feelings of exclusion it was trying to avoid.</em></p>
<p>[20220901] <a href="https://emtidbits.substack.com/p/debugging-your-teams">Debugging Your Teams</a> &ndash; based on the type of failure, what could be going on that <em>isn’t</em> blaming the individuals.</p>
<p>[20220901] <a href="https://blog.vpecoach.com/engineering-change-step-by-step-6363c275b93f">Change Management for Tech Leaders</a> &ndash; lots of things that I’ve learned the hard way, and some I now don’t have to.</p>
<p>[20220802] <a href="https://squanderingti.me/blog/2022/06/29/a-staff-shaped-hole.html">A Staff-Shaped Hole</a> &ndash; how companies fail staff engineers. “Self-directed” doesn’t mean you can abandon without onboarding and support. “Lead with influence” often comes from those with structural power. Let leaders lead (don’t micromanage). Not coding is still doing real work. _Any time you hire a great leader and they don’t deliver the magical result you expected and leave burned out, it’s basically always the organization’s fault._All men. <em>The most senior person you have is not a de facto leader/principal.</em> You need architects around 150 people. A custom ladder is a shitshow because it takes you out of sync from every other company. Bored at smaller companies. Promotion without a change in tasks. </p>
<p>[20220726] <a href="https://about.gitlab.com/blog/2022/07/21/quickly-onboarding-engineers-successfully/">How to Quickly Onboard Engineers Successfully</a> – <em>it starts before day one; track it in a task; pick the right onboarding buddy; pair, pair, and more pairing; all the coffee chats; tailor the experience to the role; ship some code in a week or less; give and get feedback.</em></p>
<p>[20220718] <a href="https://medium.com/serious-scrum/scrum-teams-are-often-coached-to-death-while-the-problems-are-with-management-60ac93bb0c1c">Scrum Teams are Often Coached to Death While the Problem is with Management</a> – points the finger at: <em>Telling teams what they should do and by when; Telling teams to commit to the work planned, not the outcome; Continuing to have individual appraisals that conflict with the team goals; Continuing praising teams that break their sustainable pace; Continuing to expect teams to work on multiple things at the same time; Continuing to see the output as a measure of success, not the outcome; Continuing to ignore organizational impediments.</em></p>
<p>[20220629] <a href="https://www.elidedbranches.com/2017/01/how-do-individual-contributors-get.html">How Individual Contributors Get Stuck</a> – noticing how people get sidetracked and stuck is a superpower.</p>
<p>[20220624] <a href="https://mineolasearchpartners.com/2022/06/09/the-biggest-temptation-of-a-software-ceo/">Biggest Temptation of a Software CEO</a> &ndash; throwing more bodies at problems. <em>High velocity within the engineering team is often less a function of what a company agrees to build, but is more a function of what a company declines to build.</em></p>
<p>[20220624] <a href="https://www.mironov.com/replatforming/">Replatforming</a> &ndash; all the hard stuff about changing your platform. <em>Replatforming or re-architecting production software is a complex, expensive, risky proposition.  Most of the challenges are around dealing with internal expectations and paying external customers, not the underlying technical details. So let’s not think of these as development-only exercises and assign sole responsibility to Engineering.</em></p>
<p>[20220624] <a href="https://www.patkua.com/blog/how-engineering-managers-fail/">How Engineering Managers Fail</a> &ndash; Continuing To View Their Role Mainly as a Maker; <em>Assuming Everyone Knows What You Do; Taking Extreme Views; Feeling the Need To “Shield” the Team; Optimising the Parts Instead of the Whole</em></p>
<p>[20220624] <a href="https://www.thoughtworks.com/insights/podcasts/technology-podcasts/is-there-ever-a-good-time-for-a-code-freeze">Code Freezes</a> &ndash; code freezes aren’t change freezes, as hotfixes happen. Freezes reflect risk that should be removed every day, not just the days you don’t code.</p>
<p>[20220624] <a href="https://github.com/readme/guides/roofshots-decision-making">Decision Making</a> &ndash; <em>not &ldquo;don&rsquo;t be wrong&rdquo;, but instead &ldquo;how can I adjust course gracefully&rdquo;? I needed to adapt to changes instead of assuming they wouldn’t happen.</em> </p>
<p>[20220624] <a href="https://copyconstruct.medium.com/know-how-your-org-works-or-how-to-become-a-more-effective-engineer-1a3287d1f58d">Know How Your Organisation Works</a> &ndash; <em>get comfortable with the mess</em>.</p>
<p>[20220624] <a href="https://lethain.com/strategies-visions/">Strategies and Visions</a> &ndash; really good advice on how to make useful strategies.</p>
<p>[20220529] <a href="https://karimjedda.com/lessons-learned-developer-to-project-manager/">Lessons Learned on the Journey from Developer to Project Manager</a> &ndash; <em>identify and document the context and constraints first; write everything down; The scope of the project and what needs to be done should be clear to everyone. If the methods used to support the mission get in the way or provide no immediate tangible benefits to the project, they should be removed; Your role is ultimately to cut through useless and irrelevant tasks and time wasters and focus on what will actually bring a benefit to your customers whomever they are; have contingency plan roadmaps.</em></p>
<p>[20220527] <a href="https://www.docker.com/blog/building-stronger-happier-engineering-teams-with-team-topologies/">Restructuring Engineering Teams with Team Topologies</a> – first was to stream-aligns and enabling teams; then to a platform.</p>
<p>[20220527] <a href="https://review.firstround.com/ditch-your-to-do-list-and-use-these-docs-to-make-more-impact">Docs for Personal Impact</a> – prioritise the things you’re trying to achieve, understand if you’re making progress, and more. Shit that’s a lot of meta-work, tho.</p>
<p>[20220527] <a href="https://hbr.org/2019/03/the-feedback-fallacy">The Feedback Fallacy</a> – questioning the value of feedback, which is premised on (1) the observer is actually seeing something accurately; (2) the observer’s suggestions for what to do more of are right. Both get shot in the knees by this article. But obviously *my* feedback is awesome and the exception here.</p>
<p>[20220526] <a href="https://slab.com/blog/stripe-writing-culture/">Stripe&rsquo;s Writing Culture</a> – <em>Leaders must demonstrate quality writing; Exemplify quality writing in everything you and your leadership team share; Make writing the default method of sharing knowledge; Give teammates a starting point with sample docs; Know when to standardize and when to give autonomy; Make your documentation easy to read; Create a support system; Building your culture of writing and documentation.</em></p>
<p>[20220525] <a href="https://sharedphysics.com/everything-is-important/">When Everything is Important But Nothing is Getting Done</a> – prioritise, minimise WIP, remove dependencies.</p>
<p>[20220505] <a href="https://about.gitlab.com/blog/2022/05/03/preventing-burnout-a-managers-toolkit/">Preventing Burnout: A Manager&rsquo;s Toolkit</a> – <em>Reduce the number of hours worked by agreeing to reduce effort. Managers can ask team members to identify things that are likely to fail.</em></p>
<p>[20220504] <a href="https://www.jrothman.com/mpd/project-management/2022/02/see-and-resolve-team-dependencies-part-1-inside-the-team/">See and Resolve Team Dependencies</a> – blog post series with meat.</p>
<p>[20220406] <a href="https://staysaasy.com/startups/2022/04/03/performance-management.html">Merge Code Every Week</a> – reduce time to feedback.</p>
<p>[20220406] <a href="https://www.forbes.com/sites/forbestechcouncil/2022/04/01/the-danger-of-software-prototypes/">The Danger of Software Prototypes</a> – sunk cost fallacy, insufficiently precise requirements (“plausible but wrong”), overzealous belief in iterative development (some architectural decisions like thread safety and 1:1 vs 1:n vs n:m schemas are hard to correct later). “Gather enough requirements to know when to throw your prototype away.”</p>
<p>[20220404] <a href="https://medium.com/meliopayments/how-to-scale-a-unicorn-building-engineering-team-and-stay-sane-40af8ac7e3db">Scaling Engineering Teams</a> – SWOT focused on future growth vs current status; clump them into “domains”; write a one pager for each clump w/current status, problem statement, goals; pair engineers and team leads as a designated task force for each domain; grant each task force a month with up to 20% designated time to create a structured plan (Research; Goal; Timeline &amp; milestones; Resources); document what you learn and share it; enable and guide.</p>
<p>[20220404] <a href="https://stackoverflow.blog/2022/03/17/new-data-what-makes-developers-happy-at-work/">What Makes Developers Happy at Work</a> – salary, work-life balance, flexibility, productivity, and growth opportunities. <em>“Feeling productive at work plays a much more critical role in team happiness than we probably realize. It shouldn’t be as surprising as it is,” said Matt Kiernander, technical advocate here at Stack Overflow. “When I code, I don’t like disruptions in my flow state. Constantly stopping and starting makes me feel unproductive. We all want to feel like we’re making a difference, and hitting roadblocks at work just because you’re not sure where to find answers is incredibly frustrating.”</em></p>
<p>[20220404] <a href="https://github.blog/2022-03-31-how-github-does-take-home-technical-interviews/">How GitHub Does Take Home Technical Interviews</a> – nice use of GitHub’s tools. <em>The pull request includes automated tests and a rubric so that interviewers know how to mark it and each submission is evaluated objectively and consistently. The tests run through GitHub Actions and provide a base level for the reviewer.</em></p>
<p>[20220404] <a href="https://engineering.gusto.com/end-to-end-feature-development/">End to End Feature Development</a> – genericontent for engineering blog. Take a moment for a quiet vom at managers being called “People Empowerers”. </p>
<p>[20220330] <a href="https://medium.com/@stephenrwalli/rules-for-cooperative-efforts-2e3e21458ca0">Rules for Cooperative Efforts</a> &ndash; nice series of principles by Stephen Walli.</p>
<p>[20220330] <a href="https://www.infoq.com/articles/continuous-documentation-workflow/?">Continuous Documentation</a> – incorporating documentation into the dev workflow.</p>
<p>[20220324] <a href="https://imwrightshardcode.com/2022/03/i-expect-you-to-read-this/">Clear Expectations</a> – <em>“I expect you to”, follow up (“if you walk away, I will follow”), don’t rush to reset expectations. “I expect [name] to do [thing] by [timeframe] within [constraints].” If there are action items after a meeting, you can list the items as “[name]: [timeframe]: [thing] within [constraints].”</em></p>
<p>[20220324] <a href="https://paulhammant.com/2022/02/12/a-tech-debt-balance-sheet/">Technical Debt Balance Sheet</a> – I can’t tell if this is an exercise in angels and pin heads, or if it’s seriously useful.</p>
<p>[20220308] <a href="https://review.firstround.com/the-25-micro-habits-of-high-impact-managers">25 Microhabits of Successful Managers</a> &ndash; close to my approach. </p>
<p>[20220308] <a href="https://www.infoq.com/articles/managing-technical-debt-microservices">Managing Technical Debt in a Microservices Architecture</a> &ndash; really about mapping the tech capability plan. List of tech options with Preferred/Acceptable/Discouraged/Unacceptable, then three years of quarter-by-quarter Plan/Deprecate/Migrate/Use/Remove with risk estimation. Bottom-up generation from engineers who know the problem space.</p>
<p>[20220306] <a href="https://blog.testdouble.com/posts/2022-01-20-stop-paying-debts-start-maintaining-code/">Stop Paying Down Technical Debt, Start Maintaining Code</a> &ndash; Stop paying down tech debt and start actual software maintenance. That’s the real term we should all be talking about.</p>
<p>[20220303] <a href="https://axolo.co/blog/p/developer-productivity">What is Developer Productivity and How to Measure It?</a> - SPACE framework = Satisfaction, Productivity, Activity, Communication &amp; collaboration, Efficiency &amp; flow.</p>
<p>[20220225] <a href="https://betterprogramming.pub/engineering-org-structures-the-qrf-team-model-7b92031db33c">QRF</a> &ndash; quick reaction force, aka “the team that it’s okay to interrupt”.</p>
<p>[20220225] <a href="https://klinger.io/posts/managing-people-%F0%9F%A4%AF">Managing People</a> &ndash; your job is not to <em>manage people</em>, but to <em>manage processes</em> and <em>lead people</em>.</p>
<p>[20220225] <a href="https://blog.pragmaticengineer.com/what-do-tpms-do">Technical Product Managers</a> &ndash; what do they do at different companies and stages, how does the role sit vs project manager or product manager. The TPM owns the ‘when?’ and ‘who?’ questions. The PM owns the ‘why?’ and ‘what?’ The EM and the engineering team own the ‘how?’</p>
<p>[20220225] <a href="https://rkg.blog/desperation-induced-focus.php">Desperation-Induced Focus</a> – a nice piece against process. <em>Big companies suck. At some point they were just like you. A startup fighting for product market fit or creating predictability in go-to-market or expanding geographically or something else that actually matters. They were focused. Focused on hiring trajectory-changing people and giving them more responsibility than they knew what to do with. They were working their a**es off to create something out of nothing. They had desperation-induced focus. But now they are different. Most big companies aren’t focused on creating things out of nothing. Someone else made the magic money-making machine, and they assume that it will just keep working. With the one thing that actually matters taken care of, they care about luxuries like making sure as high a percentage of the company as possible feels included in the planning process. Or creating performance review frameworks with an ever-increasing number of boxes and categories. Or something else that matters even less than that. This lack of focus is a luxury and a disease.</em></p>
<p>[20220224] <a href="https://www.jeremiahlee.com/posts/failed-squad-goals/">Failed Squad Goals</a> – post-mortem on Spotify’s famous but failed “agile at scale” model.</p>
<p>[20220219] <a href="https://cutlefish.substack.com/p/tbm-752-making-room-for-new-things">Making Room for New Things</a> &ndash; interesting breakdown of work. “Reactive fixes, heroics, adhoc work, silver bullets, and chasing the latest “great idea”. This work can be especially draining!” And a good point that we can end up doing low-value things on autopilot.</p>
<p>[20220218] <a href="https://arxiv.org/pdf/2202.06183.pdf">Game Project Anti-Patterns</a> – based on 600 post-mortems.</p>
<p>[20220217] <a href="https://larahogan.me/blog/when-to-delegate-when-to-say-no/">Delegation</a> &ndash; plot on urgent/important and do urgent+important, delegate urgent+!important, schedule or delegate important+!urgent, ignore !important+!urgent.</p>
<p>[20220217] <a href="https://twitter.com/mipsytipsy/status/1494155409308803073">Charity Majors on Careers</a> &ndash; Most of us hate feeling like beginners. We associate it with anxiety, with failure, with not being good enough. If you want to have a long, rich, rewarding career in tech, the best thing you can do is consciously retrain yourself to lean into curiosity and its discomfort.</p>
<p>[20220217] <a href="https://www.dave-bailey.com/blog/nonviolent-communication">Starting with Nonviolent Communication</a> &ndash; key points are</p>
<ul>
<li>When ____[observation], I feel ____[emotion] because I’m needing some ____[universal needs]. Would you be able to ____[request]?</li>
<li>observe, don’t evaluate/judge (“when you are late returning my book” vs “when you are a thoughtless git”)</li>
<li>emotions, not thoughts (“I feel sad” not “I feel like you’re a thoughtless git”). Go beyond “anger” to “shame” or “fear” or …</li>
<li>universal needs, not strategies (don’t tell them what to do, tell them what you need: “I need transparency” vs “I need to be copied on every email”)</li>
<li>requests, not demands. Make it specific, say what you want (not what you don’t want), and treat a “no” as an opportunity to find out what it will take to get to “yes”.</li>
<li>appropriate consequences are those whose purpose is to protect your needs, not to punish the other person</li>
</ul>
<p>[20220216] <a href="https://jacobian.org/2022/feb/14/that-wild-aam-story/">That Wild Story</a> – designing a human process around pathological cases leads to processes that are themselves pathological.</p>
<p>[20220216] <a href="https://www.reforge.com/blog/technical-decision-making">Technical Decision Making</a> – the standard process (define problem and criteria for evaluating solutions; go wide to find possibles and evaluate them; make the decision). </p>
<p>[20220213] <a href="https://charity.wtf/2019/09/08/reasons-not-to-be-a-manager/">Reasons Not To Be A Manager</a> &ndash; many good reasons, and I particularly liked “Your time doesn’t belong to you”.. </p>
<p>[20220213] <a href="https://www.evaschafroth.com/blog/quitting-your-job">Before You Quit Your Job</a> &ndash; six core needs from work: BICEPS = Belonging, Improvement, Choice, Equality, Predictability, Significance. Which needs does your job fulfil, and where are your gaps?</p>
<p>[20220213] <a href="https://www.strongdm.com/blog/technical-staff-onboarding-checklist">Onboarding</a> &ndash; a summary of where I&rsquo;m heading</p>
<p>[20220208] <a href="https://imgur.com/3uyRWGJ">Never interrupt a programmer</a> – cartoon.</p>
<p>[20220208] <a href="https://archive.fo/79E61">Four Hour Work Week</a> – 100/80/100 (100% of the work, 80% of the time, 100% of the pay) means squeezing out breathing time, chit-chat, and so on. And customers still call on Friday. I think we do it right – if you want to work four days, work four days and be paid for four days.</p>
<p>[20220207] <a href="https://klinger.io/posts/managing-people-%F0%9F%A4%AF">Managing People</a> &ndash; There is no point being angry at your team – ever. You are in charge of processes and people. And you got more information than they do, always. You either created the processes where this outcome happened or you hired (or did not fire) the wrong people.  Ultimately everything is your fault</p>
<p>[20220206] <a href="https://twitter.com/wes_kao/status/1489992239283683334">Feedback Conversations</a> &ndash; Strategy = Anything that contributes to potential behavior change. Self expression = Everything else you should not say. Feedback is about Strategy. Self-expression is why most feedback conversations fail. Mentally forgive the person, Identify what will motivate them to change, Say only the 10% that will actually change behavior.</p>
<p>[20220206] <a href="https://thinkingthrough.substack.com/p/a-better-way-to-write-self-evaluation">A Better Way to Do Self-Evaluation and Give Feedback</a></p>
<ul>
<li>STAR: Situation, Task, Action, and Result</li>
<li>SBID: Situation, Behaviour, Impact, and Desired outcome</li>
<li>INDL - Impact, Numbers, Descriptions, and Links.</li>
</ul>
<p>[20220203] <a href="https://www.shubhro.com/2022/01/30/hacks-engineering-estimates/">Hacks for Engineering Estimates</a> – estimate/target/commitment/plan; establish extremes; note the precision; ask for confidence levels over time.</p>
<p>[20220203] <a href="https://georgestocker.com/2022/01/29/mistakes-first-time-leaders-make/">Mistakes First-Time Leaders Make</a> – 👀</p>
<p>[20220202] <a href="https://archive.fo/vmj6S">What happens when colleagues know each other&rsquo;s salaries</a> – pay gaps close, and it becomes disconnected from performance.</p>
<p>[20220131] <a href="https://xdg.me/mentor-engineers/">How to Mentor Software Engineers</a> &ndash; more than code review.</p>
<p>[20220131] <a href="https://davidxiang.com/2021/02/10/software-engineering-culture-metrics/">Software Engineering Culture Questions</a> &ndash; lots of ways to assess different aspects of a team’s culture.</p>
<p>[20220131] <a href="https://academy.nobl.io/how-to-write-a-strategy-your-team-will-remember/?">How to Write a Strategy That Anyone Can Remember</a> &ndash; “even over” statements. I’m a fan of the opposite: two metrics at once, one you want to maximise and one you don’t want to hurt.</p>
<p>[20220130] <a href="https://leeorengel.com/prioritization-multiple-work-streams-unplanned-work-oh-my/">Prioritization, Multiple Streams, and On Call</a> &ndash; advocates for what we call Support Supporter as rotating role</p>
<p>[20220128] <a href="https://betterprogramming.pub/how-to-decide-when-its-time-to-stop-designing-and-start-coding-eb9b6d8625c">How to Decide When It&rsquo;s Time to Stop Designing and Start Coding</a> – heuristics</p>
<ul>
<li>There are enough known unknowns (“if you have something you can ship with low risk, do it”)</li>
<li>There are no more known unknowns</li>
<li>There are far too many known unknowns (prototype to focus effort)</li>
<li>You stop learning new things (discussing same point over and over)</li>
<li>Falling down the rabbit hole (things start getting too complicated and abstract / imaginary problems).</li>
</ul>
<p>[20220128] <a href="https://magazine.foster.uw.edu/insights/how-to-beat-burnout/">How to Beat Burnout</a> – things you can do for yourself. (Not replacing structural changes to work)</p>
<p>[20220201] <a href="https://twitter.com/mipsytipsy/status/1486141787315990528">How to respond when someone leaves (a subtweet)</a></p>
<p>[20220201] <a href="https://www.productlessons.xyz//article/stop-being-hero">Stop Being the Hero</a> (practical -&gt; emotional -&gt; narrative; ppl want to be the hero)</p>
<p>[20220201] <a href="https://dzone.com/articles/death-to-tribal-knowledge">Death to Tribal Knowledge</a> – good list of dev things to document</p>
<p>[20220201] <a href="https://medium.dave-bailey.com/a-manager-guide-to-holding-your-team-accountable-a05aac67294c">Manager&rsquo;s guide to holding people to account</a></p>
<p>[20220201] <a href="https://holub.com/heuristics">Heuristics (a credo)</a></p>
<p>[20220201] <a href="https://www.infoq.com/articles/avoiding-technical-bankruptcyQ">Avoiding technical bankruptcy</a> (technical debt = symptom of flawed dev mgmt)</p>
<p>[20220201] <a href="https://review.firstround.com/making-engineering-team-communication-clearer-faster-better">Technical design review process</a></p>
<p>[20220201] <a href="https://docs.google.com/document/d/1CMlG1v9AAln9SvI4Ysqo8NOd4L4ObDy3SY8pNh9iXhI/edit">Example of a technical design review document</a></p>
<p>Then, rather than allowing everyone to comment directly on the document, create a blank Google doc where everyone lists their questions about the design alongside their name. This will serve as the agenda for the upcoming design review.</p>
<p>[20220201] <a href="https://leaddev.com/skills-new-managers/common-management-failures-developing-individual-contributors">Common management failures in developing ICs</a></p>
<ul>
<li>Doing all the technical design work yourself</li>
<li>Doing all the project management yourself</li>
<li>Neglecting to give feedback</li>
<li>Hoarding information</li>
<li>Focusing too much on your personal output</li>
</ul>
<p>[20220201] <a href="https://jeffhuang.com/productivity_text_file/">Productivity Text File</a></p>
<p>[20220201] <a href="https://docs.google.com/document/d/e/2PACX-1vQ0vERe4LLpS8s2jzJKDPixrT-Q2Gr6AJZR4MRXFFCQUXSGuCptR9YDYjPTA2Ct0tAUBwCBmYsqUH_M/pub">Bets, Success Metrics, and Roadmapping</a></p>
<p>[20220201] <a href="https://austinhenley.com/blog/lessonsfrommyphd.html">Lessons from my PhD</a></p>
<ul>
<li>Lead or be lead</li>
<li>Outline with topic sentences</li>
<li>Get excited</li>
<li>Unmotivated details</li>
<li>Slide vs Speaker-led presentations</li>
<li>Managers are Input/Output machines (get feedback)</li>
</ul>
<p>[20220201] <a href="https://ruiper.es/b13c6eafde054804b2d30a35d95334f8">Planning sessions</a></p>
<p>[20220201] <a href="https://newsletter.pragmaticengineer.com/p/incident-review-best-practices">Incident Review Best Practices</a></p>
<p>[20220201] <a href="https://paulosman.me/2021/10/02/sociotechnical-lenses-into-software-systems/">&ldquo;Incidents are Unplanned Investments&rdquo;</a></p>
<p>[20220201] <a href="https://paulosman.me/2021/10/02/sociotechnical-lenses-into-software-systems/">Types of Waste in Software Projects</a> (paper)</p>
<p><img src="images/7oamD0vvN71uI3AMpG-urEu-AzsWpea77K7JFL3n5CvdeaDFgMBk_KUSPnPuLu2BKQbC0_dXRZig9TivOz9PHEDJnplyV3GiN_crVpDK_-7xAgCVe7FsRAPLQEn06EyEtdklVpoA8eXEs-6z6UIvjiAUKptArJyXggRVRhjbGTDKw-A31DtmzWzGakWU" alt=""></p>
<p><img src="images/SAXiDGViltIX9Uf8xdd2x9E4ummsv3aHnx5sL3UQRUa5bXsr7m5fD8A3_6Xg1eZRsKtE9VEC99mh7FobnKBvVSwoWO6vbF9ClbEeq9nUJC1hSDNLB6ag8gQ6ru9heGeu9qsoVH2d57_C32O0iYQIO4NeHbNtgSMXSi_4MZSStrDg4JUBcoA1Nqg5W_Dm" alt=""></p>
<p>[20220201] <a href="https://increment.com/planning/software-development-as-a-wicked-problem/">Software Development as a Wicked Problem</a> - good description of wicked problems</p>
<p>[20220201] <a href="http://en.wikipedia.org/wiki/Situational_leadership_theory">http://en.wikipedia.org/wiki/Situational_leadership_theory</a></p>
<p>[20220201] <a href="http://wimvdd.blogspot.com/2007/05/what-is-situational-leadership.html">http://wimvdd.blogspot.com/2007/05/what-is-situational-leadership.html</a></p>
<ul>
<li>Competence vs. Commitment Matrix gives you a quick and easy view and clear understanding of four basic types of leaderships.</li>
<li>The 4 types of leadership has been defined by Hersey and Blanchard which they named S1 to S4:
<ul>
<li>S1: Telling – one-way communication. Leader defines the roles of the individual or group and provides the what, how, why,when, and where to do the task</li>
<li>S2: Selling – two-way communication. Leader is still providing the direction and providing the socioemotional support that will allow the individual or group being influenced to buy into the process.</li>
<li>S3: Participating – shared decision making about aspects of how the task is accomplished. Leader is providing less task behaviors while maintaining high relationship behavior.</li>
<li>S4: Delegating – the leader is still involved in decisions; however, the process and responsibility has been passed to the individual or group. The leader stays involved to monitor progress.</li>
</ul>
</li>
<li>The Situational Leadership Theory:
<ul>
<li>developed by Paul Hersey, professor and author of the book “Situational Leader” and Ken Blanchard, leadership guru and author of “The One Minute Manager”</li>
<li>introduced in 1st edition of “Management of Organizational Behavior” as “Life Cycle Theory of Leadership”</li>
<li>renamed to “Situational Leadership theory” in mid 1970s.</li>
</ul>
</li>
</ul>
<table>
  <thead>
      <tr>
          <th><strong>DEVELOPMENT LEVEL</strong></th>
          <th><strong>APPROPRIATE SUPERVISORY STYLE</strong></th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>D1</strong>                                                        Low CompetenceHigh Commitment</td>
          <td><strong>S1</strong>DIRECTINGStructure, control (telling people what to do, how to do it, where to do it) and supervision of performance</td>
      </tr>
      <tr>
          <td><strong>D2</strong>Some CompetenceLow Commitment</td>
          <td><strong>S2</strong>COACHINGDirect and Support</td>
      </tr>
      <tr>
          <td><strong>D3</strong>High CompetenceVariable Commitment</td>
          <td><strong>S3</strong>SUPPORTINGPraise, Listen, Encourage, Facilitate involvement in problem solving and decision making</td>
      </tr>
      <tr>
          <td><strong>D4</strong>High CompetenceHigh Commitment</td>
          <td><strong>S4</strong>DELEGATINGTurn over responsibility for day-to-day decision making</td>
      </tr>
  </tbody>
</table>
<p>* Competence (encompasses education, training, experience, etc)</p>
<p>* Commitment (combination of confidence and motivation)</p>
<p>[20220201] <a href="https://www.elidedbranches.com/2022/01/structural-lessons-in-engineering.html">Structural lessons in engineering management</a> (IC vs mgmt isn’t clean-cut)</p>
<p>[20220201] <a href="https://archive.is/ZFwUh">Doing too much work before looping in others</a></p>
<ul>
<li>Encourage engineers to show their work as quickly as possible, never &gt; 1w without showing something.</li>
<li>Can show a design doc, PRD, prototype, anything that enables meaningful feedback.</li>
<li>If an engineer is unclear on a first deliverable, help them with what and when.</li>
<li>Encourage engineers to get end-to-end deliverables asap.</li>
<li>Develop behind feature flags so features can be checked in incrementally.</li>
<li>Demo repeatedly as the feature gets fleshed out.</li>
<li>Encourage everyone to give constructive feedback, and beware overly negative or toxic feedback.</li>
</ul>
<p>[20220201] <a href="https://www.7pace.com/blog/how-to-improve-time-management">How to Improve Time Management</a></p>
<ul>
<li>Planning Fallacy: tendency to underestimate the time required to finish a task or overestimate our ability to complete it within a set amount of time. This fallacy is partly due to reliance on overly optimistic performance scenarios without the help of reliable data.</li>
<li>if a task is overly complex and contains multiple steps, the chances that one of them will hit a snag and impact your timeline will increase. Even worse, if you aren’t tracking your time consistently and flagging the issues quickly, minor delays can add up to a substantial impact.</li>
<li>It feels good to check an item off a todo list so we can be trapped into chasing menial wins.</li>
<li>The pain of doing the work is more than the pain of delaying it.</li>
<li>Responsiveness and Throughput are rivalrous because being interrupted increases your WIP (and you pay a context-switching price)</li>
<li>The Zeigarnik Effect states that we’re more likely to remember incomplete or interrupted tasks than finished ones.</li>
</ul>
<p>[20220201] <a href="https://blog.trello.com/7-productivity-methods">7 Productivity Methods</a></p>
<ol>
<li>Tackle biggest and most important first.</li>
<li>Time blocking.</li>
<li>Pomodoro.</li>
<li>Schedule to your biological energy levels.</li>
<li>Zen To Done (ZTD) has 10 “habits” you pick and choose from:
<ol>
<li>Collect: Write down ideas, tasks, and thoughts as they come to you to get them out of your head and onto paper.</li>
<li>Process: Make decisions and answer emails quickly, so that it doesn’t pile up, procrastinating for later.</li>
<li>Plan: Write down your biggest must-do’s for the week, schedule them out, and do them first every day. </li>
<li>Do: Focus on one task at a time—turn off your phone and don’t check emails or task switch until a set time or it’s done. </li>
<li>Simple Trusted System: Keep simple lists, check tasks off as you go, and stick to your daily lists. </li>
<li>Organize: Declutter and organize your space, your inbox, and your mind—that means dealing with action items as they arise and deleting the rest. </li>
<li>Review: Do a weekly review of your goals and your progress, adjusting your systems and objectives accordingly. </li>
<li>Simplify: Reduce your tasks and goals down to the bare essentials and focus on them. </li>
<li>Routine: Set and keep a daily routine that gives you time to be focused and productive and recharge.</li>
<li>Passion: Seek work that you’re passionate about or love and notice how little you procrastinate (and how happy you are). </li>
</ol>
</li>
<li>Don’t break the chain</li>
<li>Commitment Inventory
<ol>
<li>List: Write down a complete list of how you spend your time (including chores, family time, meetings, exercise, and task breakdown).</li>
<li>Combine and categorize: Narrow the list down into categories and assign a percent of time spent on each. Visual pie charts are helpful here! </li>
<li>Review: Ensure that important commitments have enough time to do it well, cut the rest, and adjust your totals to equal 100%.  </li>
<li>Schedule: According to how much time you want (or need) to spend per category, schedule out your day. </li>
<li>Checklists: Work in checklists, rather than to-do lists, because they are more granular, breaking down tasks into smaller parts with less resistance.   </li>
<li>Work in bursts: Focus on one thing for a set amount of time before switching to another, switching between work commitments and play.</li>
</ol>
</li>
</ol>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Product</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-product/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-product/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20220203] <a href="https://cutlefish.substack.com/p/tbm-452-an-actionable-post-with-examples">Tree/Loop Prompts</a></p>
<ul>
<li>Our ability to ________ is a function of our ability to ________</li>
<li>________ has a number of contributing factors, including ________</li>
<li>When ________ [increases/decreases] we would expect to see __________ [increase/decrease]</li>
<li>To [increase/decrease] ___________, we have a number of options including ____________</li>
<li>To [increase/decrease] ___________, we have a number of options including attempting to [increase/decrease] ___________.</li>
<li>________ can be broken down into the following subtopics: ________</li>
<li>________ is an output of the following inputs: ________</li>
<li>________ will help us ________ which will help us __________</li>
<li>To positively impact ________ we might try ________ , ideally without ________ .</li>
<li>Our assumption (or hypothesis) that __________ can be broken down into multiple sub-assumptions (or hypotheses), including ________</li>
</ul>
<p>[20220131] <a href="http://highscalability.com/blog/2022/1/3/designing-whatsapp.html">Designing WhatsApp</a> &ndash; sample breakdown of requirements, architecture, etc.</p>
<p>[20220131] <a href="https://stackoverflow.blog/2022/01/17/plan-for-tradeoffs-you-cant-optimize-all-software-quality-attributes/">Plan for Tradeoffs</a> &ndash; different quality attributes of software are rivalrous, so you should decide what your priorities are</p>
<p>[20220201] <a href="https://builtin.com/software-engineering-perspectives/when-mvps-hurt">When MVPs hurt</a></p>
<p>[20220201] <a href="https://www.appcues.com/blog/how-to-plan-out-your-feature-release-to-drive-product-adoption">Feature release plans</a></p>
<p>[20220201] <a href="https://martinfowler.com/articles/cant-buy-integration.html">You can&rsquo;t buy integration</a> (abstract the capability, not the system)</p>
<p>[20220201] <a href="https://www.smashingmagazine.com/2021/12/how-price-projects-manage-scope-screep/">How to Price Projects &amp; Manage Scope Creep</a></p>
<ul>
<li>Break into Discovery, Alpha, MVP, and Ongoing BAU</li>
<li>You only need to define the scope of the next stage</li>
<li>Discovery = validate the project, deliver user needs, business objectives, what needs to be built.</li>
<li>Alpha = visualise the service, define how it works, and ensure users have a positive experience with it. Gives you shared vision, identify things that were overlooked, and something to test with users.</li>
<li>MVP = ship something, being pushy with “not in the first draft”</li>
<li>BAU = iterate and optimise, add new features, remove things that aren’t helpful</li>
</ul>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: Security</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-security/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-security/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221223] <a href="https://www.wiz.io/blog/introducing-peach-a-tenant-isolation-framework-for-cloud-applications">PEACH Framework for Cloud Security</a> &ndash; <em>risks associated with customer-facing interfaces and determines: the complexity of the interface as a predictor of vulnerability;</em></p>
<p><em>whether the interface is shared or duplicated per tenant; what type of security boundaries are in place (e.g. hardware virtualization); how strongly these boundaries have been implemented. In order to gauge how strongly the security boundaries have been implemented (4), we propose using the following five parameters (P.E.A.C.H.): Privilege hardening, Encryption hardening, Authentication hardening, Connectivity hardening, Hygiene.</em></p>
<p>[20221223] <a href="https://www.schneier.com/blog/archives/2022/12/the-decoupling-principle.html">The Decoupling Principle</a> &ndash; <em>to ensure privacy, information should be divided architecturally and institutionally such that each entity has only the information they need to perform their relevant function. Architectural decoupling entails splitting functionality for different fundamental actions in a system, such as decoupling authentication (proving who is allowed to use the network) from connectivity (establishing session state for communicating). Institutional decoupling entails splitting what information remains between non-colluding entities, such as distinct companies or network operators, or between a user and network peers. This decoupling makes service providers individually breach-proof, as they each have little or no sensitive data that can be lost to hackers. Put simply, the Decoupling Principle suggests always separating who you are from what you do.</em></p>
<p>[20221126] <a href="http://oldvcr.blogspot.com/2022/11/meet-your-new-two-factor-authenticator.html">C64 MFA</a> &ndash; <em>The terminal window is showing a generated time-based one-time password for a full key, and the emulated 64 is showing the correct key, at the correct time, which was known and tested to be valid. Yes, you really can use your Commodore 64 for multi-factor authentication to generate TOTP codes!</em></p>
<p>[20221107] <a href="https://github.com/ballerine-io/ballerine">Ballerine</a> &ndash; <em>an open-source infrastructure for user identity and risk management.</em></p>
<p>[20220504] <a href="https://www.serverlesschats.com/133/">Serverless Security</a> – you can use IAM to limit access to individual functions. Huh.</p>
<p>[20220421] <a href="https://devd.me/log/posts/startup-security/">Early Security for Startups</a> – <em>focus on the common source of breaches: Ransomware; Cloud misconfiguration/leak; Credential compromise via phishing, password reuse, etc.</em></p>
<p>[20220321] <a href="https://fusionauth.io/learn/expert-advice/tokens/anatomy-of-jwt">Anatomy of a JWT Token</a> – There are a few types of JWTs, but I’ll focus on signed JWTs as they are the most common. A signed JWT may also be called a JWS.</p>
<p>[20220225] <a href="https://engineering.atspotify.com/2013/06/creative-usernames/">Creative Usernames</a> – Spotify’s canonicalisation problem with Unicode.</p>
<p>[20220201] <a href="https://www.lightbluetouchpaper.org/2022/01/19/security-engineering-course/">Security Engineering Course</a></p>
<p>[20220201] <a href="https://blog.forcesunseen.com/a-primer-for-testing-the-security-of-graphql-apis">A Primer for Testing the Security of GraphQL APIs</a></p>
<p>[20220201] <a href="https://www.fastly.com/blog/exploring-the-security-implications-of-graphql">GraphQL Security</a></p>
<p>[20220201] <a href="https://thenewstack.io/zero-trust-time-to-get-rid-of-your-vpn">Zero Trust Time</a> - explanation of what zero trust is</p>
<ul>
<li>Start by inventorying users and their needs, and authenticating them on every request</li>
<li>Then devices and apps.</li>
<li>ZT relies on tokens</li>
<li>ZT systems have IAM engines that validate users &amp; assign tokens, and know what activities are permitted for which users.</li>
</ul>
]]></content>
  </entry>
  <entry>
    <title>Nat&#39;s 2022 Technical Link Pile: SQL Server/Databases</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-sql-server-databases/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-sql-server-databases/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://brandur.org/job-drain">Job Drain Pattern</a> &ndash; we make heavy use of this internally. Cf <a href="https://masstransit-project.com/articles/outbox.html">In-Memory Outbox</a>:  <em>an easy-to-use, reliable solution to perform atomic operations that update a database and send/publish messages, and it works for any database updates that are sent as commands (delivered by durable message queues).</em></p>
<p>[20221231] <a href="https://jezenthomas.com/make-your-database-tables-smaller/">Make Your Database Tables Smaller</a> &ndash; an argument against a Deleted column (namely, it permits partial deleting in a dependency tree, thus breaking foreign keys; and it makes every query more complex because you’re saying AND Deleted IS NOT NULL). <a href="https://brandur.org/fragments/deleted-record-insert">Alternate proposal</a> is to stash deleted rows as JSON in a “deleted rows” table. Different use case than us, though, because we need historic data to be consistent whereas author is only ever caring about current state.</p>
<p>[20221224] <a href="https://matthewmcgiffen.com/2022/12/14/recommended-approach-to-encryption-in-sql-server/">Recommended Approach to Encryption in SQL Server</a> – he’s serialising a book chapter from the looks.</p>
<p>[20221224] <a href="https://www.mssqltips.com/sqlservertip/7484/build-erd-for-database-applications/">ERD Intro</a> – very basic, good for newbies.</p>
<p>[20221224] <a href="https://www.red-gate.com/hub/product-learning/flyway/database-devops-people-processes-tools">Database Devops</a> – what an automated workflow looks like, and how it comes to the manual one.</p>
<p>[20221223] <a href="https://www.liquibase.org/">Liquibase</a> &ndash; open source version control for database schemas with rollback and more.</p>
<p>[20221221] <a href="https://github.com/dbsnapper/dbsnapper">DBSnapper</a> &ndash; for snapshotting and sanitising a database, eg to make test from live.</p>
<p>[20221210] <a href="https://github.com/google/mangle">Mangle</a> &ndash; Google project, a programming language for deductive database programming. It is an extension of Datalog, with various extensions like aggregation, function calls and optional type-checking.</p>
<p>[20221119] <a href="https://www.inkandswitch.com/cambria/">Project Cambria</a> &ndash; <em>an isolated software layer that translates data between schemas on demand. This layer allows developers to maintain strong compatibility with many schema versions without complicating the main codebase. Translation logic is defined by composing bidirectional lenses, a kind of data transformation that can run both forward and backward.</em></p>
<p>[20221119] <a href="https://github.com/cozodb/cozo">cozo</a> &ndash; general-purpose, transactional, relational database that uses Datalog for query, is embeddable, and focuses on graph data and algorithms.</p>
<p>[20221029] <a href="https://electric-sql.com/">Electric SQL</a> &ndash; database for local-first apps that handles replication and schema changes.</p>
<p>[20221029] <a href="https://www.inkandswitch.com/cambria/">Lenses</a> &ndash; central translation layer between schema. </p>
<p>[20221029] <a href="https://www.cidrdb.org/cidr2021/papers/cidr2021_paper17.pdf">Data Lakehouse Paper</a> &ndash; store in column-oriented formats like <a href="https://parquet.apache.org/">Apache Parquet</a>, then provide fast metadata and search on top.</p>
<p>[20221008] <a href="https://semaphoreci.com/blog/database-management">Database Management with CI/CD</a> – <em>Commit database scripts to version control; Use database management tools; Keep changes small; Decouple deployment from data migrations; Set up continuous deployment and migration pipelines; Make migrations additive; Rollback with CI/CD; Don’t do a full backup unless it’s fast; Consider blue-green deployments.</em> And what testing looks like.</p>
<p>[20220910] <a href="https://www.tigerbeetle.com/">TigerBeetle</a> &ndash; an open source accounting-focused database (everything is double entry!).</p>
<p>[20220718] <a href="https://www.mssqltips.com/sqlservertip/7298/tsql-comment-examples/">T-SQL Comments</a> – single line, block, the UI for block comment/uncommenting, and advice on when to comment.</p>
<p>[20220629] <a href="https://architecturenotes.co/things-you-should-know-about-databases/">Things You Should Know About Databases</a> – intro to B+ trees, read types, indexes, etc.</p>
<p>[20220629] <a href="https://github.com/prql/prql">PRQL</a> – Pipelined Relational Query Language, a SQL replacement that understands pipelines, which transpiles to SQL.</p>
<p>[20220629] <a href="https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf">A Relational Model of Data for Large Shared Data Banks</a> – Codd’s 1970 paper establishing relational databases and the set logic behind them.</p>
<p>[20220628] <a href="https://www.dcs.warwick.ac.uk/~hugh/TTM/Missing-info-without-nulls.pdf">How to Handle Missing Information Without Using NULL</a> – what it says on the box (via <a href="https://stackoverflow.com/questions/4336687/how-can-i-avoid-nulls-in-my-database-while-also-representing-missing-data/4358687#4358687">How can I avoid NULLs in my database, while also representing missing data?</a>)</p>
<p>[20220504] <a href="https://david.rothlis.net/declarative-schema-migration-for-sqlite/">Declarative Schema Migration for SQLite</a> – maintain a schema in a file, build a clean DB with that schema, use db’s reflection tools to find columns tables indexes etc and diff against current state, adjust accordingly. <a href="https://news.ycombinator.com/item?id=31249823">Hacker News discussion</a> has experiences of different ways of doing migrations.</p>
<p>[20220324] <a href="https://techcommunity.microsoft.com/t5/modernization-best-practices-and/sql-server-replication-as-a-tool-to-migrate-very-large-databases/ba-p/3161695">Replicating SQL Server</a> – snapshot to file, reconstruct in new server, as way to avoid having to do a full copy over to switch servers.</p>
<p>[20220315] <a href="https://techcommunity.microsoft.com/t5/sql-server-blog/sql-server-i-o-basics-chapter-1/ba-p/3194562">SQL Server I/O Basics</a> – The purpose of this paper is to explain the Input/Output (I/O) requirements for SQL Server database file operations so that vendors and customers can evaluate and adjust their environments to meet the needs of SQL Server. Important   When planning, deploying, and maintaining a Microsoft SQL Server installation, ensure that the I/O system supports all the factors outlined in this article. (<a href="https://techcommunity.microsoft.com/t5/sql-server-blog/sql-server-i-o-basics-chapter-2/ba-p/3194490">Chapter 2</a>)</p>
<p>[20220315] <a href="https://www.mssqltips.com/sqlservertip/7145/sql-date-format-comparison-computed-column-materialized-column/">FORMAT is Expensive</a> – other ways to have custom date formats without the performance hit of FORMAT. Materialising pre-populated column witchcraft.</p>
<p>[20220310] <a href="https://www.sqlservercentral.com/articles/can-we-please-stop-sending-passwords-over-the-wire">SQL Server Sends Passwords in Plaintext</a> – when a database client logs in using SQL Server authentication (as opposed to Windows authentication), it sends the password (over not-necessarily-secure TLS).   </p>
<p>[20220309] <a href="https://sql-performance-explained.com/">SQL Performance Explained</a> – the book, apparently.</p>
<p>[20220309] <a href="https://use-the-index-luke.com/">Use the Index, Luke</a> – free ebook by the guy who wrote “SQL Performance Explained” which really gets you going.</p>
<p>[20220225] <a href="https://www.natemeyvis.com/writing/on-ankis-database-structure/">On Anki&rsquo;s Database Structure</a> – an interesting critique of Anki’s database structure. We could do one for our schema too …</p>
<p>[20220203] <a href="https://www.mssqltips.com/sqlservertip/4485/comparison-of-the-varcharmax-and-varcharn-sql-server-data-types/">varchar(n) vs varchar(max)</a> – max can’t be indexed</p>
<p>[20220203] <a href="https://www.sqlservercentral.com/blogs/how-sql-server-executes-a-query">How SQL Server Executes a Query</a> – this series will be a great introduction to what happens behind the scenes. I like episodes 1 and 2.</p>
<p>[20220202] <a href="https://www.sqlservercentral.com/blogs/data-pages-the-foundation-of-sql-server">Data Pages</a> – 8k, 8096 bytes used for data (rest = header and row index). Possible to waste a lot of space if your records are enormous and don’t fit well into a page.</p>
<p>[20220202] <a href="https://www.mssqltips.com/sqlservertip/7138/learn-cast-sql-function/">Casting</a> – use TRY_CAST or TRY_CONVERT to return NULL if the cast can’t happen. CONVERT lets you specify “style” but fk it’s ugly.</p>
<p>[20220201] <a href="https://www.sqlservercentral.com/articles/performance-tuning-using-free-tools-part-2">SQL Server performance tuning using free tools</a></p>
<p>[20220201] <a href="https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/comparing-guid-and-uniqueidentifier-values">Comparing GUID and uniqueidentifier values</a></p>
<p>[20220201] <a href="https://blog.sqlauthority.com/2021/11/17/detecting-memory-pressure-sql-in-sixty-seconds-186/">Detecting SQL Memory Pressure in 60 Seconds</a></p>
<p>[20220201] <a href="https://www.red-gate.com/simple-talk/databases/sql-server/learn/introduction-to-sql-server-sequence-objects/">Introduction to SQL Server Sequence objects</a></p>
<p>[20220201] <a href="https://www.mssqltips.com/sqlservertip/7050/backup-sql-database-code-ssms-examples/">SQL Server Backup Examples</a></p>
<p>[20220201] <a href="https://www.sqlservercentral.com/articles/sqlfacts-a-free-toolkit-for-sql-server-database-engineers">SQLFacts - a free toolkit for SQL Server database engineers</a></p>
<p>[20220201] <a href="https://www.mssqltips.com/sqlservertip/7024/sql-return-sql-output-clause-stored-procedure/">@return_value in SQL Server stored procedures</a></p>
<p>[20220201] <a href="https://www.mssqltips.com/sqlservertip/7108/sql-server-indirect-checkpoints-why-enable/">Accelerated Data Recovery, checkpoints, SQL Server 2019</a></p>
<p>[20220201] <a href="https://www.mssqltips.com/sqlservertip/7075/sql-for-loop-alternatives/">SQL FOR loop alternatives</a> – how to sin in SQL</p>
<p>[20220201] <a href="https://www.mssqltips.com/sqlservertip/1770/auto-generate-sql-server-update-triggers-for-data-auditing/">Automating triggers for data auditing in SQL Server</a></p>
<p>[20220201] <a href="https://www.sqlservercentral.com/articles/views-in-sql-server-2019-with-ssms">Views in SQL Server 2019</a></p>
<ul>
<li>Indexed view is what I think of as a view (a view with a unique clustered index). It’s as fast as querying a regular table.</li>
</ul>
<p>[20220201] <a href="https://downloads.brentozar.com/CriticalCareSamples/PatientB-SQLCriticalCare-Findings.pdf">SQL Critical Care findings</a> (PDF) – sample diagnoses from customers, including deadlocks.</p>
]]></content>
  </entry>
  <entry>
    <title>Nat’s 2022 Technical Link Pile: Interesting Software</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-interesting-software/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-interesting-software/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://github.com/endbasic/endbasic">EndBasic</a> &ndash; BASIC with cloud, DOS-like GUI. Actively developed.</p>
<p>[20221231] <a href="https://github.com/nikvdp/pbproxy">pbproxy</a> &ndash; <em>send your clipboard anywhere you can ssh.</em></p>
<p>[20221231] <a href="https://github.com/louh/lcars">LCARS</a> &ndash; open source web implementation of the Star Trek UI.</p>
<p>[20221231] <a href="https://github.com/Tencent/vap/blob/master/README_en.md">VAP</a> &ndash; video animation player. Particle effects and transparency on a webpage.</p>
<p>[20221223] <a href="https://rust-lang.github.io/mdBook/">mdBook</a> &ndash; create books with Markdown.</p>
<p>[20221126] <a href="https://github.com/sturdy-dev/semantic-code-search">Semantic Code Search</a> &ndash; ask it things like &lsquo;Where are API requests authenticated?&rsquo;</p>
<p>[20221126] <a href="https://wasmer.io/">wasmer</a> &ndash; an embeddable WASM runtime. </p>
<p>[20221126] <a href="https://github.com/terrastruct/d2">d2</a> &ndash; diagram language and open source diagram generator from it. There a VSCode plugin.</p>
<p>[20221126] <a href="https://hurl.dev/">hurl</a> &ndash; commandline HTTP tool that uses plain text for request and testing.</p>
<p>[20221126] <a href="https://github.com/rhasspy/rhasspy">rhasspy</a> &ndash; open source voice assistant.</p>
<p>[20221119] <a href="https://ananthakumaran.in/2022/11/12/trace-http-requests.html">Using ss and tcpflow to trace HTTP requests</a> &ndash; two very cool commandline tools for understanding what’s speaking HTTP and then looking into the requests and responses.</p>
<p>[20221107] <a href="https://github.com/Permify/permify">permify</a> &ndash; <em>easily structure your authorization model, store authorization data in your own servers securely, and interact with Permify API to handle all authorization questions from any of your applications. Inspired by Google’s Zanzibar.</em></p>
<p>[20221107] <a href="https://github.com/stepci/stepci">stepci</a> &ndash; <em>automate API testing and monitoring.</em></p>
<p>[20221107] <a href="https://github.com/metlo-labs/metlo">metlo</a> &ndash; <em>an open-source security platform. Create an Inventory of all your API Endpoints; Proactively test your APIs before they go into production; Detect API attacks in real time.</em></p>
<p>[20221107] <a href="https://github.com/turbot/steampipe">steampipe</a> &ndash; <em>Use SQL to query cloud infrastructure, SaaS, code, logs, and more.</em></p>
<p>[20221107] <a href="https://github.com/Privado-Inc/privado">privado</a> &ndash; <em>an open-source static code analysis tool to discover data flows in the code. It detects more than 110 personal data elements being processed and further maps the data flow from the point of collection to &ldquo;sinks&rdquo; such as external third parties, databases, logs, and internal APIs.</em></p>
<p>[20221107] <a href="https://www.swarmia.com/blog/managing-complex-business-logic-with-ctes/">Common Table Expressions</a> &ndash; nice, put the SELECT in a string, then you can say “WITH foo as ($sql)” to construct complex queries without repeating yourself.</p>
<p>[20221107] <a href="https://github.com/Sanster/lama-cleaner">lama-cleaner</a> &ndash; <em>a free and open-source inpainting tool powered by SOTA AI model.</em></p>
<p>[20221102] <a href="https://github.com/flawiddsouza/Restfox">Restfox</a> &ndash; “open source PostMan”, aka <em>Offline-first web HTTP client.</em></p>
<p>[20221029] <a href="https://backstage.io/">Backstage</a> &ndash; see the software you own and its status, and prevent orphans.</p>
<p>[20221028] <a href="https://github.com/valeriansaliou/sonic">sonic</a> – <em>a fast, lightweight and schema-less search backend. It ingests search texts and identifier tuples that can then be queried against in a microsecond&rsquo;s time.</em></p>
<p>[20221028] <a href="https://answerdev.pages.dev/">answerdev</a> – <em>Stack Overflow clone.</em></p>
<p>[20221008] <a href="https://github.com/danvergara/dblab">dblab</a> – <em>Interactive client for PostgreSQL, MySQL and SQLite3.</em></p>
<p>[20221008] <a href="https://github.com/tigrisdata/tigris">Tigris</a> – <em>a scalable transactional document store. Perform real-time search across your data stores automatically. Build event-driven apps with real-time event streaming. All provided to you through a unified serverless API enabling you to focus on building applications and stop worrying about the data infrastructure.</em></p>
<p>[20221008] <a href="https://github.com/code-scrap/awesome-tunneling">Awesome Tunneling</a> – list of software that does tunneling. <em>This is primarily targeted toward self-hosters and developers who want to do things like exposing a local webserver via a public domain name, with automatic HTTPS, even if behind a NAT or other restricted network.</em></p>
<p>[20221003] <a href="https://github.com/openshiporg/openship">OpenShip</a> – open source multichannel order fulfilment software.</p>
<p>[20221003] <a href="https://github.com/vitmalina/w2ui">w2ui</a> – <em>UI widgets for modern apps. Data table, forms, toolbars, sidebar, tabs, tooltips, popups. All under 120kb (gzipped).</em></p>
<p>[20220922] <a href="https://libraries.io/">Libraries.io</a> – search open source libraries.</p>
<p>[20220922] <a href="https://github.com/openai/whisper">Whisper</a> – AI text to voice.</p>
<p>[20220921] <a href="https://obsidian.md/">Obsidian</a> – Zettelkasten software.</p>
<p>[20220912] <a href="https://berkeleygraphics.com/typefaces/berkeley-mono/">Berkeley Mono</a> &ndash; typeface that harks back to terminal days.</p>
<p>[20220910] <a href="http://castledb.org/">CastleDB</a> &ndash; structured static database. Everything’s stored as JSON. Use case is game development so you can version control maps, level configuration, etc.</p>
<p>[20220910] <a href="https://jsonhero.io/">JSON Hero</a> &ndash; make JSON actually human-readable. Date previews and all sorts of slickness.</p>
<p>[20220904] <a href="https://github.com/quickwit-oss/quickwit">Quickwit</a> &ndash; <em>a cloud-native search engine for log management &amp; analytics. It is designed to be very cost-effective, easy to operate, and scale to petabytes.</em></p>
<p>[20220902] <a href="https://github.com/AykutSarac/jsoncrack.com">JSON Crack</a> – turn JSON into diagrams.</p>
<p>[20220901] <a href="https://github.com/mintlify/writer">Mintlify Writer</a> &ndash; highlight code and it generates a comment that documents it.</p>
<p>[20220812] <a href="https://github.com/stemrollerapp/stemroller">StemRoller</a> &ndash; extract musical stems from a mixed recording using Facebook’s algorithm</p>
<p>[20220812] <a href="https://github.com/toeverything/AFFiNE">AFFiNE</a> &ndash; open source collab knowledge management</p>
<p>[20220807] <a href="https://cube.dev/">cube.dev</a> – open source headless BI</p>
<p>[20220803] <a href="https://github.com/clientdb/clientdb">clientdb</a> &ndash; <em>an open-source in-memory database for enabling real-time web apps.</em></p>
<p>[20220724] <a href="https://symflower.com/en/">Symflower</a> –  <em>integrates into your development workflow by generating high-coverage unit test suites while you are coding</em>. Basically supports making tests as you code, rather than coming back afterward. So many questions.</p>
<p>[20220721] <a href="https://habitica.com/">Habitica</a> – habit-building software.</p>
<p>[20220718] <a href="https://github.com/zadam/trilium">Trillium</a> – desktop app for hierarchical note taking to form knowledge bases, with sync. Not multiplayer but has versioning and sync so …</p>
<p>[20220524] <a href="https://github.com/Cveinnt/LiveTerm">LiveTerm</a> – <em>build terminal styled websites in minutes!</em></p>
<p>[20220504] <a href="https://www.keycloak.org/">Keycloak</a> – RedHat-sponsored IAM software.</p>
<p>[20220504] <a href="https://github.com/Qovery/replibyte">RepliByte</a> – <em>RepliByte is built to seed a development database with production data. Replibyte helps you to: (1) Create a development dump from production; (2) Subset your production dump into a more reasonable size; (3) Hide sensitive data via customizable Transformers; (4) Make your development dump easily accessible from any remote and local databases.</em></p>
<p>[20220504] <a href="https://hasura.io/">Hasura</a> – expose SQL databases as GraphQL.</p>
<p>[20220421] <a href="https://bubble.io/">Bubble</a> – nocode system.</p>
<p>[20220421] <a href="https://github.com/winfsp/hubfs">hubfs</a> – git repo shows up as a filesystem.</p>
<p>[20220421] <a href="https://github.com/rqlite/rqlite">rqlite</a> – SQLite with RAFT consensus protocol.<em>Uses Raft to achieve consensus across all the instances of the SQLite databases, ensuring that every change made to the system is made to a quorum of SQLite databases, or none at all.</em></p>
<p>[20220421] <a href="https://ydb.tech/">YDB</a> – open-source Distributed SQL Database that combines high availability and scalability with strong consistency and ACID transactions.</p>
<p>[20220421] <a href="https://www.jaegertracing.io/">Jaeger</a> – end-to-end distributed tracing.</p>
<p>[20220404] <a href="https://apisix.apache.org/">APISIX</a> – Apache load balancer for APIs with canary release, circuit breaking, auth, observability, and more.</p>
<p>[20220404] <a href="https://github.com/envkey/envkey">envkey</a> – manage envariables, autoreload servers if the variables change, etc.</p>
<p>[20220404] <a href="https://app.quickdatabasediagrams.com/#/">Quick Database Diagrams</a> – text file DSL generates classic database diagrams.</p>
<p>[20220328] <a href="https://github.com/frain-dev/convoy">Convoy</a> &ndash; fast and secure webhooks service.</p>
<p>[20220323] <a href="https://tailwindcss.com/">Tailwind CSS</a> – CSS framework that had me at “most Tailwind projects ship less than 10kB of CSS to the client.” (Bootstrap was the last CSS I used, so take with grain of salt)</p>
<p>[20220312] <a href="https://github.com/arata-nvm/mitnal">Mitnal</a> &ndash; boot to Twitter (Twitter client for UEFI)</p>
<p>[20220225] <a href="https://blog.marcua.net/2022/02/20/data-diffs-algorithms-for-explaining-what-changed-in-a-dataset.html">Explaining What Changed in a Dataset</a> &ndash; an explanatory diff. </p>
<p>[20220225] <a href="https://github.com/automerge/automerge">automerge</a> &ndash; CRDTs in Javascript</p>
<p>[20220225] <a href="https://jless.io/">jless</a> – command-line JSON viewing/searching tool</p>
<p>[20220224] <a href="https://www.appsmith.com/">AppSmith</a> – another open source RAD system. They’re all hiding authentication and test environments behind enterprise licensing, despite claiming being open source.</p>
<p>[20220224] <a href="https://simonwillison.net/2021/Nov/3/s3-credentials/">s3-credentials</a> – quickly and easily create AWS credentials (an access key and secret key) that have permission to read or write from just a single S3 bucket.</p>
<p>[20220219] <a href="https://github.com/gristlabs/grist-core">Grist</a> &ndash; AirTable-like software</p>
<p>[20220217] <a href="https://websubhub.com/">WebSubHub</a> – a fully compliant <a href="https://www.w3.org/TR/2018/REC-websub-20180123/">WebSub</a> Hub built that you can use to distribute live changes from various publishers. </p>
<p>[20220215] <a href="https://www.nocodb.com/">NocoDB</a> &ndash; open source airtable alternative. Given a database, produces spreadsheet view, kanban, etc. etc. and APIs.</p>
<p>[20220213] <a href="https://github.com/medusajs/medusa">Medusa</a> &ndash; headless ecommerce site engine, aka customers, products, orders.</p>
<p>[20220209] <a href="https://github.com/ToolJet/ToolJet">ToolJet</a> &ndash; open source low code solution for teams to build internal software </p>
<p>[20220209] <a href="https://atlasgo.io/">Atlas</a> &ndash; database schema migration tool</p>
<p>[20220207] <a href="https://webvm.io/">WebVM</a> &ndash; a server-less virtual Linux environment running fully client-side in HTML5/WebAssembly. The closed source piece is <a href="https://leaningtech.com/cheerpx/">the CheerpX virtualization engine</a>.</p>
<p>[20220205] <a href="https://squabble.me/">Squabble</a> – multi-player Wordle royale</p>
<p>[20220205] <a href="https://github.com/casualsnek/cassowary">Cassowary</a> – run Windows software in VMs on Linux and RDP in</p>
<p>[20220202] <a href="https://www.onemodel.app/">OneModel</a> – fast diagramming for engineers</p>
<p>[20220201] <a href="https://github.com/firecracker-microvm/firecracker">Firecracker MicroVM</a> – the tech behind AWS Lambda functions quick startup</p>
<p>[20220131] ​<a href="http://budibase.com">BudiBase</a> &ndash; open source low code platform. Tempting for Middle Earth.</p>
<p>[20220131] <a href="https://github.com/alyssaxuu/omni">omni</a> &ndash; omnibar for the browser for switching, opening, etc. tabs.</p>
<p>[20220131] <a href="https://github.com/ngneat/falso">Falso</a> &ndash; Create massive amounts of fake data in the browser and NodeJS. Tree Shakeable &amp; Fully Typed.</p>
<p>[20220131] <a href="https://github.com/mermaid-js/mermaid">Mermaid</a> &ndash; ASCII diagrams from Markdown</p>
<p>[20220131] <a href="https://fig.io/">Fig</a> &ndash; autocomplete for the terminal</p>
<p>[20220128] <a href="https://github.com/microsoft/playwright">Playwright</a> - a framework for Web Testing and Automation. It allows testing Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.</p>
<p>[20220128] <a href="https://github.com/geoffreylitt/wildcard">Wildcard</a> - hack your browser like you’re in Excel</p>
<p>[20220128] <a href="https://tomcritchlow.com/2022/01/26/electric-tables/">Electric Tables</a> - like a personal link database, but very hackable and in-browser. Nice.</p>
<p>[20220128] <a href="https://zim-wiki.org/">Zim</a> - a desktop wiki</p>
<p>[20220201] <a href="https://www.bookstackapp.com/">Bookstack - open source wiki</a></p>
<ul>
<li>An opinionated hierarchy of Book -&gt; Chapter (Optional) -&gt; Page</li>
<li>Great search</li>
<li>WYSIWYG OR Markdown supported</li>
<li>Great integration into Diagrams.net</li>
</ul>
<p>[20220201] <a href="https://www.xwiki.org/xwiki/bin/view/Main/WebHome">XWiki</a></p>
<p>[20220201] <a href="https://neuml.github.io/txtai/">txtai - semantic search library w/vectors</a></p>
<p>[20220201] <a href="https://github.com/multiprocessio/dsq">dsq - commandline tool for running SQL queries against JSON, CSV, Parquet, etc.</a></p>
<p>[20220201] <a href="https://haystack.deepset.ai/overview/intro">Haystack - open source framework for building search systems that work intelligently over large document collections</a></p>
<p>[20220201] <a href="https://rakyll.org/shardz/">shardz - sharding coordinator</a></p>
<p>[20220201] <a href="https://github.com/jam-systems/jam">jam - open source clubhouse</a></p>
<p>[20220201] <a href="https://github.com/jbogard/Respawn">Respawn</a> (checkpoint and restore databases during tests)</p>
<p>[20220201] <a href="https://rclone.org/">rclone - mount cloud storage as local filesystem</a></p>
<p>[20220201] <a href="https://deskreen.com/lang-en">Deskreen &ndash; any screen into another monitor</a></p>
<p>[20220201] <a href="https://github.com/tonsky/datascript">Datascript</a> – datalog in the browser</p>
<p>[20220201] <a href="https://github.com/Zettlr/Zettlr">Zettlr</a> &ndash; markdown editor</p>
<p>[20220201] <a href="https://gitlab.com/edouardklein/falsisign">Falsisign</a> - make it look like a PDF has been scanned and signed</p>
<p>[20220201] <a href="https://github.com/nippur72/SqlServerSocket">SqlServerSocket</a> - connect to SQL Server from Dart</p>
<p>[20220201] <a href="https://github.com/stablekernel/aqueduct">Aqueduct</a> - dart HTTP server (archived 2 years ago, ugh)</p>
<p>[20220201] <a href="https://fly.io/">Fly.io</a> - tptachek works there. “Deploy app servers close to your users”</p>
<p>[20220201] <a href="https://docs.retool.com/docs">Retool</a> - app builder, looks real interesting. <a href="https://github.com/tryretool/">deploy on prem with Docker</a> ($ service)</p>
<p>[20220201] <a href="https://github.com/tkellogg/dura">Dura</a> - a background process that watches your Git repositories and commits your uncommitted changes without impacting HEAD, the current branch, or the Git index (staged files). If you ever get into an &ldquo;oh snap!&rdquo; situation where you think you just lost days of work, checkout a dura branch and recover.</p>
<p>[20220201] <a href="https://blog.ndepend.com/abstractness-entering-zone-pain/">NDepend</a> - calculate concreteness and abstraction for your .NET classes</p>
<p>[20220201] <a href="https://duckdb.org/">DuckDB</a> - an in-process SQL OLAP database management system</p>
<p>[20220201] <a href="https://github.com/hotwired/turbo">Turbo</a> - server-rendered applications. Sends HTML over the wire so you write less JS. From Basecamp.</p>
]]></content>
  </entry>
  <entry>
    <title>Nat’s 2022 Technical Link Pile: Random</title>
    <link href="https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-random/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-12-31-nats-2022-technical-link-pile-random/</id>
    <published>2022-12-31T00:00:00Z</published>
    <updated>2022-12-31T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>See the <a href="https://nathan.torkington.com/blog/2022/12/30/nats-2022-technical-link-pile-intro/">Intro</a> for context.</p>
<p>[20221231] <a href="https://kottke.org/22/12/36-things-i-learned-in-2022">36 Things I Learned in 2022</a> &ndash; #1 blew my mind: <em>For the first time in history in 2020, the weight of things produced by humans (concrete, metals, plastic) was greater than the weight of the global living biomass.</em></p>
<p>[20221224] <a href="https://www.nature.com/articles/s41467-022-34624-8">Reported Sleep Duration Reveals Segmentation of the Adult Life-course into Three Phases</a> &ndash; <em>early adulthood (19-33yrs), mid-adulthood (34-53yrs), and late adulthood (54+yrs). They appear stable across culture, gender, education and other demographics.</em> </p>
<p>[20221223] <a href="https://podcast.adobe.com/enhance">Adobe Enhance</a> &ndash; free tool to clean up recorded voices.</p>
<p>[20221223] <a href="https://blog.trailofbits.com/2022/12/20/process-reparenting-microsoft-windows/">Process Reparenting in Windows</a> &ndash; fascinating technical discussion that roams through undocumented APIs and OS data structures to be able to explain how Windows fires up a new process and sometimes leaves very worrying kernel traces.</p>
<p>[20221221] <a href="https://web.law.duke.edu/cspd/publicdomainday/2023/">Public Domain Day 2023</a> &ndash; I’m so happy I’ve lived to a time when the material entering the public domain is good! AA Milne, Conan Doyle, Hemingway, Agatha Christie, Kafka, Metropolis, The Jazz Singer, Hitchcock’s first thriller, Laurel and Hardy, Irving Berlin, Bessie Smith, Duke Ellington.</p>
<p>[20221210] <a href="http://kehang.github.io/iot/2022/11/25/a-desk-with-its-own-schedule/">A Desk with its Own Schedule</a> – don’t leave it to your better self to decide to stand.</p>
<p>[20221210] <a href="https://old.reddit.com/r/devops/comments/yysvs5/livenationticketmaster_architecture/">TicketMaster Built on VAX Architecture</a> – <em>the load during onsales is immense. Years ago we did an experiment to write a ticketing system in pure C. There were several locking issues among an inability to advance a stack pointer fast enough.</em></p>
<p>[20221210] <a href="https://jfm.carcosa.net/blog/computing/usenet/">Some Thoughts on Social Networking and Usenet</a> – <em>Usenet clients mostly worked on the assumption that you wanted to read new news, that you haven’t seen, and that if you wanted to go back and read older things, then you could.[&hellip;] Contrast current social media, including the fediverse. Most sites have an endless scroll, and if you keep scrolling for long enough, you will come down to things you have already seen. Typically there will be no indication that they are something you have already seen; you just have to remember that you’ve seen them before.</em></p>
<p>[20221210] <a href="https://alexwlchan.net/a-plumbers-guide-to-git/">Plumber&rsquo;s Guide to Git</a> – git is blobs and trees, and this “how it really works” is a straightforward guide to making sense of git.</p>
<p>[20221210] <a href="https://tylercipriani.com/blog/2022/11/19/git-notes-gits-coolest-most-unloved-feature/">Git Notes</a> – little-known git feature (dropped by github) for attaching arbitrary text into a commit.</p>
<p>[20221126] <a href="https://medium.com/airbnb-engineering/how-ai-text-generation-models-are-reshaping-customer-support-at-airbnb-a851db0b4fa3">How AI Text Generation Models Are Reshaping Customer Support at Airbnb</a> &ndash; interesting to see prompt engineering used in the wild.</p>
<p>[20221126] <a href="https://twitter.com/_mg_/status/1426753216562089991">One-Time Fuses</a> &ndash; used in Christmas tree lights and secure hardware.</p>
<p>[20221126] <a href="https://ooh.directory/">ooh.directory</a> &ndash; a blog catalog.</p>
<p>[20221126] <a href="https://quoteinvestigator.com/2014/01/12/history-rhymes/">History Doesn&rsquo;t Repeat, But It Does Rhyme</a> &ndash; first formulation of this is 1965 from a psychoanalyst Theodor Reik. Not Mark Twain or any else to whom it was credited.</p>
<p>[20221126] <a href="https://stackoverflow.blog/2022/11/23/why-writing-by-hand-is-still-the-best-way-to-retain-information/">Writing by Hand is Still the Best Way to Retain Information</a> &ndash; <em>Although typing notes can be useful and even faster for some note-takers, ultimately it does not have the cognitive, tactile, memory, or visual cognitive effects that people can get when they write by hand. Typing notes can be good, but it won’t make it easier to remember what was said later on.</em> </p>
<p>[20221126] <a href="https://diataxis.fr/">Diátaxis</a> &ndash; a documentation framework that divides docs into Tutorials, How-To Guides, Explanations, and Reference. Each have a different use, different purpose, and different creation.</p>
<p>[20221126] <a href="https://www.rfc-editor.org/rfc/rfc1855">RFC 1855</a> &ndash; 1995 Netiquette. Everything from UPPERCASE IS SHOUTING through “If a person doesn&rsquo;t respond you might try another tty. Use finger to determine which are open. If the person still doesn&rsquo;t respond, do not continue to send.” Which is advice for a long-gone Unix protocol called <em>talk</em>. Also, it has two spaces after every full-stop.</p>
<p>[20221119] <a href="https://github.com/dtinth/comic-mono-font">Comic Mono Font</a> &ndash; Comic Sans as a monospaced font, suitable for code.</p>
<p>[20221119] <a href="https://www.netmeister.org/blog/epoch.html">Story of the Unix Epoch</a> &ndash;fascinating history of the Unix Epoch time, with diversions into electricity grids (a tick was a cycle on the power grid) and leap seconds (invented after the time epoch).</p>
<p>[20221119] <a href="https://www.inkandswitch.com/potluck/">Potluck</a> &ndash; Turing complete documents</p>
<p>[20221119] <a href="https://www.emacswiki.org/emacs/EmacsStories">German Air Traffic Control Depended on Emacs</a> &ndash; great story.</p>
<p>[20221102] <a href="https://austinhenley.com/blog/experienceversusskill.html">Does Experience Matter</a> &ndash; no, didn’t improve results on tests.</p>
<p>[20221102] <a href="https://github.com/CrazyPython/gpt3-cli">gpt3-cli</a> &ndash; cli (in python) for GPT3.</p>
<p>[20221102] <a href="https://waxy.org/2022/11/invasive-diffusion-how-one-unwilling-illustrator-found-herself-turned-into-an-ai-model/">Invasive Diffusion</a> &ndash; pointers to How To for style transfer.</p>
<p>[20221008] <a href="https://petevilter.me/post/datalog-typechecking/">Codebase as Database</a> – using Datalog to query your codebase. </p>
<p>[20220919] <a href="https://wiesmann.codiferes.net/wordpress/archives/22201">Falsehoods Programmers Believe About Retail</a> – omg 2 SKUs can = a single product. How do you have a data model that isn’t RDF?</p>
<p>[20220901] <a href="http://dcntp.org//uploads/2015/03/Readiness_for_change.pdf">SCARF: A Brain-Based Model for Collaborating with and Influencing Others</a> &ndash; Status, Certainty, Autonomy, Relatedness, and Fairness.</p>
<p>[20220804] <a href="https://tls13.xargs.org/">The Illustrated TLS 1.3 Connection</a> &ndash; phase by phase, what each step of the connection is.</p>
<p>[20220804] <a href="https://waf.cs.illinois.edu/visualizations/Perception-of-Probability-Words/">Perception of Probability Words</a> &ndash; the inter-quartile range of “we believe” is 40% to 100%. Helps you calibrate your use of the words by understanding how people will perceive your statements.</p>
<p>[20220728] <a href="https://ruthcohnmft.com/relationship-couples/amending-our-process-crafting-apologies-that-heal/">Apologies that Heal</a> – five ways to apologise, different people need different types: <em>expressing regret; accepting responsibility; making restitution; repentance/commitment to change; asking for forgiveness</em>. Has examples of language of each.</p>
<p>[20220724] <a href="https://usborne.com/nz/books/computer-and-coding-books">Usborne Coding Books</a> – nostalgia.</p>
<p>[20220719] <a href="https://devblogs.microsoft.com/oldnewthing/20220628-00/?p=106798">Inside Baseball</a> – Microsoft’s term for intra-company jargon. E.g., we might draw a distinction between Resolved and Closed on tasks, but customer doesn’t know or care about that distinction.</p>
<p>[20220718] <a href="https://www.arvindguptatoys.com/arvindgupta/bookofexpts.pdf">Book of Experiments</a> – fun with kids. See also <a href="https://www.gutenberg.org/ebooks/12655">The Boy Mechanic Vol I</a> and <a href="https://www.gutenberg.org/ebooks/44585">The Boy Mechanic Vol II</a> and <a href="https://www.gutenberg.org/ebooks/63207">The Boy Electrician</a> and <a href="https://archive.org/details/GoldenBookOfChemistryExperiments">The Golden Book of Chemistry Experiments</a>. </p>
<p>[20220718] <a href="https://axle.design/a-systems-model-of-anxiety-driven-procrastination">A Systems Model of Anxiety-Driven Procrastination</a> – anxiety and overwhelm form a feedback loop. Eliminating distractions doesn’t stop the loop. You need to find ways to push through: break down into smaller chunks, discover the purpose. Acknowledge the anxiety and reduce overwhelm.</p>
<p>[20220629] <a href="https://arxiv.org/abs/2206.13446">Pen and Paper Exercises in Machine Learning</a> – The exercises are on the following topics: linear algebra, optimisation, directed graphical models, undirected graphical models, expressive power of graphical models, factor graphs and message passing, inference for hidden Markov models, model-based learning (including ICA and unnormalised models), sampling and Monte-Carlo integration, and variational inference.</p>
<p>[20220629] <a href="https://backintelligence.com/how-to-fix-forward-head-posture/">Fixing Head-Forward Posture</a> &ndash; explanation of the biology, and five stretches that help.</p>
<p>[20220529] <a href="https://www.withcardinal.com/blog/2022-05-10-the-difficulty-of-dms">The Difficulty of DMs</a> &ndash; arguing against a company communicating in DMs.</p>
<p>[20220528] <a href="https://web.archive.org/web/20130413172018/https://thinkpurpose.com/2013/04/08/101-tactics-for-revolutionaries/">101 Tactics for Revolutionaries</a> &ndash; <em>​​become known as “the guy who…” so when the time is right, everyone knows there’s a guy who… ; realise there are no rules, you can do what you like; don’t try and do it unless you’d do it for free. They couldn’t pay you enough.; don’t call it anything. If it has a name, people, including you, will waste time arguing what it is and isn’t; call it something. Otherwise nobody can ever talk about it; learn to sell people the problem, not the solution. People buy because they have a problem.</em></p>
<p>[20220526] <a href="https://github.com/penk/MainboardTerminal">MainboardTerminal</a> – a retro-style computer with a modern core.</p>
<p>[20220526] <a href="https://github.com/brickbots/framedeck">Framedeck</a> – a cyberdeck with the framework mainboard.</p>
<p>[20220524] <a href="https://arxiv.org/abs/2205.09337">Deep Learning in Business Analytics: A Clash of Expectations and Reality</a> – <em>the adoption of deep learning is not only affected by computational complexity, lacking big data architecture, lack of transparency (black-box), and skill shortage, but also by the fact that DL does not outperform traditional ML models in the case of structured datasets with fixed-length feature vectors.</em></p>
<p>[20220524] <a href="https://www.youtube.com/watch?v=vtIzMaLkCaM">The Craft of Writing Effectively</a> – it’s about the reader. “Every word should create value for the reader”. Academic research and publishing needs the reader to believe that it has value.</p>
<p>[20220504] <a href="https://torrentfreak.com/russian-cinemas-are-showing-pirated-movies-downloaded-from-torrents-220502/">Russian Cinemas Showing Torrents</a> – Western companies have pulled Russian distribution of their products, and Russian cinemas are responding by screening torrents of Western movies.</p>
<p>[20220504] <a href="https://www.heinrichhartmann.com/posts/writing/">Writing for Engineers</a> – good advice about the why and how of writing. Not so much about how to write good English, for which I always recommend <a href="https://www.amazon.com/BUGS-Writing-Revised-Guide-Debugging/dp/020137921X">Bugs in Writing: A Guide to Debugging Your Prose</a>.</p>
<p>[20220502] <a href="https://kk.org/thetechnium/103-bits-of-advice-i-wish-i-had-known/">103 Bits of Advice I Wish I Had Known</a> – not all are obvious. <em>Take note if you find yourself wondering “Where is my good knife? Or, where is my good pen?” That means you have bad ones. Get rid of those.</em> and <em>You can be whatever you want, so be the person who ends meetings early.</em></p>
<p>[20220422] <a href="https://jessicamayzwaan.medium.com/the-legal-implications-of-remote-working-cross-border-64904d274c0d">Cross Border Employment</a> – legal issues around remote workers.</p>
<p>[20220404] <a href="https://aschmelyun.com/blog/i-built-a-receipt-printer-for-github-issues/">Printer for GitHub Issues</a> – uses a receipt printer and a Raspberry Pi.</p>
<p>[20220311] <a href="https://patrickcollison.com/questions">Questions That Interest Me</a> &ndash; Why are certain things getting so much more expensive? Why do there seem to be more examples of rapidly-completed major projects in the past than the present? Why is GDP growth so weirdly constant? How do you ensure an adequate replacement rate in systems that have no natural way to die? How do we help more experimental cities get started? How do people decide to make major life changes? Why are there so many successful startups in Stockholm? Is Bloom&rsquo;s &ldquo;Two Sigma&rdquo; phenomenon real? If so, what do we do about it? How can we better understand the dynamics of progress in science? Will end-user applications ever be truly programmable? If so, how? What&rsquo;s the successor to the book? And how could books be improved? What&rsquo;s the successor to the scientific paper and the scientific journal? What&rsquo;s the right way to understand and model personality? Could there be more good blogs? Why are programming environments still so primitive? What does religion cause? Why is there no canon for life&rsquo;s most important questions? Why are so many things so much nicer in Switzerland and Japan? Why isn&rsquo;t China (yet) producing a lot of top-tier research? Why don&rsquo;t we build nice neighborhoods any more? What influences when people act in accordance with their self-interest and when they don&rsquo;t? What&rsquo;s going on with infrastructure? Why did climatic variability suddenly decline in the Holocene period? </p>
<p>[20220310] <a href="https://en.wikipedia.org/wiki/Kettle_logic">Kettle Logic</a> – accused of stealing a kettle, the defense is “I returned it undamaged; it was damaged when I got it; I never took it in the first place.” Multiple contradictory arguments to defend a point = kettle logic.</p>
<p>[20220306] <a href="http://www.georgehart.com/bagel/bagel.html">How to Slice a Bagel into Two Linked Halves</a> &ndash; has more surface area than a straight cut so you get more cream cheese per bagel.</p>
<p>[20220306] <a href="https://news.ycombinator.com/item?id=30541829">Hoare and Knuth Quote Story</a> &ndash; Knuth did say it originally, but Hoare repeated it (in writing), properly attributing it to Knuth. Knuth then read Hoare&rsquo;s quote, missed the attribution, forgot that he was the one who said it, and repeated it again in writing, mis-attributing it to Hoare. The quote: “premature optimization is the root of all evil.”</p>
<p>[20220225] <a href="https://docs.google.com/presentation/d/16KCzdAoJfdlsnucR9MkUzjJZ2sgQijUs/edit#slide=id.p1">Figureheads, Factions, and Fictions</a> &ndash; Auckland U research into mis/dis info and protests.</p>
<p>[20220222] <a href="https://twitter.com/ctford/status/1495687932023349248">Designing the New Way</a> &ndash; Ask anyone in a complex organisation if there is a way to improve effectiveness they will almost always have an answer and it will almost always start with constructing an enormous pyramid of human skulls atop which they and the practitioners of their discipline sit atop as gods.</p>
<p>[20220219] <a href="https://news.ycombinator.com/item?id=30394662">MLPOS</a> &ndash; Market Leading Piece of Shit, eg Jira.</p>
<p>[20220219] <a href="https://tedgioia.substack.com/p/how-to-commit-murder-inside-a-locked">Locked Room Mysteries</a> – the Michael Jordan of the genre, John Dickson Carr. Hated math, there’s a story about him punching a friend just for using the word <em>algebra</em>. Carr got his publishing contract by wagering a dinner that the CEO of Harper &amp; Brothers couldn’t guess whodunnit. The final ⅓ of his book came in a paper wrapper with a promise to refund purchase price if it was unopened.</p>
<p>[20220218] <a href="http://rbth.com/arts/2013/11/29/ten_reasons_why_russians_dont_smile_much_31259">Russian Smiles</a> – far more than you wanted to know about Russians and (not) smiling.qa</p>
<p>[20220217] <a href="https://www.dylanbarth.com/blog/early-engineer/">Tales of an Early Engineer</a> – if you were looking at the team and the company today, you would be forgiven for believing that we knew what we were doing all along. You&rsquo;d also definitely have trouble imagining just how fragile and humble things in the early days were.</p>
<p>[20220217] <a href="https://pubmed.ncbi.nlm.nih.gov/34516957/">Acute aerobic exercise to recover from mental exhaustion - a randomized controlled trial</a> – The empirical results showed that moderate aerobic exercise led to a better recovery for cognitive flexibility (mean difference divided by pooled standard deviation, Cohen&rsquo;s d= 0.737), mood (d= 0.405), tiredness (d= 0.480), self-perceived cognitive capacity (d= 0.214), and motivation (d= 0.524) compared to active control treatment. Moderate aerobic exercise was also more effective than passive control treatment (d= 0.102 - 0.286) with the exemption of tiredness (d= 0.015) and restlessness (d = -0.473).</p>
<p>[20220217] <a href="https://www.theonion.com/man-lives-in-futuristic-sci-fi-world-where-all-his-inte-1819571673">Man Lives In Futuristic Sci-Fi World Where All His Interactions Take Place In Cyberspace</a> – brilliant.</p>
<p>[20220216] <a href="https://news.ycombinator.com/item?id=30339660">Mr Mouse and Mr Owl Situations</a> – &ldquo;no idea what mr mouse&rsquo;s problem is, mr owl has never done a thing to me&rdquo;.</p>
<p>[20220216] <a href="https://github.com/cryptohymnologist/Hackers">Hackers Card Game</a> – print it yourself card game.</p>
<p>[20220214] <a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2856359">Intergenerational Mobility in the Very Long Run</a> – Hungary: Family status held up under both Communists &amp; capitalists. Florence: Being a descendant of a family with high income in the FIFTEENTH CENTURY means you have significantly higher income today. (via <a href="https://twitter.com/emollick/status/1491603592515624960">Twitter</a>)</p>
<p>[20220213] <a href="https://github.com/joaomilho/Enterprise">Enterprise Programming Language</a> &ndash; humour, or is it?</p>
<p>[20220213] <a href="https://twitter.com/G_S_Bhogal/status/1492255274085851136">25 Mental Models</a> &ndash; “problem selling” is great.</p>
<p>[20220213] <a href="https://blog.dshr.org/2022/02/ee380-talk.html">Amazingly Detailed Cryptocurrency Is Bullshit</a> &ndash; &ldquo;Cryptocurrencies&rsquo; roots lie deep in the libertarian culture of Silicon Valley and the cypherpunks. Libertarianism&rsquo;s attraction is based on ignoring externalities, and cryptocurrencies are no exception.&rdquo;</p>
<p>[20220209] <a href="https://en.wikipedia.org/wiki/Ostrich_algorithm">The Ostrich Algorithm</a> &ndash; a strategy of ignoring potential problems on the basis that they may be exceedingly rare. It is named after the ostrich effect which is defined as &ldquo;to stick one&rsquo;s head in the sand and pretend there is no problem&rdquo;. It is used when it is more cost-effective to allow the problem to occur than to attempt its prevention.</p>
<p>[20220209] <a href="https://imightbewrong.substack.com/p/joel-coens-the-tragedy-of-macbeth">Ethan Coen Reviews Joel Cohen&rsquo;s Macbeth</a> &ndash; hilarious (not actually by Ethan, alas, just good comedy)</p>
<p>[20220209] <a href="https://archive.fo/b7IFp">Tim O&rsquo;Reilly on Web3</a> &ndash;  I don’t think we’re going to be able to call Web3 “Web3” until after the crypto bust. Because only then will we get to see what’s stuck around. I like to contrast the betting economy and the operating economy. The operating economy is the one that delivers goods and services and people pay for them. And the betting economy is where you guess at what the value might be, or what other people think it might be.</p>
<p>[20220209] <a href="https://buttondown.email/hillelwayne/archive/why-you-should-read-data-and-reality/">Data and Reality</a> &ndash; tease of an interesting book (from 1978!) on data modelling</p>
<p>[20220207] <a href="https://sqlpd.com/">SQL Police Department</a> &ndash; solve crimes, learn SQL.</p>
<p>[20220207] <a href="https://www.amazon.com/Treatise-Northern-Ireland-III-Confederation/dp/0198869797">A Treatise on Northern Ireland, volume 3, Consociation and Confederation</a> &ndash; one statistic stands out from a census comparison from the first decade of the twenty-first century.  Just 2.1 percent of the population in Northern Ireland were born in the South, and just 1.3 percent living in the South were born in the North.</p>
<p>[20220207] <a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4427060/">The Integrative Role of the Sigh in Psychology, Physiology, Pathology, and Neurobiology</a> &ndash; Increased breathing irregularity may provoke excessive sighing and hyperarousal, a behavioral sequence that may play a role in panic disorders.</p>
<p>[20220207] <a href="https://www.nature.com/articles/s41598-022-05605-0">Reading on a smartphone affects sigh generation, brain activity, and comprehension</a> &ndash; reading on a smartphone affected sigh frequency but not normal breathing, suggesting that normal breathing and sigh generation are mediated by pathways differentially influenced by the visual environment. A path analysis suggests that the interactive relationship between sigh inhibition and overactivity in the prefrontal cortex causes comprehension decline. </p>
<p>[20220207] <a href="https://www.nature.com/articles/d41586-022-00214-3">Omicron and Immunity</a> &ndash; a really understandable intro to how immunity works, in the context of Omicron.</p>
<p>[20220207] <a href="https://www.sambrenner.xyz/stubborn-attachments-is-a-book-about-uncertainty-2/">Stubborn Attachments review</a> &ndash; What other Most Important Priorities have you read about which give the average person a substantial role to play in the most important tasks ahead of us? What a rare thing! Everyone can be a steward of the glorious and wealthy future: everyone who upholds norms and keeps society a little more functional, everyone who makes a couple clever optimizations, everyone who safeguards some knowledge and passes it down to someone who can make more and better use of it, everyone who raises strong and capable and moral children. All of these are crucial tasks that can be fulfilled by a huge swath of the population.</p>
<p>[20220206] The Virtual Sales Handbook &ndash; you might check at the end for Completion (anything left to say), Alignment (everyone happy with where we got to), Next Steps, and Value (what are you taking away from this so far?).</p>
<p>[20220205] <a href="https://www.welcomelawfirm.com/blog/where-americans-are-born/">Where Americans Were Born</a> – 14% 1st gen immigrant, 28% born in US but now living in a different state, 58% living in same state they were born in (!). Only slightly changed from 1850 when it was 11/23/66% instead of 14/28/58. 70s had immigration low (5% born outside the country), 1940 was peak “living in the same state you were born in”.</p>
<p>[20220205] <a href="https://arxiv.org/abs/2202.01197">Learning What You Don&rsquo;t Know by Virtual Outlier Synthesis (VOS)</a> – training a neural network to say “I don’t know” instead of guessing when it has no idea.</p>
<p>[20220205] <a href="https://news.ycombinator.com/item?id=30211985">The Website is Down</a> – so many reasons why it might be unavailable to the user</p>
<p>[20220203] <a href="https://medium.com/uxr-microsoft/how-to-not-get-lost-structuring-your-first-foundational-research-24b0852af29">How to not get lost in your first foundational research</a> – what I wish I’d had.</p>
<p>[20220202] <a href="https://tnsr.org/2020/02/coercion-theory-a-basic-introduction-for-practitioners/">Coercion Theory: A Basic Introduction for Practitioners</a> – By its nature, coercion requires a decision by the actor being coerced, thus placing the outcome in the actor’s hands. But coercion, especially compellence, is difficult, and provides no guarantee of success — not even to very powerful actors. Reviewing five empirical studies of coercion, Downes concludes that compellence succeeds only about percent of the time. Actors can deter by threat of punishment or by threat of denial. It is never clear whether the absence of an attack is due to an enemy giving in to a deterrent threat. This ambiguity enables enemies who have been deterred to save face. Because compellence is active in ways that deterrence is not — the target state must perform an act rather than simply refrain from one — it is clear to all when compellence is successful. Moreover, the actor being compelled is usually being forced into some degree of humiliation. When it comes to timing deterrence can be indefinite while compellence, by contrast, must be definite – if compliance is being demanded, then how much, and for how long? The target state must be convinced that if it resists it will suffer, but if it concedes it will not. If it suffers either way, or if it has already suffered all it can, then it will not concede and coercion will fail. In general, Pape’s work found that punishment, risk, and decapitation all have problems as methods of aerial coercion. Leaders attached to a particular stake are often willing to pass the pain on to their populations in order to protect the survival of the regime. Since World War I, no industrial nation has been able to fight a peer competitor successfully without the ability to largely control its own airspace and contest enemy airspace.</p>
<p>[20220202] <a href="https://news.ycombinator.com/item?id=30163112">How to Explain an Idea</a> – A simple trick I once learned is to structure the explanation into four parts, with one sentence for each part: (1) state the problem, (2) state the consequences of the problem, (3) state the solution, (4) state the consequences of the solution. Since the explanation now automatically includes both the problem and the solution, it usually is both more compelling and easier to understand. Followup: This is succinctly captured by a phrase from the video game industry: &ldquo;Show locked doors before you show a key&rdquo;.</p>
<p>[20220201] <a href="https://oceana.org/marine-life/giant-pyrosome/">Giant Pyrosome</a> – clones related to salps that form an organism that’s a chordate (has a spine). Yow.</p>
<p>[20220201] <a href="https://www.askamanager.org/2022/01/the-new-hire-who-showed-up-is-not-the-same-person-we-interviewed.html">The New Hire Who Showed Up Is Not The Same Person We Interviewed</a> – wow.</p>
<p>[20220131] <a href="https://blog.darrien.dev/posts/you-dont-know-gif/">You Don&rsquo;t Know GIF</a> &ndash; far more than you ever wanted to know about the GIF format.</p>
<p>[20220131] <a href="https://www.lfenergy.org/projects/everest/">EVerest</a> &ndash; EV charging software stack.</p>
<p>[20220131] <a href="https://blog.pragmaticengineer.com/becoming-a-better-writer-in-tech/">Become a better writer in tech</a> &ndash; “ask directed questions” is the best advice.</p>
<p>[20220131] <a href="https://arstechnica.com/tech-policy/2022/01/chip-shortage-has-canon-telling-customers-how-to-skirt-its-printer-toner-drm/">Canon&rsquo;s telling people how to circumvent their toner DRM</a> &ndash; a shortage of official toner means they have to else customers can’t use their printers</p>
<p>[20220128] <a href="https://www.bookandsword.com/2021/05/08/how-much-did-a-tunic-cost-in-the-roman-empire/">How much did a tunic cost in the Roman Empire?</a> – 6-12 days of labour aka $500-1500 for simple tunic or $7k-21k for finest. “Robber” and “robe” share a common origin because grave robbing for clothes was common practice. Clothing a typical Roman peasant family would take ~3k hours of domestic labour a year every year, most of it devoted to spinning flax. From <a href="https://news.ycombinator.com/item?id=30101404">HN discussion</a>: “The first engines were atmospheric pressure, e.g. they used a vacuum to work. They were not closed cycle and they did not care about wasting water seeing as their purpose was to be a water pump. They didn&rsquo;t care about wasting coal as they worked at a coal mine. For the first century of their development they were stuck in the one niche where both the things they required were free.”</p>
<p>[20220128] <a href="https://www.theguardian.com/books/2022/jan/22/its-a-glorified-backpack-of-tubes-and-turbines-dave-eggers-on-jetpacks-and-the-enigma-of-solo-flight">We have jetpacks and we do not care</a> – what it’s like to fly a jetpack</p>
<p>[20220128] <a href="https://www.nickbostrom.com/information-hazards.pdf">Information Hazards: A Typology of Potential Harms from Knowledge</a> - ways in which truth can be harmful.</p>
<p>[20220128] <a href="https://maggieappleton.com/garden-history">A Brief History and Ethos of the Digital Garden</a> - “newly revived philosophy for publishing personal knowledge on the web”.</p>
<p>[20220201] <a href="https://www.military.com/history/militarized-dolphins-protect-almost-quarter-of-us-nuclear-stockpile.html">Militarized Dolphins Protect almost a quarter of us nuclear stockpile</a></p>
<p>[20220201] <a href="https://antigonejournal.com/2021/08/what-romans-found-funny/">What Romans Found Funny</a></p>
<p>[20220201] <a href="https://theconversation.com/how-to-spot-a-conspiracy-theory-when-you-see-one-133574">How to spot a conspiracy theory</a></p>
<p>[20220201] <a href="https://fullstackeconomics.com/why-agatha-christie-could-afford-a-maid-and-a-nanny-but-not-a-car/">Why Agatha Christie could afford a maid and a nanny but not a car</a> – goods have dropped in price while labour has risen in price; “Baumol’s cost disease” = people haven’t become more productive yet their wages are higher.</p>
<p>[20220201] <a href="https://www.pnas.org/content/119/1/e2025334119">Algorithmic Amplification of Politics on Twitter</a></p>
<p>[20220201] <a href="https://twitter.com/SwiftOnSecurity/status/1479921669556817920">Inside a Boeing 777’s data center</a></p>
<p>[20220201] <a href="https://mwenge.github.io/gridrunner/c64/">Gridrunner (game)</a></p>
<p>[20220201] <a href="https://github.com/cossacklabs/acra">Acra - database encryption at application level</a></p>
<p>[20220201] <a href="https://github.com/mitsuhiko/when">When - timezone utility in the commandline</a></p>
<p>[20220201] <a href="https://venturebeat.com/2022/01/03/30-startups-that-show-how-open-source-ate-the-world-in-2021/">Open source tools from 2021</a> </p>
<p>[20220201] <a href="https://www.youtube.com/watch?v=OjsCEJ8CWlg">Making good pizza</a></p>
<p>[20220201] <a href="https://twitter.com/TylerMahanCoe/status/1481382411988570113">TMC music reccs</a></p>
<p>[20220201] <a href="https://twitter.com/joetracini/status/1481331093269893120">Gymnastic commentary</a></p>
<p>[20220201] <a href="https://www.inverse.com/innovation/blinking-cursor-history">History of the blinking cursor</a></p>
<p>[20220201] <a href="https://theweek.com/culture/books/1007247/neal-stephenson-recommends-6-books-on-information-manipulation">Neal Stephenson&rsquo;s recommended six books on information manipulation</a></p>
<p>[20220201] <a href="https://twitter.com/HardSciFiMovies/status/1481834887242002432">table of lotr</a></p>
<p>[20220201] <a href="https://www.newshub.co.nz/home/new-zealand/2022/01/researcher-urges-kiwis-not-to-stock-up-on-alcohol-as-omicron-outbreak-threat-grows-could-lead-to-increased-consumption.html">Increase alcohol consumption in women under 50 with kids at home during lockdown</a></p>
]]></content>
  </entry>
  <entry>
    <title>Acoustic Bandcamp Recommendations</title>
    <link href="https://nathan.torkington.com/entries/2022-05-02-acoustic-bandcamp-recommendations/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2022-05-02-acoustic-bandcamp-recommendations/</id>
    <published>2022-05-02T00:00:00Z</published>
    <updated>2022-05-02T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>Last updated: 2022-04-10</p>
<p>Bandcamp is a great place to buy music, because most of the money you pays goes straight to the artist. If you buy on a special Bandcamp Friday, then Bandcamp don’t even take their usual commission on the sale &ndash; all the money goes straight to the artist.</p>
<p>I like acoustic stringband music, with or without vocals. I go beyond those boundaries for great music. Here are some sounds you should check out. It’s a mixture of famous and up-and-coming, instrumental and vocal, boundary-pushing and traditionally brilliant.</p>
<p><strong>Molly Tuttle’s Bluegrass Record</strong></p>
<p><a href="https://mollytuttle.bandcamp.com/album/crooked-tree">Crooked Tree</a> is solid gold from Molly Tuttle. She’s assembled an incredible band and they have been just SMASHING it on the road. Finally (Apr 1) the album is out and I am rejoicing! Look for this in the awards season.</p>
<p><strong>Soulful modern acoustic music</strong></p>
<p><a href="https://lonelyheartstringband.bandcamp.com/">The Lonely Heartstring Band</a> got their start playing Beatles covers on bluegrass instruments, and went on to write their own original material. They are my favourite band ever, and they have their early EP (with some of the Beatles covers) as well as their second studio album.</p>
<p><strong>Amazing guitar work</strong> </p>
<p><a href="https://chriseldridge.bandcamp.com/">Julian Lage and Chris Eldridge</a> have a proof-of-concept EP that showcases these two talented guitarists. Lage is from a jazz school, Eldridge from bluegrass. Both are on the cutting edge of what can be done with a flatpick. Their duets and duels are to be savoured. Best with a rye whiskey. <a href="https://lageeldridge.bandcamp.com/">Their later albums</a> are more polished and even more virtuosic.</p>
<p><strong>Old time</strong></p>
<p><a href="https://jakeblountmusic.bandcamp.com/">Jake Blount</a> is a young Black fiddler and banjo player, who specialises in the overlooked black stringband tradition. His music soars and surges with youthful energy and the hunger to be heard of this long-overlooked music.</p>
<p><strong>Bluegrass with a modern twist</strong></p>
<p><a href="https://miletwelve.bandcamp.com/">Mile Twelve</a> are a young bluegrass band out of Cambridge MA, that sound like classic bluegrass for modern ears. They have an album of covers, recorded with special guests that include Billy Strings and Chris Eldridge.</p>
<p><strong>Acoustic covers of music from classic games</strong></p>
<p><a href="https://hitpointsmusic.bandcamp.com/releases">The Hit Points</a> take the tunes you love from games like Final Fantasy, Super Mario World, and Skyrim, and play them beautifully on acoustic instruments. And, because that’s not astonishing enough, they improvise solos in the middle. It’s beautiful music and intense genius. </p>
<p><strong>Queen of the vibe</strong></p>
<p><a href="https://rebfountain.bandcamp.com/">Reb Fountain</a> crafts strong songs and frames her beautiful voice with sparse electric arrangements. She opened for Crowded House on their recent tour, and is going places.</p>
<p><strong>Challenging progressive fiddle</strong></p>
<p><a href="https://johnmailander.bandcamp.com/">John Mailander</a> pushes the boundaries of bluegrass fiddle. He can do tasteful, he can do wild, he can do beautiful, he can defy categorization. His offerings on Bandcamp vary from <a href="https://johnmailander.bandcamp.com/album/walking-distance">delicious modern stringband</a> to <a href="https://johnmailander.bandcamp.com/album/sketches-improvisations-vol-1-july-2020">very experimental jazz</a> that stretched my ears.</p>
<p><strong>Stretching new borders</strong></p>
<p><a href="https://joetroopmusic.bandcamp.com/">Joe Troop</a> is an amazing new talent in traditional music. His regular project is a Grammy-nominated mixture of Latin American music with North American folk styles, and this solo project crackles with the same originality and talent.</p>
<p><strong>Golden voice</strong></p>
<p><a href="https://aoifeodonovan.bandcamp.com/">Aoife O&rsquo;Donovan</a> has the pure and husky voice of a fallen angel. Every note is beautiful, every song a masterpiece. One of our generations finest talents. Her latest is the pandemic processing “Age of Apathy”.</p>
<p><strong>The future of the banjo</strong></p>
<p><a href="https://maxallard.bandcamp.com/">Max Allard</a> is a young Chicago banjo player with an astonishing and original voice. He’s inspired by everything from Japanese game music to the piano of Chilly Gonzales. His music is moody and not at all what you think of when you think “banjo”. But it will be.</p>
<p><strong>Mandolin to stretch your ears</strong></p>
<p><a href="https://ethansetiawan.bandcamp.com/album/flux">Ethan Setiawan</a> is another northeastern prodigy stretching the boundaries of the acoustic instrument. He has several albums that are not only virtuosic but also pleasantly listenable.</p>
<p><strong>Bluegrass from New Zealand</strong></p>
<p><a href="https://pipipickers.bandcamp.com/">The Pipi Pickers</a> is my family band. We play mostly modern (since 1990, lol) bluegrass songs, and we hope that our love of them comes through.</p>
<p><strong>Original old-time fiddle</strong></p>
<p><a href="https://georgejacksonmusic.bandcamp.com/">George Jackson</a> is a gifted fiddler from New Zealand, now living in Nashville. He had a viral hit with the tune ‘Dorrigo’, and has made several albums of excellent original fiddle tunes. </p>
<p><strong>Just because she’s famous doesn’t mean she isn’t exquisitely good</strong></p>
<p>​​<a href="https://phoebebridgers.bandcamp.com/">Phoebe Bridgers</a> sings modern folk pop, has recorded with Taylor Swift, and is exquisitely good. Beautiful voice, magnificent songs, delicious works of art. Start with <a href="https://phoebebridgers.bandcamp.com/track/motion-sickness">Motion Sickness</a> and you won’t stop.</p>
<p><strong>Americana funk</strong></p>
<p><a href="https://twisted-pine.bandcamp.com/">Twisted Pine</a> have pop sensibilities, deep groove, and traditional instruments. It’s a glorious combination. </p>
<p><strong>Epic original newgrass</strong></p>
<p><a href="https://julianpinelli.bandcamp.com/">Julian Pinelli</a> is a fiddle player who studied under a master, and has developed a beautiful and original sound. He surrounded himself with exquisite young talent for this stunning first album. I love it all.</p>
<p><strong>Chambergrass</strong></p>
<p><a href="https://westboundsituation.bandcamp.com/">Westbound Situation</a> plays at the intersection of classical and acoustic stringband music. It’s like chamber music for cello, bass, violin, and banjo. Moving and delightful.</p>
<p><strong>Living master</strong></p>
<p><a href="https://tony-trischka.bandcamp.com/">Tony Trischka</a> defined modern banjo and his album “Territory” makes a strong case that nobody does it better. “Fox Chase” is my favourite track but you can’t go wrong on an album that spans gourd banjo, classic style, and full-on bluegrass bangers.</p>
<p><strong>Modern mandolin</strong></p>
<p><a href="https://thomascassell.bandcamp.com/">Thomas Cassell</a> is a talented young mandolinist who just crushes it. He plays every style and genre, and you can hear him finding his own voice over the course of his albums.</p>
<p><strong>Jazz-infused trio</strong></p>
<p><a href="https://jonstickleytrio.bandcamp.com/">Jon Stickley Trio</a> play at the border of jazz and bluegrass. Fiddle, guitar, and drums use effects to make a bigger and wilder sound than you’d imagine possible with those instruments.</p>
<p><strong>Bold and beautiful new voice</strong></p>
<p><a href="https://sarahjarosz.bandcamp.com/">Sarah Jarosz</a> is a singer and songwriter whose roots are in bluegrass but who now plays with genre as readily as her music plays with our hearts. The commissioned song cycle <a href="https://sarahjarosz.bandcamp.com/album/blue-heron-suite">Blue Heron Suite</a> is a tour de force, but don’t overlook the U2 cover <a href="https://sarahjarosz.bandcamp.com/album/i-still-havent-found-what-im-looking-for-my-future">I Still Haven&rsquo;t Found What I&rsquo;m Looking For</a>.</p>
<p><strong>A Banjo composer</strong></p>
<p><a href="https://benkrakauer.bandcamp.com/releases">Ben Krakauer</a> is an ethnomusicologist who composes for the five-string banjo. His music blends the familiar with the unfamiliar, and is delightful.</p>
<p><strong>Recording lost tunes</strong></p>
<p><a href="https://thejohnhartfordfiddletuneproject.bandcamp.com/releases">The John Hartford Fiddle Tune Project</a> assembles kick-ass musicians to record the fiddle tunes that John Hartford wrote but never recorded. Hartford (who wrote “Gentle On My Mind” and leave a legacy of quirky original bluegrass) left notebooks full of these fiddle tunes and this is the first time any of us have had a chance to hear them.</p>
<p><strong>Unconventional traditions</strong></p>
<p><a href="https://jaymestone.bandcamp.com/">Jayme Stone</a> hit my radar for his sensitive and thoughtful <a href="https://jaymestone.bandcamp.com/album/jayme-stones-lomax-project">Lomax Project</a> but he’s also experimented with lush pop production. Each time there’s a new Jayme album, I don’t know what it’ll be but I do know that I’ll love it.</p>
<p><strong>Powerful new voices</strong></p>
<p><a href="https://hankpattieandthecurrent.bandcamp.com/">Hank, Pattie, and The Current</a> are a North Carolina band that play original contemporary bluegrass, sometimes with an orchestra.</p>
<p><strong>Powerful minimalist folk</strong></p>
<p><a href="https://nadiareid.bandcamp.com/">Nadia Reid</a> uses her guitar, voice, and songwriting skills to great effect. Her most recent release is <a href="https://nadiareid.bandcamp.com/album/out-of-my-province">Out of My Province</a>.</p>
<p><strong>Her Dylan covers will melt your mind</strong></p>
<p><a href="https://emmaswift.bandcamp.com/">Emma Swift</a> recorded an album of Dylan covers, with Patrick Sansone from Wilco and Robyn Hitchcock guesting.</p>
<p><strong>Banjo in unfamiliar genres</strong></p>
<p><a href="https://jakeschepps.bandcamp.com/">Jake Schepps</a>’s output spans bluegrass, <a href="https://jakeschepps.bandcamp.com/album/diabinho-maluco">Brazilian choro</a>, <a href="https://jakeschepps.bandcamp.com/album/erik-saties-gnossiennes">classical</a>, <a href="https://jakeschepps.bandcamp.com/album/romanian-christmas-carols-series-i-bb-67">Romanian Christmas carols</a>, and more. His touch is deft and his taste impeccable. Check out <a href="https://jakeschepps.bandcamp.com/album/entwined">Entwined</a> for “some of the first ever long-form works written by classical composers for the traditional 5-piece bluegrass string band”.</p>
<p><strong>Stretching out</strong></p>
<p><a href="https://youmeeverybody.bandcamp.com/">You, Me, Everybody</a> is the progressive bluegrass band from New Zealand that I play banjo in. We make original bluegrass inspired by Tony Rice, Alison Krauss, and Béla Fleck.</p>
<p><strong>Jazz on bluegrass instruments</strong></p>
<p><a href="https://garrisongordyhargreaveswalsh.bandcamp.com/releases">Bluegrass and the Abstract Truth</a> shoots for the stars and lands somewhere beautiful and challenging. Bluegrass has a history of borrowing from jazz, but here they go full in.</p>
<p><strong>Songs about a modern difficult faith</strong></p>
<p><a href="https://christhile.bandcamp.com/">Chris Thile</a> is simply the best mandolinist alive today, and he has the MacArthur Genius Grant to prove it. During the lockdown he released a song of songs inspired by his challenged Christian faith. (And a solo Bartok piece)</p>
<p><strong>Folk rock for folk to rock out to</strong></p>
<p><a href="https://albiandthewolves.bandcamp.com/">Albi and the Wolves</a> play Mumford and Sons-inspired folk rock. Prodigy fiddle, strong harmonies, and catchy grooves aplenty here.</p>
<p><strong>Old time for the best time</strong></p>
<p><a href="https://allisonandtatiana.bandcamp.com/">Allison de Groot and Tatiana Hargreaves</a> are two young musicians who bring us nontraditional traditions &ndash; music from history that lies outside the white male traditional zone.</p>
<p><strong>Jazz standards on string band instruments</strong></p>
<p><a href="https://jacobjolliff.bandcamp.com/releases">Jacob Jolliff</a> is a devastating mandolin talent who here applies himself to the world of jazz standards. This is that rare album &ndash; mellow and delightful to have in the background, inspiring and infinitely rewarding in the foreground.</p>
<p><strong>Groove to your soul</strong></p>
<p><a href="https://tonyfurtadomusic.bandcamp.com/">Tony Furtado</a> started as a banjo player with a rhythmic right hand, and became a powerful new voice with songs and the slide guitar. He has both guitar and banjo albums here, and all repay your time.</p>
<p><strong>Beautiful voices in glorious original songs</strong></p>
<p><a href="https://thedanberrys.bandcamp.com/">The Danberrys</a> are a husband-and-wife duo with exquisite voices and a taste for songs that move you. Their entire catalog is here, and it’s all mint. Start with <a href="https://thedanberrys.bandcamp.com/album/give-and-receive">Give and Receive</a> but don’t go past <a href="https://thedanberrys.bandcamp.com/album/songs-we-sing">Songs We Sing</a>, which has some beautiful covers of songs you probably already know.</p>
<p><strong>Energetic progressive bluegrass</strong></p>
<p><a href="https://kyletuttle.bandcamp.com/releases">Kyle Tuttle</a> is a banjo player who jams out with the best of them. His recordings will make your body move, and your ears happy.</p>
<p><strong>The GOAT herself</strong></p>
<p><a href="https://gillianwelch.bandcamp.com/music">Gillian Welch</a> has her entire catalogue here. It’s all amazing, but start with <a href="https://gillianwelch.bandcamp.com/album/revival">Revival</a> where she blew everyone away, move to <a href="https://gillianwelch.bandcamp.com/album/time-the-revelator">Time The Revelator</a> which Chris Thile described as “our generation’s White Album”, and then soak in anything.</p>
<p><strong>From Barcelona with love</strong></p>
<p><a href="https://lluisgomez.bandcamp.com/">Lluís Gómez</a> is a Barcelona banjo player. Check out <a href="https://lluisgomez.bandcamp.com/album/flamengrass">Flamengrass</a> for his latest masterpiece, tastefully bringing the distinctive flamenco sounds to the American string band.</p>
<p><strong>Intricate, Inspired, and Infamous</strong></p>
<p><a href="https://punchbrothers.bandcamp.com/">Punch Brothers</a> are individually brilliant and collectively magnificent. Many albums to choose from, all brilliant. Three tracks to see if you’ll like them: <a href="https://punchbrothers.bandcamp.com/track/julep">Julep</a>, <a href="https://punchbrothers.bandcamp.com/track/rye-whiskey">Rye Whiskey</a>, <a href="https://punchbrothers.bandcamp.com/track/three-dots-and-a-dash">Three Dots and a Dash</a>.</p>
<p><strong>Musicians musicians</strong></p>
<p><a href="https://hawktail.bandcamp.com/">Hawktail</a> are the band that, at bluegrass festivals, all the performing artists pile into the front rows to see. Beautifully composed, arranged, and performed music.</p>
<p><strong>Mandolin every day</strong></p>
<p><a href="https://davidbenedict.bandcamp.com/">David Benedict</a> was mandolinist for Mile Twelve (see elsewhere). Clean, precise, profoundly musical, and always interesting instrumental music.</p>
<p><strong>Music for foxes</strong></p>
<p><a href="https://andythorn.bandcamp.com/">Andy Thorn</a> became viral sensation with a clip of him playing music for a wild fox, but he’s been a gifted musician long before that.</p>
<p><strong>Queen of tomorrow</strong></p>
<p><a href="https://sierrahull.bandcamp.com/">Sierra Hull</a> has a pure and powerful voice, often compared to her mentor Alison Krauss. Sierra plays a mean mandolin and writes wonderful songs, and has become a fearless explorer of where those gifts can take her. Start with <a href="https://sierrahull.bandcamp.com/album/weighted-mind">Weighted Mind</a> and compare to <a href="https://sierrahull.bandcamp.com/album/weighted-mind-the-original-sessions">The Original Sessions</a> to hear how much of an effect production can have.</p>
<p><strong>Bubblicious</strong></p>
<p><a href="https://scrogginsandrose.bandcamp.com/">Scroggins and Rose</a> is a duet of Tristan Scroggins on mandolin and Alisa Rose on violin.</p>
<p><strong>Progressive and historic</strong></p>
<p><a href="https://joykillssorrow.bandcamp.com/music">Joy Kills Sorrow</a> haven’t played since 2014 but people are still listening. Pop bluegrass that doesn’t lose musicality in its stretches.</p>
<p><strong>Delightful duo</strong></p>
<p><a href="https://theforeignlanders.bandcamp.com/releases">The Foreign Landers</a> are David on mandolin and Tabitha on banjo. Individually great, together exquisite.</p>
<p><strong>Original jazz done right on bluegrass instruments</strong></p>
<p><a href="https://jeffpicker.bandcamp.com/">Jeff Picker</a> is a jazz-trained bass player whose day job is with the very traditional Ricky Skaggs and Kentucky Thunder. By night he’s been writing jazz and here it is, performed by top-tier talent.</p>
<p><strong>All-American singer-songwriter</strong></p>
<p><a href="https://darrellscott.bandcamp.com/">Darrell Scott</a> is a beautiful original talent. His catalogue here has something for everyone. I discovered him via <a href="https://darrellscott.bandcamp.com/album/real-time">Real Time</a> (duets with Tim O’Brien) but came to appreciate everything he’s done. </p>
<p><strong>Strong young bluegrass talent</strong><a href="https://ajleebluesummit.bandcamp.com/">AJ Lee &amp; Blue Summit</a> are a young Californian bluegrass band. AJ’s divine vocals are ably supported by the rest of this deeply musical band. I love every track.</p>
]]></content>
  </entry>
  <entry>
    <title>5G Public Works Project</title>
    <link href="https://nathan.torkington.com/entries/2020-05-13-5g-public-works-project/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2020-05-13-5g-public-works-project/</id>
    <published>2020-05-13T00:00:00Z</published>
    <updated>2020-05-13T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>I&rsquo;ve seen a few people propose a big government project around 5G mobile technology. I couldn&rsquo;t find more detail to any proposals, so I did my own research to inform my own opinions on what&rsquo;s needed and what&rsquo;s not. I wrote up where I landed so I won&rsquo;t forget it, and I&rsquo;m sharing in case it&rsquo;s useful to you. If you have corrections, etc. please contact me on Twitter as <a href="https://twitter.com/gnat">@gnat</a> or in email (<a href="mailto:nathan@torkington.com">nathan@torkington.com</a>).</p>
<h1 id="abstract">Abstract</h1>
<p>In the runup to the 2017 general election, there was talk of government investment in 5G networks to get greater coverage in rural and remote areas. MBIE canvassed opinion as part of a consultation around spectrum auctions, but took no action. This idea has resurfaced as a Public Works project to “get New Zealand moving again”. This paper is a backgrounder for the issue and decision points.</p>
<h1 id="mobile-technology-a-primer">Mobile Technology: A Primer</h1>
<h2 id="spectrum">Spectrum</h2>
<p>Mobile phones communicate with cell towers using radio waves (often referred to as “spectrum”). Radio waves are identified by their frequency, and different services use different groups of frequencies (“bands”). Lower frequencies travel further.</p>
<p>In New Zealand, spectrum is property. NZG owns rights to the whole spectrum and leases it to companies that want to use it. The commercial terms of the lease are determined at an auction. There are many uses and users of spectrum, not just the largest mobile operators.</p>
<h2 id="generations">Generations</h2>
<p>Mobile technology evolves. Roughly every decade there’s a new generation of technology: 80s = 1G, 90s = 2G, 00s = 3G, 10s = 4G, 20s = 5G. This is partially because of R&amp;D time but also because each generation represents massive capital investment by mobile operators. Each G brings faster downloads, lower power consumption, and more smarts to prevent dropouts, etc.</p>
<p>The technical standard for a generation says how to use spectrum to transfer data, make a call, etc. This standard could theoretically be used on any band of frequencies, but because commodity network technologies like mobile phones require interoperability, the International Telecommunication Union standardises some frequency ranges for each generation. Operators could deploy 5G over the same frequencies that 4G phones are using, but can’t because that band of frequencies is already heavily used.</p>
<h2 id="5g">5G</h2>
<p>There are three relevant new-to-telephony bands of frequencies for 5G in NZ:</p>
<ol>
<li>600MHz, which gives strong signal over long distances. Vodafone <a href="https://www.rsm.govt.nz/assets/Uploads/documents/consultations/2018-preparing-for-5g/d1a9f775f9/303-vodafone-submission-preparing-for-5g.pdf">indicates</a> this will play a role in rural areas, Spark <a href="https://www.rsm.govt.nz/assets/Uploads/documents/consultations/2018-preparing-for-5g/9a6795572d/310-spark-submission-preparing-for-5g.pdf">suggests</a> low-power Internet-of-Things (IOT) networks might operate in this band: “Low-band spectrum such as 600 MHz are likely to be for IoT use cases where large numbers of devices with very wide coverage footprint are required, i.e. for logistics, asset tracking, and smart grid applications. It is only when we get to needing tens of millions of devices that existing LTE and LoRa technologies will have limitations.”</li>
<li>3.5GHz, which has similar signal strength:distance properties as 4G users currently experience. This will be the workhorse in urban and town areas.</li>
<li>26GHz, which travels short distances (&lt;500m) but can carry vast amounts of data. This is foreseen to be useful in shopping centres, convention centres, campuses, stadia, and other high-density gatherings. It’s unclear whether anyone seriously proposes building a high-density network of towers for 26GHz delivery. It could also be used to provide fixed mobile substitution, aka Wireless Fibre, which would allow retail telcos like Spark &amp; Vodafone to provide multi-gigabit home services without having to pay Chorus for fibre.</li>
</ol>
<p><a href="https://www.mbie.govt.nz/dmsdocument/10370-early-access-to-5g-radio-spectrum-proactiverelease-pdf">MBIE has released</a> some 3.5GHz spectrum for operators to experiment with 5G, and there will be more substantial 3.5GHz auctions in the future. Different operators have different rollout priorities: Vodafone signalled 3.5GHz first, then 600MHz, then 26GHz; but Spark signalled 3.5GHz then 26GHz then 600MHz.</p>
<p>Existing towers can be refitted to provide 3.5GHz and 600MHz service. The high-density nature of 26GHz will require new towers or (more likely) deployment of micro-sites in the built infrastructure of the venues being serviced. </p>
<p>There are 3.5GHz handsets on the market, and they’re used in the mobile operators’ trials of 5G. The 600Mhz frequency band hasn’t been blessed by the ITU yet (expected in 2023). There are no 26GHz handsets: only dongles and specialty hardware.</p>
<h2 id="current-structure-of-nzs-mobile-industry">Current Structure of NZ’s Mobile Industry</h2>
<p>There are three players: Spark (41%), Vodafone (36%), 2Degrees (23%). Spark is listed on the NZX. Vodafone is co-owned by Infratil and NYSE-listed Brookfield Asset Management (US PE). 2Degrees is 1% owned by the Hautaki Trust, 26% by Dutch holding company Tesbrit BV, and 73% by TSX-listed Trilogy International Partners (<a href="https://app.companiesoffice.govt.nz/companies/app/ui/pages/companies/7049015/shareholdings">Companies Office)</a>. Vodafone and Spark have strong coverage around New Zealand. 2degrees has built most of their 3G/4G network around urban areas, and in many rural areas roams on Vodafone using 3G.</p>
<p>Each of the three mobile operators have an equal share in a joint venture, the <a href="https://www.thercg.co.nz/">Rural Communications Group</a>. This is a mechanism for building and sharing the physical infrastructure of cell towers. The commercial terms of sharing infrastructure is <a href="https://comcom.govt.nz/regulated-industries/telecommunications/regulated-services/mobile-services/mobile-co-location">set by the Commerce Commission</a>. The RCG deploys shared 4G networks: </p>
<p><em>In August 2017 the Rural Connectivity Group was appointed by the government to be the infrastructure provider to bring 4G mobile and wireless broadband coverage to rural New Zealand under the Rural Broadband Initiative 2 and the Mobile Black Spot fund. The Rural Connectivity Group is an independent entity established to build the infrastructure shared by New Zealand’s three mobile network operators and to operate and maintain the new open access network. In partnership with Crown Infrastructure Partners we will deliver new mobile and wireless broadband coverage to at least 30,000 rural homes and businesses, provide mobile coverage to a further 1000 kilometres of state highways and provide connectivity to at least 90 top New Zealand tourist destinations by December 2022. This critical infrastructure project is funded by the government’s Telecommunications Development Levy, and an additional $75M provided by the three mobile network operators. Crown Infrastructure Partners will manage the distribution of funds to the Rural Connectivity Group. This unique funding model is the only way these modern services can be delivered further into rural New Zealand. (Source: <a href="https://www.thercg.co.nz/">RCG website</a>)</em></p>
<h2 id="ultrafast-broadband">Ultrafast Broadband</h2>
<p>Separate from the mobile networks, <a href="https://en.wikipedia.org/wiki/Ultra-Fast_Broadband">in 2009 the New Zealand Government set up Crown Fibre Holdings</a> (a Crown Entity, now called <a href="https://www.crowninfrastructure.govt.nz/">Crown Infrastructure Partners</a>) to contract with fibre companies to build a fibre network. The goal was fast broadband for most of New Zealand, hence the project name “Ultrafast Broadband”. Chorus won most of the business, with various council and lines company partnerships (“Local Fibre Companies”) accounting for the rest.</p>
<p>Chorus received $929M, 50% as interest-free loans and 50% as the purchase of non-voting shares. LFCs are 50% owned by Crown Fibre and 50% by the other partners.</p>
<p>Chorus operates the fibre infrastructure and has wholesale offerings to Retail Service Providers (RSPs), the companies that then sell Internet access to the public and to customers. The wholesale prices and Chorus ownership (it can’t be owned by an RSP) are the subject of Government regulation. This structure then creates a framework for retail competition resulting in low prices for fast and improving connectivity for customers. Indeed, NZ’s broadband speeds and penetration compare favourably internationally (especially given our population density distribution).</p>
<p>As part of Ultrafast Broadband project, the Rural Broadband Initiative was established. This funds the provision of connectivity (fibre or cellular) to very low-density areas. The RCG was established to implement the cellular portion.</p>
<p>Chorus has proposed it operate NZ’s mobile network infrastructure, by analogy with its fibre operation. Existing mobile operators (who presently own their own infrastructure) have resisted, pointing out that the initial driver of 5G uptake is likely to be replacing fixed-line broadband and this would place Chorus in the position of having to invest in mobile infrastructure that competes with its existing fibre infrastructure. Chorus also owns the legacy copper network, which situation requires large amounts of regulation to maintain consumer benefit.</p>
<h2 id="shared-infrastructure">Shared Infrastructure</h2>
<p>By analogy with the success of Chorus, a Public Works project would seek to contract with an infrastructure operator to erect the cell-towers and backhaul (the connection to the rest of the mobile network, generally fibre).</p>
<p>Active infrastructure does the communicating: antenna (“Radio Access Network”), fibre, and possibly even spectrum. Passive infrastructure is everything else: the radio mast, cabinets, power supply, alarms, etc. There are <a href="http://www.techplayon.com/5g-network-sharing-concept-benefits-and-architectures/">two models</a> for shared infrastructure, corresponding to what is shared: passive and active. Active sharing is what interests us here.</p>
<h2 id="international-active-sharing-relationships">International Active Sharing Relationships</h2>
<p>There are many examples of 3G, <a href="https://www.3gpp.org/news-events/1592-gush">4G</a>, and <a href="https://www.3gpp.org/news-events/1592-gush">5G</a> active sharing in networks around the world. It’s an old and well-established practice. See, for example, <a href="https://www.gsma.com/publicpolicy//uploads/2012/09/Mobile-Infrastructure-sharing.pdf">this GSM Alliance paper on Mobile Infrastructure Sharing</a> (2012). (MNO = Mobile Network Operator)</p>
<p>[A]ll forms of infrastructure sharing are usually characterised by increased efficiency in the use of resources, where capacity exists. [&hellip;] This will have benefits for the wider economy as land is available for other uses, in particular in densely populated areas where little space is available.</p>
<p>Similarly, all forms of infrastructure sharing generally reduce costs and prices to consumers as they reduce the investment lay-out and opex required to provide a given level of service. [&hellip;] Regarding RAN sharing, the cost savings [&hellip;] of up to 30% indicate that prices to consumers are likely to be affected positively through competition. </p>
<p>However, there are very few instances where all the MNOs in a single market share the same infrastructure. New Zealand has broken new ground here with RCG. From <a href="https://www.thercg.co.nz/">the RCG website</a>:</p>
<p><em>Government and industry collaboration will see New Zealand as the first country in the world where all three mobile network operators will share radio access network equipment and one set of antennae on each facility built by the Rural Connectivity Group.</em></p>
<p>Poland is considering a national 5G network (<a href="https://telecoms.com/501903/deep-dive-whats-the-deal-with-network-sharing/">source</a>). There is more work to be done in gathering international comparators.</p>
<h1 id="objectives-of-a-public-works-program">Objectives of a Public Works Program</h1>
<p>While not clearly articulated anywhere, I understand the goals of a 5G Public Works project to be:</p>
<ol>
<li>NZ Government wants to put money into the New Zealand economy to stimulate recovery from the Covid-19 recession;</li>
<li>Citizens want to get better 5G coverage for that money;</li>
<li>The government wants to maintain/improve competition;</li>
<li>Government wants minimum waste (i.e., diversion to shareholder profits) from its investment.</li>
</ol>
<p>Goal (b) implies citizens want the benefits of a 5G rollout, primarily the fast download speeds. Some commentators have also mentioned the intangible value of international visitors being able to use their phones without seeing [LTE] as a marker of previous-generation service.</p>
<p>There is no reason to suggest that commercial self-interest and competition would not drive a successful build-out of 5G in NZ’s urban areas. Existing towers can be repurposed.</p>
<p>There’s also no reason to suspect that operators would rush to deliver 5G to smaller towns and rural areas. Being less densely populated, the commercial return on that infrastructure investment is lower. (This tardiness is what drove the Rural Broadband Initiative). That said, this is an expectation not a guarantee: the UFB and RBI were solutions to problems that were already being felt, whereas a 5G Public Works project would be a pre-emptive action.</p>
<p>This means a Public Works project would be to bring faster mobile data to smaller towns and rural areas faster than competition alone would deliver.</p>
<p>Because 600MHz and 3.5GHz reuses existing 4G infrastructure, this Public Works project will not engage the construction industry during the Covid-19 recession. Instead, the immediate spend will be on equipment from suppliers such as Nokia and Alcatel-Lucent, and the contractors who install it. Building 26GHz would not trigger massive construction either, as it is for dense urban environments, which typically have radio masts on buildings rather than on standalone towers.</p>
<h1 id="implementation">Implementation</h1>
<p>The opportunity here is to accelerate 5G deployment in smaller towns and rural areas. This would mean 3.5GHz upgrades and 600MHz coverage (when it is standardised). The Rural Connectivity Group provides the model for Government-subsidized rural mobile connectivity. The Rural Broadband Initiative is a proven mechanism for influencing mobile deployment.</p>
<p>As with UFB, the implementation of the investment trades the amount of infrastructure built for control over how it is used. Grants maximise amount of infrastructure, whereas direct investment gives control. (<a href="http://researcharchive.vuw.ac.nz/bitstream/handle/10063/2399/thesis.pdf?sequence=1">Carter</a>, 2012).</p>
<p>Implementation decisions:</p>
<ol>
<li>The <strong>ownership</strong> of RCG: currently it’s a partnership of the mobile companies. How would RCG deal with new entrants to the market? What if one mobile company bought another, would that enable it to exploit RCG? It is important to maintain competitiveness in the mobile market.</li>
<li>The <strong>beneficiaries</strong> of the intervention. For which customers is commercial self-interest expected to fail to deliver timely 5G? It’s apparent that major cities will see the first roll-outs. Would this project cover large towns like New Plymouth? Small towns like Warkworth? Rural areas like Whangamomona? Highways between townships like SH38 through Te Urewera. What are the Treaty of Waitangi obligations of such an investment?</li>
</ol>
<p>The first step should be a timeline model of expected 5G rollout from the operators. This would guide the beneficiaries decision. Next, a cost-benefit analysis of RBI-like subsidisation of those beneficiaries’ 5G access. The information from these two activities is needed to form a judgement on advisability and affordability.</p>
<h1 id="dependencies">Dependencies</h1>
<p>Economic development and the mobile operators are not the only concerned parties here.</p>
<ol>
<li><strong>Māori</strong> for whom spectrum remains “an unresolved issue in the Māori-Crown relationship”. More specifically: “A Māori Spectrum Working Group (MSWG) has been formed representing key Māori stakeholders, including Treaty of Waitangi claimants. This group is working jointly with Ministers and officials to explore shared MāoriCrown interests in spectrum. [&hellip;]  Four Waitangi Tribunal claims relating to spectrum have been lodged since 1984 centring on spectrum as a taonga of special value to Māori with the WAI 2224 claim (lodged in 2009) still outstanding.” (<a href="https://www.mbie.govt.nz/dmsdocument/10370-early-access-to-5g-radio-spectrum-proactiverelease-pdf">Cabinet paper</a>, 2019).</li>
<li>The <strong>ITU</strong> is yet to designate the 600MHz band for 5G.</li>
<li><strong>Mobile hardware manufacturers</strong> offer 3.5GHz connectivity, but not 600MHz or 26GHz yet. 600MHz would come after ITU designation. 26GHz may never arrive.</li>
</ol>
<h1 id="acknowledgements">Acknowledgements</h1>
<p>Thanks to <a href="https://jon.brewer.nz">Jon Brewer</a> for technical insight, and <a href="https://internetnz.nz/blogs/james-ting-edwards">James Ting-Edwards</a> for review.</p>
]]></content>
  </entry>
  <entry>
    <title>Joining a startup? Read this.</title>
    <link href="https://nathan.torkington.com/entries/2019-01-23-joining-a-startup-read-this/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2019-01-23-joining-a-startup-read-this/</id>
    <published>2019-01-23T00:00:00Z</published>
    <updated>2019-01-23T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>Here&rsquo;s a braindump of some things I&rsquo;ve learned over the years. Caveat lector: my experiences inform this, and they aren&rsquo;t representative of all the possibilities, etc. Ignore this if you want; I&rsquo;ve been meaning to write some notes for Kiwis or Aussies who are joining startups for the first time, and someone just became my excuse.</p>
<h1 id="maturity">Maturity</h1>
<p>Startups are very immature organisations, unlike a corporate or university &ndash; I always describe it as &ldquo;there&rsquo;s more work to do than there are people to do it&rdquo;. So there&rsquo;s huge opportunity to do stuff you wouldn&rsquo;t ordinarily do, which is great. There&rsquo;s also a lot less support, which can be unnerving. There&rsquo;s nothing preventing you from working super-long hours and burning out, and only your coworkers to notice (HR is almost non-existent in very early stage startups). And even compensation is weird (&ldquo;stock options&rdquo;?) and can bite you if you&rsquo;re not prepared.</p>
<h1 id="startups-have-a-life-cycle">Startups have a life-cycle</h1>
<ul>
<li>First you do R&amp;D until you&rsquo;ve found a product. Then you make and sell lots of that product. A product is something you can make and sell to someone for more than it costs to make it. Startups that have taken investors&rsquo; money typically need to grow to be really big (billion dollar companies!). It&rsquo;s widely reported that it takes seven years for a startup to get to the point where it&rsquo;s considered &ldquo;big&rdquo; (it&rsquo;s worth hundreds of millions of dollars), there just aren&rsquo;t a whole lot (or perhaps any) overnight successes.</li>
<li>The point where you&rsquo;ve found the thing you&rsquo;ll sell lots of, is called &ldquo;product-market fit&rdquo;. There&rsquo;s a good book &ldquo;The Lean Startup&rdquo; that&rsquo;s aimed at software startups, but has some applicability to other aspects. You might enjoy it. It&rsquo;ll certainly help you understand the wider Valley mindset.</li>
<li>R&amp;D is difficult because you don&rsquo;t know how many problems you have to solve before it&rsquo;s viable. Academics know this, I&rsquo;m sure. It&rsquo;s a bigger and riskier roll of the dice for an investor to fund a company that&rsquo;s making something that hasn&rsquo;t been invented yet. Now you have TWO problems: can you do an unknown amount science/engineering to get to something that works and can be mass-made AND can you find a thing that people want to buy.</li>
<li>(Turns out, building something people want to buy is often the harder problem. A business isn&rsquo;t worth much if nobody needs what it is selling.)</li>
<li>Be on the look out for products that aren&rsquo;t the one you thought you were going to build. Sometimes you fail to invent a good glue, but you&rsquo;ve invent Post-It notes. Whether your investors will go for it depends on the investor (&ldquo;hey, we funded an X company, not a Y company!&rdquo;) but generally they&rsquo;ll be happy if they think you&rsquo;ve found a path to a billion-dollar business that doesn&rsquo;t involve them losing their ownership percentage.</li>
<li>The early stage, pre-product-market-fit, is exciting grad school type of thing. The growth stage, once it&rsquo;s got a product and selling gangbusters, is exciting like a rocketship ride. Both are fun, different experiences.</li>
</ul>
<h1 id="startups-attract-interesting-people">Startups attract interesting people</h1>
<ul>
<li>Often your managers have no experience managing people. Or nobody&rsquo;s a manager.</li>
<li>The driven egotist who thinks they can build a company to invent something and take over the world &hellip; is often strong in a few character attributes, but deficient in others. You probably won&rsquo;t discover the deficiencies until you&rsquo;ve been working alongside them.</li>
</ul>
<h1 id="look-after-you">Look after you</h1>
<ul>
<li>There&rsquo;ll be more work to do than people and hours. So you could burn out trying to do it all. But don&rsquo;t, burn out is miserable.</li>
<li>Burn out for most people feels like their seeing the world in grey, nothing is exciting, they feel exhausted all the time, and dark thoughts enter their head.</li>
<li>&ldquo;Passion&rdquo; (believing super-hard in the mission and product of the startup) is a double-edged sword. It helps you work through the inevitable setbacks of invention, but it can lead you to work past the time where you needed a break.</li>
<li>Think about the boundaries that&rsquo;ll be healthy for you. Are you a runner? Climber? Skiier? Reader? Carve time out of your week for the things that recharge you, and do it from the first week you&rsquo;re there. If everyone gets used to you being in the office until 8, leaving at 6 is going to feel like your commitment has changed.</li>
<li>Beware stress-eating.</li>
</ul>
<h1 id="valley-life">Valley Life</h1>
<ul>
<li>Bay Area is slow to get around in. Public transport sucks except in SF proper.</li>
<li>Cars are a trap because of insurance. EVERYONE gives way to pedestrians, without exception, because hitting a pedestrian invites a lawsuit and lawsuits can cost you everything. Make sure you&rsquo;re an insured driver, even if you&rsquo;re just renting a car for a day.</li>
<li>Nobody calls it &ldquo;San Fran&rdquo;. Don&rsquo;t call it &ldquo;Frisco&rdquo; either. Locals say: &ldquo;SF&rdquo; or &ldquo;The Bay Area&rdquo;.</li>
<li>There are HEAPS of meetups and similar groups where you can find like-minded people. If you&rsquo;ve been starved for like-minded people, this can be fun.</li>
<li>Lots of fun outdoor areas for hiking relatively close by. Do check out Yosemite, once the government shutdown has finished and someone&rsquo;s cleaning the toilets again.</li>
<li>They are really precious about their cruelty-free micro-batch all-organic gluten-free locally-produced food. The price is typically proportional to the hyphen count. Prepare for a bunch of &ldquo;gosh, really?&rdquo; moments with the locals.</li>
</ul>
<h1 id="benefits">Benefits</h1>
<ul>
<li>Make sure there&rsquo;s health insurance. I can&rsquo;t imagine a startup that didn&rsquo;t offer it, but holy shit you don&rsquo;t want to get ill in America while uninsured.</li>
<li>Shares are weird. You won&rsquo;t get ACTUAL shares unless you&rsquo;re the founder. Instead, there&rsquo;s an ESOP (Employee Share Option Program) and you get the option to purchase shares. And you don&rsquo;t even get THAT &hellip; after x months working for the company, you then have the right to purchase shares. The purchase price will be low, and after they do work and sell things, the company is worth more so the stock price rises so your &ldquo;can buy for 20c&rdquo; shares are now worth $2 each, say. BUT even then it&rsquo;s not awesome because typically you have a limited period to exercise your options (aka actually buy the shares) once you leave the company. If you don&rsquo;t exercise, then those potential shares of yours go away. So it might cost you $100k or more to keep the shares/options benefit once you leave. This got me once. Negotiate so that your options don&rsquo;t have an expiry date, or have a ridiculously long exercise time like 10 years. This way they can get so big and famous that people will WANT to buy your shares, so you can exercise your options and then sell the shares right away, pocketing the difference as profits.</li>
<li>Do consult an accountant who knows about options in Australian income tax law. You&rsquo;ll be subject to both, thanks to the treaties between the countries. You don&rsquo;t have to pay double tax, that&rsquo;s what the treaty is about, but you&rsquo;ll just want to make sure that getting stock options as part of your compensation doesn&rsquo;t cause problems back home. (And you&rsquo;ll want to know how to exercise those options so that you don&rsquo;t end up losing most of their value to tax, or &ndash;worse!&ndash; paying to buy the options AND then paying tax on the rise in value they have!)</li>
<li>American work years are ridiculously long. Negotiate for a holiday period that you will be happy with, not the Fuck All Weeks that is standard.</li>
</ul>
<p>Good luck and have fun!</p>
]]></content>
  </entry>
  <entry>
    <title>The T in CTO doesn’t stand for Talk</title>
    <link href="https://nathan.torkington.com/entries/2018-08-29-the-t-in-cto-doesnt-stand-for-talk/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2018-08-29-the-t-in-cto-doesnt-stand-for-talk/</id>
    <published>2018-08-29T00:00:00Z</published>
    <updated>2018-08-29T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p><a href="https://thespinoff.co.nz/business/29-08-2018/nz-tech-is-losing-it-over-the-idea-of-derek-handley-as-cto-of-new-zealand/">Looks like NZ will get a CTO real soon now</a>. It&rsquo;s hard to avoid the word &ldquo;debacle&rdquo; in describing how it came about: a false start at making an appointment, a whiff of impropriety in the appointments process that resulted in a Ministerial demotion &hellip;.</p>
<p>This is a shame because there are very real reasons that NZ should be increasing its IT heft in Government. There’s the potential to do a lot of good at the intersection of IT and government: preventing blowouts, giving informed advice to the civil service, and being a trusted advisor to politicians. Other countries are tackling these problems, with and without a person whose job title is CTO.</p>
<p><strong>Preventing blowouts</strong>: in the government version of &ldquo;adding a person to a late project only makes it later&rdquo;, the risk of IT project failure rises with every dollar budgeted. The last government had Treasury monitoring progress of important projects, but that wasn&rsquo;t continued in this administration. Someone with political power needs to be keeping the IT suits honest, be it Treasury or a CTO. In the UK, financial sign-off on large projects only happened when they followed modern risk-minimising practices (i.e. incremental vs big bang, agile vs waterfall, etc.).</p>
<p><strong>Civil Service</strong>: a lot of civil servants are trying to get their heads around the recent flood of technology. It&rsquo;s not easy because Silicon Valley hires a lot of masterful marketing spin doctors to dress their technology in robes of golden bullshit. The policy wonks have told me they need someone on the inside who they can trust, who will help them understand what&rsquo;s possible and when. America has the Office of the CTO which led a bunch of public and behind-the-scenes work on everything from big data to autonomous killing drones, to raise the awareness of the public and of the civil service.</p>
<p><strong>Politicians</strong>: they also need a trusted and informed advisor. They are besieged by lobbyists who feed them plausible stories. Do the claims stack up? Are the promises credible? Ministers are also somewhat at the mercy of their “officials”, the civil servants who help and support a Minister’s office. Ministers need to find their own way of navigating this trust labyrinth, and a CTO could be a bright light in the darkness.</p>
<p><strong>Prototyping</strong>: it’s not a surprise to most people that government adopts technology slowly. This is generally fine, nobody wants their passport application on the dark web because the developers had a fetish for shiny new untested technology. But there’s room within government to apply forward pressure to use newer technology to make government services more responsive and accurate. A handful of departments have labs. Perhaps that forward pressure would be strong with coordination and leadership. Other countries have teams that can act as contract developers, showing how well things *can* be done.</p>
<p>And that’s not including the <strong>bridge role</strong> between private and public sector that Rod Drury and others were talking about. Government can affect the deployment of technology by business, whether 5G or identity services, and it’s safe to say that the private sector isn’t always convinced that those decisions are made with the appropriate amount of forethought and discussion. A CTO could bring the parties together to help everyone find common ground on why, what, and how.</p>
<p>(Yes, these functions only somewhat overlap with the role of a CTO in a technology company. I’m unfazed by this. I care more about what the position accomplishes than what it is called, as I have since 1993 when VUW and I had to agree on a job title for “person who runs the web site” which involved inventing it because it didn’t exist in NZ before I did it.) (My job title was not “Executive Corporate Vice-President for Digital Communications Affairs (Global)”, nor CTO)</p>
<p>Why do we need a CTO? “Because we promised a CTO” isn’t a useful answer. There’s a profitable consulting career to be made just by asking clients “what is it that you’re trying to achieve?” (also pronounced “what problem are you trying to solve?”) and letting that conversation unfold. I don’t think anyone in the hiring process has articulated a singular specific problem for the CTO to solve, other than unfulfilled campaign promises.</p>
<p>The job description didn’t identify which problem that the CTO was to solve. It hand-waved at all of them, but didn’t clearly identify any one of them as The Mission. Clarity matters for a number of reasons.</p>
<p>Without a great problem description, you can neither recognise success nor prepare for it. Is the CTO adequately resourced to achieve their job? They have a salary and a travel budget, and will get some shared operational support from a Ministry. Can they hire a dev team? Commission research? Build prototypes? Do anything but go to conferences? How does is role separate from that of the GCIO, GCDO, and the other Government Chief {anything} Officers within DIA?</p>
<p>Similarly, you can’t identify the characteristics of a successful candidate without knowing the problem they’ll need to solve. The job description was a catch-all, and that’s resulted in one abortive effort to appoint (in which I was caught) and another protracted search. As I write this, we have an almost-appointed candidate: Derek Handley.</p>
<p>The one thing that is shared by each of the problems that a CTO might solve: technical nous. All three finalists last time were technical, but I think that counted against us in the hiring process. I’ve heard whispers from within the technology world similar to those in <a href="https://thespinoff.co.nz/business/29-08-2018/nz-tech-is-losing-it-over-the-idea-of-derek-handley-as-cto-of-new-zealand/">The Spinoff&rsquo;s article</a>) that Derek is insufficiently technical for the role of CTO: he founded two marketing companies (one of which may have disgruntled investors), his education is in architecture and management, and he’s undertaken a lot of activities that some describe as resume padding.</p>
<p>I’ve not met Derek for any length of time, I have no opinion on his abilities. If it’d been me appointed, I’m sure there’d have been a chorus of people with opinions on my shortcomings.</p>
<p>It’s entirely possible that Derek can make a success of this. But if this CTO is to be anything other than lipstick on the pig of government technology, they will need to have strong opinions about the change they can make. They’ll need to pick a problem and tackle it. They’ll need to be sharp and be able to separate bullshit sales hype from near-future potential from present actual capability. They’ll need to get shit done and fast.</p>
<p>I wish the successful candidate good luck and all speed. The clock’s ticking and, whichever problem you choose to have an effect upon, the tech industry hopes you’re swiftly successful. Those problems in Government will still be there after the next election, and the performance of this first CTO will determine how those problems are tackled.</p>
<p>My biggest fear isn&rsquo;t that Derek does nothing. Nothing is relatively benign. I&rsquo;m not that concerned that NZG would sign up for a blockchain VR AI private cloud solution. My biggest fear is that an ineffectual CTO engagement after a fraught appointment process might put government and the tech industry off the idea of working together.</p>
<p>The problems to be tackled by tech savvy people in Government aren&rsquo;t going away any time soon, and they&rsquo;re bigger than one CTO appointment. Let&rsquo;s keep our eyes on the prize here: better functioning and more responsive government, less waste, stronger policies, stronger delivery of policy goals. Whatever happens with the CTO, I hope we keep trying to find a way to put tech-savvy people closer to the decision-makers so the decisions can be better.</p>
]]></content>
  </entry>
  <entry>
    <title>Proposed Changes to NZ&#39;s R&amp;D Incentives</title>
    <link href="https://nathan.torkington.com/entries/2018-05-29-proposed-changes-to-nzs-rd-incentives/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2018-05-29-proposed-changes-to-nzs-rd-incentives/</id>
    <published>2018-05-29T00:00:00Z</published>
    <updated>2018-05-29T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>There&rsquo;s <a href="http://www.mbie.govt.nz/info-services/science-innovation/funding-info-opportunities/rd-tax-incentive">an open consultation</a> about to end, on the changes MBIE would like to make to NZ&rsquo;s R&amp;D incentives. In particular, they&rsquo;ll phase out the <a href="https://www.callaghaninnovation.govt.nz/grants/growth-grants">Callaghan Growth Grants</a> and replace them with R&amp;D tax credits. As <a href="http://www.mbie.govt.nz/info-services/science-innovation/funding-info-opportunities/rd-tax-incentive/research-and-development-tax-incentive/growth-grants-transition-faqs.pdf">the FAQ says</a>, <em>There are differences in the definition of eligible expenditure between the Growth Grant and the proposed R&amp;D Tax Incentive (for instance, overseas expenditure on R&amp;D). The proposed R&amp;D Tax Incentive has no R&amp;D intensity threshold, a much higher cap and lower minimum R&amp;D expenditure threshold than the Growth Grant. Some firms may get less money, but others might get more.</em></p>
<p>This policy is very clearly aimed at large and profitable companies. If you&rsquo;re a Fonterra, or a Mainfreight, or a TradeMe, you can receive a discount on the tax you pay on your profits. That&rsquo;s good: we want these companies to increase their spending on R&amp;D. Another 1% spend from them represents tens of millions spent on R&amp;D. Good, we need it, NZ lags horribly.</p>
<p>However, there are plenty of other companies in NZ. In particular, I work with software companies and startups at that. It&rsquo;s time for a side-track on startups &hellip;</p>
<h2 id="a-side-track-on-startups">A Side-track on Startups</h2>
<p>A startup is a small company that wants to get big fast, generally to beat would-be competitors to the opportunity they&rsquo;ve identified. To grow artificially fast, startups don&rsquo;t make profits and reinvest some of those profits in building more product and opening new offices. Instead, they take investment money and spend it on sales people, marketing, but (most importantly) programmers to build the product and get more users.</p>
<p>Those startups on full burn are growing really fast. You may have heard of some: PushPay, Vend, Soul Machines, &hellip; Until recently, Xero was in that list but they&rsquo;ve finally reached the point where they&rsquo;re shooting for profitability and not simply pure growth.</p>
<p>The growth here is in <em>users</em> and not <em>profit</em>. Indeed, startups run at a loss while they burn like this: they&rsquo;re spending more to obtain the next set of users than they are making from their existing users.</p>
<p>The way to make sense of this behaviour is to recognise that <strong>the company is the product</strong>. The startup wants to be bought: either by a lot of people through an IPO on the stock market, or by another company as an acquisition. Why would someone want to buy an unprofitable company? The best reasons are (a) the startup can just stop growing and then it&rsquo;ll be profitable; and (b) the users are desirable to the acquirer (because you can sell them other things / they&rsquo;re already users of the acquirer&rsquo;s product / etc). There are other reasons companies are bought, including delusion and speculation, but these are the more defensible ones.</p>
<p>Often the buyers are not Kiwis: if you&rsquo;re a Kiwi firm and you are going to sell, you&rsquo;ll sell to the people with the most money. If that&rsquo;s a Kiwi company, great. If it&rsquo;s Fairfax or Apple or Adobe (all of whom have acquired NZ tech startups) then that&rsquo;s great too. Realistically, in the software space it&rsquo;s generally international buyers.</p>
<p>Because the company is the real product, the ostensible business of the startup (building and selling some software products) is not profitable while the startup is growing. The profit comes when the company is sold.</p>
<p>Think about that for a second, it&rsquo;s important: a startup generally won&rsquo;t make a profit while it&rsquo;s building and selling its accounting/AI/payments/&hellip; software.</p>
<p>Most importantly, you won&rsquo;t know whether the company can be sold until the company is sold. The larger and older the startup, the more chance there is that it&rsquo;ll be acquired, but there have been 8 year old startups that grew large and then blew up because they weren&rsquo;t profitable and nobody bought them.</p>
<p>While they&rsquo;re growing, though, they&rsquo;re hiring people. If the startup is in NZ, it&rsquo;s hiring Kiwis. if it&rsquo;s in England, it&rsquo;s hiring Brits. If a startup in England gets a better R&amp;D incentive than its competitor in NZ, then the British startup has an advantage: the money the Brits get from their government can be used to hire more people to move faster and pull ahead of the Kiwi startup. A shitty R&amp;D incentive policy in NZ makes Kiwi startups go under while their foreign competitors thrive.</p>
<h2 id="back-to-rd-">Back to R&amp;D &hellip;</h2>
<p>How do our startups fit into the R&amp;D tax credit scheme? Short answer is: they don&rsquo;t. Tax is a concern if you&rsquo;re profitable. If you&rsquo;re not profitable, tax is the least of your worries.</p>
<p>So the R&amp;D tax credit does nothing for startups and high-growth firms.</p>
<p>Nothing.</p>
<p>Even worse, the proposal is half-baked. It&rsquo;s clearly aimed at the kind of old-school physical product companies that dominated the 20th century in NZ: Gallagher, Fonterra, etc. It talks about R&amp;D as following the scientific method, and there are lots of examples with dies and machine blanks.</p>
<p>Even weirder, the definition of R&amp;D specifically excludes market research, design, and social sciences work. The iPhone is a UX innovation, and indeed Apple&rsquo;s whole market distinguishing feature is R&amp;D around Design. Facebook are doing R&amp;D right now via social sciences, trying to understand the networks of conspiring bots and political actors (I know this as I went to Social Science Foo Camp at Facebook in January). Lean and agile software develop starts with iterating with a customer, trying to design the feature or product that they want and will use. This is literally called The Design Process and it&rsquo;s critical to building a new product. Not covered in MBIE&rsquo;s doc.</p>
<h2 id="now-back-to-startups-">Now Back to Startups &hellip;</h2>
<p>In a high-growth software startup, every dollar spent on that startup is R&amp;D &hellip; <strong>because the company is the product</strong>. You don&rsquo;t know until you actually sell it whether it&rsquo;s saleable.</p>
<p>That&rsquo;s the Silicon Valley model of startups &hellip; five years of loss-making while you burn investment money to get big, then you start to worry about breaking even, and then once you&rsquo;ve proved that you CAN make money (even if you&rsquo;re not making very much) you&rsquo;re sold.</p>
<p>Maybe it&rsquo;s five years, maybe it&rsquo;s eight years, maybe it&rsquo;s three years. The pressure is on software startups to be profitable (or at least break even) ASAP to prove their viability. Investors got burned funding companies that were never able to be desirable to an acquirer or profitable enough for an IPO. Now they&rsquo;re saying &ldquo;prove you have a long-term future by being breakeven&rdquo;.</p>
<p>Whenever it comes, whether at year eight for Silicon Valley or year three for NZ, there&rsquo;s still a huge risky early-stage part of a startup&rsquo;s life that this policy does nothing to address. <strong>Early-stage startups are not profitable, are almost exclusively doing R&amp;D, and are utterly unsupported by this policy.</strong></p>
<p>To be sure, there&rsquo;s <a href="http://www.ird.govt.nz/research-development/overview/what-is-rdltc/what-is-rdltc.html">a way to cash-out R&amp;D tax credits</a>. The consultation document says &ldquo;The Government is committed to providing a better policy option to support these businesses. However, the policy issues are complex and will not be resolved in time for the introduction of the Tax Incentive in April 2019. [&hellip;] The existing R&amp;D tax loss cash out scheme may be reviewed as part of any further policy work but no changes will be made to it for the 2019-2020 income year.&rdquo;</p>
<p><strong>The consultation about the tax credit policy admits that they don&rsquo;t know how to apply R&amp;D criteria to software and that this isn&rsquo;t aimed at startups. Yet they&rsquo;ll still phase out the Callaghan grants. This is irresponsible.</strong></p>
<p>Instead of developing both the big company and the startup policies together, consulting, and then retiring the Callaghan grant, MBIE has opted to develop a BigCo policy and let startups pray that the Startup policy is (a) developed and (b) any good.</p>
<p>Perhaps I&rsquo;m wrong. Perhaps I&rsquo;m misreading this. But if I&rsquo;m accurate, then this is a big MBIE finger in the eye to software and startups.</p>
<p>I used to question why we need NZTech and NZRise. This is why! We need people paid to box the ears of MBIE and remind them that they will never get another TradeMe, Xero, or PushPay if they don&rsquo;t start taking the job of nurturing these companies seriously.</p>
<h2 id="so-what-next">So What Next?</h2>
<p>Have a look at the UK if you want to see some startup-friendly R&amp;D policy. R&amp;D is 100% claimable as expenses, and small-to-medium businesses can even get cash back. <a href="https://rndtax.co.uk/rd-tax-credits/eligible-costs/sme/">The calculations</a> are astonishing.</p>
<p>The MBIE consultation is interested in &ldquo;what are the effects on your business of this proposed tax policy&rdquo;. Your company should complete that consultation, if you&rsquo;re a startup doing R&amp;D.</p>
<p><strong>In particular, visit MBIE&rsquo;s <a href="https://www.research.net/r/submission-RD-incentive">R&amp;D Incentive Online Submission App</a> and answer Q2-5 (what is R&amp;D, scientific method), Q7-8 (design, UX, etc.), Q12 (growth startups can sell product for less than the cost of producing it, to build customer-base), Q13 (software).</strong> If you don&rsquo;t want to do this through their app, <a href="http://www.mbie.govt.nz/info-services/science-innovation/funding-info-opportunities/rd-tax-incentive/research-and-development-tax-incentive/">the MBIE site says how to do it via email</a> and the end of <a href="http://www.mbie.govt.nz/info-services/science-innovation/funding-info-opportunities/rd-tax-incentive/research-and-development-tax-incentive/rd-incentive-discussion-document.pdf">the consultation doc</a> has a short list of the questions. <strong>If you are very short of time, Q7-78 and Q13 are most important</strong> but you&rsquo;ll want to read the relevant bits of <a href="http://www.mbie.govt.nz/info-services/science-innovation/funding-info-opportunities/rd-tax-incentive/research-and-development-tax-incentive/rd-incentive-discussion-document.pdf">the consultation doc</a> (don&rsquo;t worry, it&rsquo;s a quick read).</p>
<p>MBIE should put the tax credit system on hold until they have a proposed solution that works. Creating uncertainty for startups while they figure out what the 21st century looks like is not good policy development.</p>
<p>I&rsquo;d personally like to see MBIE do some open learning with the software industry about what R&amp;D looks like here, and how they might define and measure it. The MBIE doc has a feel of &ldquo;gosh, this software world is odd! We know we don&rsquo;t know!&rdquo; but it&rsquo;s bloody weird that you&rsquo;d admit you didn&rsquo;t know <strong>but not seek out people who could help</strong>.</p>
<p>This is based on my reading of the proposal and consultation documents. If I&rsquo;m wrong in my interpretation or details, please let me know: <a href="http://twitter.com/gnat">@gnat on Twitter</a> or <a href="mailto:nathan@torkington.com">email nathan@torkington.com</a>. If you want to tell me that Silicon Valley&rsquo;s venture-funded startup model is speculative bullshit and a toxic cancer at the heart of our industry, don&rsquo;t bother. I need my inbox free for constructive commentary. We can destroy the capitalist running dog business model later.</p>
]]></content>
  </entry>
  <entry>
    <title>Twitter&#39;s Summer Reading List</title>
    <link href="https://nathan.torkington.com/entries/2017-12-21-twitters-summer-reading-list/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2017-12-21-twitters-summer-reading-list/</id>
    <published>2017-12-21T00:00:00Z</published>
    <updated>2017-12-21T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>I <a href="https://twitter.com/gnat/status/943938259171786752">asked my Twitter friends</a> for recommendations of books to read over Christmas. I said that I&rsquo;ve already consumed <a href="https://www.amazon.com/Persepolis-Rising-Expanse-James-Corey-ebook/dp/B06XKN9G27">the new Expanse novel</a> and <a href="https://www.amazon.com/Book-Dust-Belle-Sauvage-ebook/dp/B01N390U59">the new Philip Pullman</a> (intended to indicate that I like that style of sf) and I said I like non-fiction if it&rsquo;s interesting and well-written (e.g., <a href="https://www.amazon.com/How-Live-Montaigne-Question-Attempts-ebook/dp/B003E8AK4Q">Bakewell&rsquo;s book on Montaigne</a>, or <a href="https://www.amazon.com/Age-Wonder-Romantic-Generation-Discovered-ebook/dp/B001NLL568">Holmes&rsquo;s &ldquo;Age of Wonder&rdquo;</a>).</p>
<p>Here&rsquo;s what they recommended &hellip;</p>
<ul>
<li><a href="https://www.amazon.com/Artemis-Novel-Andy-Weir-ebook/dp/B06Y55SB48">Artemis</a> by Andy Weir (the sequel to The Martian). Recommended by <a href="https://twitter.com/lancewiggs/status/943939310956318720">@lancewiggs</a>.</li>
<li><a href="https://www.amazon.com/New-York-2140-Stanley-Robinson-ebook/dp/B01KT7YTO6">New York 2140</a> by Kim Stanley Robinson. Recommended by <a href="https://twitter.com/lancewiggs/status/943939310956318720">@lancewiggs</a> and <a href="https://twitter.com/stojg/status/943939013152358400">@stojg</a>.</li>
<li><a href="https://www.amazon.com/Dark-Forest-Remembrance-Earths-Past-ebook/dp/B00R13OYU6">The Dark Forest</a> by Cixin Liu. Recommended by <a href="https://twitter.com/lancewiggs/status/943939310956318720">@lancewiggs</a>, <a href="https://twitter.com/mceoin/status/943951320498577408">@mceoin</a>, and <a href="https://twitter.com/obra/status/943949044451123200">@obra</a>.</li>
<li><a href="https://www.amazon.com/Powerhouse-Inside-Invention-Battery-World-ebook/dp/B00LFZ83RQ">The Powerhouse: Inside the Invention of a Battery to Save the World</a> by Steve Levine. Recommended by <a href="https://twitter.com/lancewiggs/status/943939310956318720">@lancewiggs</a>.</li>
<li><a href="https://www.amazon.com/Captain-Class-Hidden-Creates-Greatest-ebook/dp/B01LKCRKFY">The Captain Class: The Hidden Force That Creates the World&rsquo;s Greatest Teams</a> by Sam Walker. Recommended by <a href="https://twitter.com/lancewiggs/status/943939310956318720">@lancewiggs</a>.</li>
<li><a href="https://www.amazon.com/Perdido-Street-Station-Crobuzon-Book-ebook/dp/B000FBFO8C">Perdido Street Station</a> by China Mieville. Recommended by <a href="https://twitter.com/MattNippert/status/943939684861845504">@MattNippert</a>.</li>
<li><a href="https://www.amazon.com/Walkaway-Novel-Cory-Doctorow-ebook/dp/B01FQQ47OC">Walkaway</a> by Cory Doctorow. Recommended by <a href="https://twitter.com/mandysimpson/status/943946347425566720">@mandysinpson</a>.</li>
<li><a href="https://www.amazon.com/Way-Kings-Stormlight-Archive-Book-ebook/dp/B003P2WO5E">The Way of Kings: Stormlight Archive Book 1</a> by Brandon Sanderson. Recommended by <a href="https://twitter.com/mandysimpson/status/943946347425566720">@mandysinpson</a>.</li>
<li><a href="https://www.amazon.com/Blue-Remembered-Earth-Poseidons-Children-ebook/dp/B005ZOCF5E/">Blue Remembered Earth: Poseidon&rsquo;s Children Book 1</a> by Alastair Reynolds. Recommended by <a href="https://twitter.com/teh_aimee/status/943940642580832257">@teh_aimee</a>.</li>
<li><a href="https://www.amazon.com/Wake-Elizabeth-Knox-ebook/dp/B00G1SLZ72">Wake</a> by Elizabeth Knox, which is set in New Zealand. Recommended by <a href="https://twitter.com/teh_aimee/status/943940642580832257">@teh_aimee</a>.</li>
<li><a href="https://www.amazon.com/Consider-Phlebas-Culture-Novel-Book-ebook/dp/B0013TX6FI">Consider Phlebas (The Culture Series book 1)</a> by Iain Banks. Recommended by <a href="https://twitter.com/teh_aimee/status/943940642580832257">@teh_aimee</a>.</li>
<li><a href="https://www.amazon.com/Charles-Stross/e/B001H6IW0Q/">Anything by Charlie Stross</a>. Recommended by <a href="https://twitter.com/teh_aimee/status/943940642580832257">@teh_aimee</a> and <a href="https://twitter.com/annejohn/status/943939113538818054">annejohn</a>.</li>
<li><a href="https://www.amazon.com/Micah-L.-Sifry/e/B001IQUMJ4/">Anything by Micah L. Sifry</a>. Recommended by <a href="https://twitter.com/teh_aimee/status/943940642580832257">@teh_aimee</a>.</li>
<li><a href="https://www.amazon.com/Trilogy-3-Book-Boxset-Generals-Measure-ebook/dp/B0078XCM4O/">The Killer Angels</a> by Michael Shaaara. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/Underground-Railroad-Pulitzer-Winner-National-ebook/dp/B01A4ATV0A">The Underground Railroad</a> by Colson Whitehead. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/Into-Heart-Borneo-Redmond-OHanlon/dp/0394755405">Into the Heart of Borneo</a> by Redmond O&rsquo;Hanlon. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/Kids-These-Days-Capital-Millennials-ebook/dp/B06XFTVQFK">Kids These Days: Human Capital and the Making of Millennials</a> by Malcolm Harris. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/When-Breath-Becomes-Paul-Kalanithi-ebook/dp/B00XSSYR50/">When Breath Becomes Air</a> by Paul Kalanithi. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/No-More-Champagne-Churchill-Money-ebook/dp/B00QEJWW16">No More Champagne: Churchill and His Money</a> by David Lough. Recommended by <a href="https://twitter.com/rmi/status/943940294092906496">@rmi</a>.</li>
<li><a href="https://www.amazon.com/Off-Armageddon-Reef-Novel-Safehold-ebook/dp/B000Q67KJ2">Off Armageddon Reef: A Novel in the Safehold Series (#1)</a> by David Weber. Recommended by <a href="https://twitter.com/VikOlliver/status/943941707862720512">@VikOlliver</a>.</li>
<li><a href="https://www.amazon.com/Black-Marks-White-Page-Ihimaera-ebook/dp/B073F2N7FJ">Black Marks on the White Page</a> by Witi Ihimaera and Tina Makareti. Recommended by <a href="https://twitter.com/amscraig/status/943944421267013633">@amscraig</a>.</li>
<li><a href="https://www.amazon.com/Mythos-Retelling-Myths-Ancient-Greece/dp/0718188721">Mythos</a> by Stephen Fry. Recommended by <a href="https://twitter.com/MikeStok/status/943939335174307840">@MikeStok</a>.</li>
<li><a href="https://www.amazon.com/Water-Knife-Paolo-Bacigalupi-ebook/dp/B00NRQOR26/">The Water Knife</a> by Paolo Bacigalupi. Recommended by <a href="https://twitter.com/stojg/status/943939013152358400">@stojg</a>.</li>
<li><a href="https://www.amazon.com/Altered-Carbon-Takeshi-Kovacs-Novels-ebook/dp/B000FBFMZ2/">Altered Carbon</a> by Richard K. Morgan. Recommended by <a href="https://twitter.com/newzedland/status/943941890088382464">@newzedland</a>.</li>
<li><a href="https://www.amazon.com/N.-K.-Jemisin/e/B0028OIVC0/">Anything by N.K. Jemisin</a>. Recommended by <a href="https://twitter.com/annejohn/status/943939113538818054">@annejohn</a>.</li>
<li><a href="https://www.amazon.com/Penrics-Demon-Penric-Desdemona-Book-ebook/dp/B0114LJ3BU">Penric&rsquo;s Demon: Penric &amp; Desdemona Book 1</a> by Lois McMaster Bujold. Recommended by <a href="https://twitter.com/annejohn/status/943939113538818054">@annejohn</a>.</li>
<li><a href="https://www.amazon.com/Silo-Effect-Expertise-Breaking-Barriers-ebook/dp/B00UDCNMXM/">The Silo Effect: The Peril of Expertise and the Promise of Breaking Down Barriers</a> by Gillian Tett. Recommended by <a href="https://twitter.com/RachelProsser/status/943952312191479808">@RachelProsser</a>.</li>
<li><a href="https://www.amazon.com/Kristine-Kathryn-Rusch/e/B000AP60YK">Anything by Kristine Kathryn Rusch</a>. Recommended by <a href="https://twitter.com/Miraz/status/943952175813636096">Miraz Jordan</a>.</li>
<li><a href="https://www.amazon.com/Odyssey-Homer-ebook/dp/B06XKNHGN1">Homer&rsquo;s Odyssey</a> translated by Emily Wilson. Recommended by <a href="https://twitter.com/auchmill/status/943952064035487744">@auchmill</a>.</li>
<li><a href="https://www.amazon.com/Bone-People-Novel-Keri-Hulme/dp/0140089225/">The Bone People</a> by Keri Hulme. Recommended by <a href="https://twitter.com/tummycom/status/943957899818274817">@tummycom</a>.</li>
</ul>
<p>Finally:</p>
<ul>
<li><a href="https://www.amazon.com/JavaScript-Hours-Sams-Teach-Yourself/dp/067233738X">Teach Yourself Javascript in 24 Hours</a> by Phil Ballard. Recommended by <a href="https://twitter.com/bentorkington/status/943949489751990272">a smart-arse</a>.</li>
</ul>
]]></content>
  </entry>
  <entry>
    <title>On Moving to New Zealand</title>
    <link href="https://nathan.torkington.com/entries/2016-11-10-on-moving-to-new-zealand/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2016-11-10-on-moving-to-new-zealand/</id>
    <published>2016-11-10T00:00:00Z</published>
    <updated>2016-11-10T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>Hello, American friends!  President-Elect Trump has given his speech and begun to redact his campaign website of the obviously illegal and impossible campaign promises, and you look up from your keyboard through an election-defeat hangover and want to move to New Zealand.</p>
<p><strong>First of all, consider staying</strong>.  America’s problems won’t be solved if all the tolerant and progressive people leave.</p>
<p><strong>But that&rsquo;s not an easy choice for everyone</strong>.  If you don’t think you’ll be safe, or you&rsquo;re concerned about the effects on your children of growing up in the cloud of President Trump, you might be looking elsewhere.</p>
<p><strong>Allow me to suggest New Zealand.</strong></p>
<p><strong>New Zealand has a fairly straightforward <a href="https://www.immigration.govt.nz/new-zealand-visas/apply-for-a-visa/about-visa/skilled-migrant-category-resident-visa">skilled migrant immigration scheme</a></strong>, where you get points for meeting certain criteria and if you clear a particular number of points then you can move here.  Some of those criteria are around education, language, and health, effectively biasing it against people who don’t speak English, those who aren’t highly-educated, as well as non-able-bodied and unwell people.</p>
<p><a href="http://skillshortages.immigration.govt.nz/">We maintain a list of <strong>jobs that are in demand</strong></a>.  If you can meet the needs of an OMG SO IN DEMAND job then you just need a job offer (as well as the points, as described above).  <a href="https://www.immigration.govt.nz/new-zealand-visas/options/live-permanently">The government&rsquo;s website on moving to NZ to work</a> doesn&rsquo;t suck. It&rsquo;s harder but not impossible without ticking the ZOMGJOB list (and do look: there are some surprising inclusions).</p>
<p><strong>There are plenty of tech startups looking to hire people</strong>.  NZ tends to have a reasonable number of fresh software engineering graduates, but few with the kinds of skills that people acquire in American startups: devops, engineering leadership, web scale distributed systems, big data pipelines, etc.  Which startups are hiring?  Look at <a href="http://pushpay.com">PushPay</a>, <a href="http://raygun.io">Raygun</a>, <a href="http://atomic.io">Atomic</a>, <a href="http://gettimely.com">Timely</a>, <a href="http://vendhq.com">Vend</a>, <a href="http://xero.com">Xero</a>, <a href="http://trademe.co.nz/">TradeMe</a>, etc.</p>
<p><strong>Nerd conferences are good here</strong>.  Webstock (design, Feb) and Kiwicon (security, Nov) are anchors of the scene.  Attend those and you’ll meet many of the people with whom you could work, and some good friends.  There are additional web, mobile, etc. conferences.  Be sure to schedule Fieldays in your first year, because the agtech world is weird and wonderful and close to our grass-growing economic roots.</p>
<p>If you’re an <strong><a href="https://www.newzealandnow.govt.nz/move-to-nz/new-zealand-visa/visas-to-invest/investor-visa">investor</a></strong>, you can investor your way to residency.  Similarly <strong><a href="https://www.newzealandnow.govt.nz/move-to-nz/new-zealand-visa/visas-to-invest/entrepreneur-visa">entrepreneurs</a></strong>.</p>
<p><strong>The pathway to <a href="https://www.dia.govt.nz/web/cctool.nsf/Citizenship?OpenForm">citizenship</a> is straightforward</strong> if you decide you’d like to live here forevs.</p>
<p><strong>The absolute dollar value you’ll earn in NZ will look low if you translate it to American dollars</strong>.  Do not think you’ll be able to afford your San Francisco home because you’ve been working in Auckland.  It doesn’t work that way.</p>
<p><strong>Food is expensive</strong>. Thanks to globalisation (fist shake! Grr globalisation, you!) the whole world can buy our food.  So we pay a lot to eat it.  We don&rsquo;t have a Mexico just south of us always producing fruit, so (for examples) we eat strawberries for a month each year when they&rsquo;re in season &hellip; and then not.  Meat&rsquo;s available all year round, and pretty good in the shops.  And if you live semi-rural you can probably find a farmer who&rsquo;ll let you buy a bull and have it butchered for you, then you can get a freezer full of export-grade yum.  Vegetarians, make friends with your local Asian grocery, where all sorts of surprising imports and deliciousness is available.</p>
<p><strong>Housing is tight in Auckland, but easier in many other parts of the country</strong>.  You can buy a home in Auckland if you have the earning power of two professionals in your family, and then they’d better be successful professionals.  In many other parts of the country, one professional income is enough.</p>
<p><strong>NZ is beautiful and diverse; there are many great places to live</strong>.  Think of it as the American West Coast: Auckland is Santa Barbara, Dunedin is Seattle.  (ish) The rule of thumb: warmer is norther, but there are some exceptions (Nelson and Napier are toastier than you’d expect given their locations)  Do you like hiking?  Skiing?  Fishing?  Swimming?  Hunting?  There are great places for these activities around the country, and you could live next to the national park or marina that means you can live your passion every weekend.</p>
<p><strong>Are you more cultural and cerebral</strong>?  Wellington and Auckland have thriving arts scenes, with bands, coffee shops, theatre, opera, orchestras, etc.  The cities of Dunedin, Christchurch, Wellington, Palmerston North, Hamilton, and Auckland are university towns.</p>
<p><strong>Caution: our hipsters are not as developed as America&rsquo;s</strong>. So while there&rsquo;s the occasional extravagant beard and fixie bike, and it seems like every town with more than 50 people has a cafe where you can get an excellent coffee, you&rsquo;ll struggle to find someone who&rsquo;ll charge you $27 for an artisanal cruelty-free microbatch locally-produced free-range recycled soy-inked letterpressed 50%-butter-by-volume coffee and there are no emoji-only ride-sharing voice-interface social network startups.  Turn back now if this is a problem for you.</p>
<p><strong>Can Trump happen here</strong>?  Never say never, the world is going fucking nuts.  However … New Zealand so far has traded with crazy nations without becoming crazy itself: we have a lot of Brits but most Kiwis think Brexit was nuts; similarly with Americans and DT.  Kiwis have a much warmer relationship to regulation than Americans. There’s been no NZ indigenous genocide (unlike USA and Australia), and the worst social woes in NZ don’t register on the American scale.</p>
<p><strong>Our racists and entitled old people have done little damage to the rest of us</strong>; both leading parties are center-right and center-left.  And our definition of “racist” is “I don’t think those blimmin Marries should be given any more money!” and “no more Chinese immigrants, they’re driving up house prices!” rather than KKK robes and skinheads beating the shit out of brown people on a regular basis.  To be clear: no skinheads or KKK robes in Hobbit-size.  We have a sad racist past, sad racists, and ongoing racial tension, but not on the scale of America.</p>
<p><strong>NZ schools are pretty darn good</strong>.  We&rsquo;re no Finland (as politicians constantly remind educators) but state schools are mostly very good.  Schools aren&rsquo;t driven by yearly tests, and the NZ Curriculum is very flexible with plenty of room for schools to find their own identity (culture, technology, etc.). Schools are funded from central Government, not property taxes, and schools in poorer areas are given more money.  I&rsquo;ve heard San Francisco residents complain that most state schools in the area are terrible—that is not the case in Auckland. We moved to NZ (wife is American, I&rsquo;m a Kiwi who&rsquo;d spent 10 years in Colorado) when our kids were 4 and 6 and the relaxed school environment, no gangs, no shootings &hellip; priceless.</p>
<p><strong>We have proportional representation</strong>, so power is frequently split between parties.  We get to vote for MPs who represent our area, AND for a party.  The parties get MPs in proportion to the number of votes the party got — it’s not as complex as cricket, much fairer than your system, and you’ll get the hang of it.  The Green party is a contender here.  On the downside, we don’t (yet) have constitutional protections against the elected Parliament, so if NZ did elect a lot of arsehats then they could run amok.</p>
<p><strong>We’re part of the <a href="https://en.wikipedia.org/wiki/Five_Eyes">Five Eyes network</a></strong> (with US, UK, Canada, and Australia), so Ed Snowden can’t move here either.  We have legal protections against wholesale surveillance of citizens, and distrust our spooks to play by the rules or politicians to make them watertight.  Like Americans, we all suspect that unless we’re using Tor and Signal our comms are fair game.  On the upside, NZ is small enough that you can easily meet your politicians and bureaucrats and give them a piece of your mind.</p>
<p><strong>What else isn&rsquo;t great?</strong>  We have higher child suicide and abuse against children rates than economically-comparable nations, and the government has done a shit job of taking care of the poor during the last decade&rsquo;s housing in Auckland.  Because of that economic boom, NZers have invested more in property than in all the good stuff.  Our socialist healthcare system takes care of everyday things really well, but if you&rsquo;re earning middle-class incomes then consider augmenting it with private insurance so you don&rsquo;t have to join waiting lists should you need surgery (good news: the dominant provider is a coop so NZ health insurance costs are miniscule in comparison to American health insurance costs).  If your kid has very special needs (e.g., autism), the Government doesn&rsquo;t fund enough assistance for their schooling to be awesome (and, obscenely, <a href="http://m.nzherald.co.nz/nz/news/article.cfm?c_id=1&amp;objectid=11589222">may not let you stay</a>).  A surprising number of our rivers are full of animal shit and not swimmable (fancy that, in a dairying nation).  Why the hell in 2016 are we still building subdivisions without bike paths, and building roads without bike lanes?!  These are all issues that the NZ Left is familiar with and grumpy about.</p>
<p>In short, <strong>we’ve got our problems but they&rsquo;re nothing in comparison to your problems</strong>!  You&rsquo;d be welcome and loved here.  Ride out the Trumpocalypse with <a href="http://www.radionz.co.nz/collections/birds">the sounds of native birds</a> in the trees as you crack a cold <a href="https://www.craftbeeronline.co.nz/">craft beer</a> and revel in your new home&rsquo;s reasonable race relations, functioning political system, and complete absence of orange arsehats.</p>
<p>Of course, this is all just my opinion.  You should come and check it out for yourself!  See you soon!</p>
]]></content>
  </entry>
  <entry>
    <title>&#34;Outcome is a function of process&#34;</title>
    <link href="https://nathan.torkington.com/entries/2016-10-30-outcome-is-a-function-of-process/" rel="alternate" />
    <id>https://nathan.torkington.com/entries/2016-10-30-outcome-is-a-function-of-process/</id>
    <published>2016-10-30T00:00:00Z</published>
    <updated>2016-10-30T00:00:00Z</updated>
    <content type="html">&lt;![CDATA[<p>I was just catching up on <a href="http://www.continue.nz/">Tim Kong&rsquo;s excellent blog</a>, when I read <a href="http://www.continue.nz/dan-carter-on-100-games-/">this</a> great quote from Dan Carter:</p>
<blockquote>
<blockquote>
<p>&ldquo;One thing we talk about over and over with this current All Blacks side is about never focusing on the outcome. <strong>We view the outcome as a function of following our processes.</strong> That might sound a little dry to some, but looking back at every major loss we&rsquo;ve had over the years, they mostly started with us thinking too far ahead of the game.&rdquo;</p>
</blockquote>
</blockquote>
<p>I like that quote a lot.  There&rsquo;s a lot you can find in it:</p>
<ol>
<li>You can&rsquo;t <em>do</em> success.  Instead, you can only run, pass, tackle, communicate &hellip; all of which can contribute to success.</li>
<li>Even in a game with as many different plays, player matchups, imbalances, and opportunities as rugby, the winners are winners because they have s system that generates wins.</li>
<li>The team&rsquo;s playbook must necessarily be flexible, because it will be used in many different circumstances (and there&rsquo;s an opponent who will exploit predictability).</li>
<li>The team is still important.  You can&rsquo;t give the All Blacks playbook to the Mahurangi B rugby team and expect them to win against the Lions.</li>
<li>Your team still has to train, to be the best they can be <em>and</em> to lock in the playbook.</li>
<li>So within general principles, you find what works and use that.</li>
</ol>
<p>So too with engineering management.  Your job is to shape the processes that give you success.  They may be different in some ways from the processes that give others success.  Your processes won&rsquo;t dictate every solution to your team.  The members of your team are still important, and they should still be learning and running.</p>
<p>But engineering management is not sport.  The tech environment changes constantly, and every day is game day.  Consequently, much more of the playbook related to solving specific problems on the field devolves to the team members themselves, and much more learning happens on the field.  But, as with sport, relentless running will exhaust your team so it&rsquo;s wise to build rest days for learning and exploration into your team&rsquo;s schedule if you want them able to play their best game the rest of the time.</p>
<p>Ok, I&rsquo;m done.  I promise, no more sportsball metaphors.</p>
]]></content>
  </entry>
</feed>
