Susan Potter

Software

software

The superpowers that higher-kinded types provides

Lately I have been working with TypeScript developers introducing stronger forms of functional programming and during our explorations about how to exploit the abstractions found in libraries like fp-ts and io-ts, I find myself missing higher-kinded types when one developer asked …

software

Tracking diffs by scoping to file, range, function, method, or class changes in Git

One common question I see from developers using Git is how they can review the history of one function, method, or class over time through Git's history of the project. In codebases that have evolved over years, a developer just wants to know how one particular semantic …

software DRAFT

TypeScript's keyof operator and possible uses

An exploration of the keyof operator in TypeScript.

software

How to make seemingly difficult decisions

Originally published as a Twitter thread starting here. Anyone who has spent any time in either a technical or people management leadership position in software development knows that you need to make seemingly difficult decisions frequently. This week I coached a coworker …

software DRAFT

Profunctors: An API, Part 3

/images/reflection-small.webp Photo by Jonatan Pie on Unsplash

software DRAFT

Profunctors for the web developer: First intuitions, Part 2

/images/leaf-half-dead-small.webp Photo by Mario Dobelmann on Unsplash All of the paired transforms from Part 1 can be modeled with the interface that Profunctor provides but what does that mean and why is that useful? In Part 2 we will explore our first intuitions about these …

software DRAFT

Parsing for the non-academic programmer

One topic I often see shunned or misunderstood by developers of all walks, is parsing. It is associated with writing compilers. The developers that feel queasy or disinterested hearing the term fall into a number of categories including: those who studied computer science in …

software

TypeScript enum versus const enum

Today I found that there is a difference between enum and const enum in TypeScript in the generated JavaScript. Namely: with a non-const enum the compiler generates an object with key-value pairs. with a const enum the definition alone doesn't generate any code, only …

software

Using three-way diffing context for merge conflict style in Git

It recently came to my attention that not everyone overrides the default merge.conflictStyle git-config setting. So in case anyone here wanted to try something new out that would provide more context during a Git conflict resolution scenario here you go. I use diff3 which you …

software DRAFT

Profunctors for the web developer: Motivating examples, Part 1

Offering examples of profunctors that web developers might find motivating.

software DRAFT
software DRAFT

Unfiltered musings on "enterprise versus startup" (the wrong question)

Since the mid-1990s I have worked in software development at a number of organizations that ranged from the very big and changing slowly to the very small and growing fast. I was asked recently to give advise on the kind of organization a former colleague should target with …

software DRAFT

Building a serverless application for subscription webhooks, Part 1

Note: After starting to write this blog post series, AWS announced that API Gateway HTTP APIs could now route requests directly to five new services including Amazon Kinesis Data Streams. As a result I adapted the content of this series to account for that, however, it is …

software DRAFT

Musings on serverless

Over the last twenty years I have worked close to or on the frontlines of system infrastructure delivery from hall server closets to multi-datacenter setups (before what we know as cloud computing was a thing) all the way to a variety of programmable cloud configurations across …

software

Algebraic Data Types in TypeScript

Note: the code for the TypeScript (to help you follow along) is available here: Encoding Algebraic Data Types in TypeScript code Background Recently I've been reviewing TypeScript code at work. A common pattern I've observed in pull requests and some open source projects …

software

Algebraic Data Types: For the math(s) inclined

This was initially published as a section of one of my substack posts. You might be wondering why the term algebraic data types has the word algebra in it. Don’t sweat it if you hated algebra in high school, I will not call on you to solve simultaneous equations or prove by …

software DRAFT

Adding and removing friction to developer process and interaction by design

In 2015 I was binge-reading books on how to break bad habits and create good habits. Since then I have been applying the psychology research I learned from those books to my personal habits and also work habits. When trying to form habits there are four levers that psychology …

software

A quick review of a pure functional serverless application deployed to production

/images/car-dashboard-small.webp Photo by Dawid Zawiła on Unsplash This was adapted from a tweet thread on June 3rd, 2020. Notes: all references to $ (dollars) is in reference to US Dollars (USD) latencies are quoted in milliseconds (ms) unless otherwise noted this …

software

Random notes on Unikernels

This is an adaptation of a Slack chat explanation from work (slightly reworded to read better for the audience) from work in 2017. Random notes on unikernels Introducing unikernels You might have heard terms like unikernel, nanokernel, or library operating systems. These …

software

DynamoDB: The Basics

Introduction This post introduces concepts and principles used to design DynamoDB tables as I have been learning how to leverage this technology in a new project. This introduction will compare and contrast the core concepts and ideas with those found in relational database …

software DRAFT

Practical Recursion Schemes

Recursive data types Recursive data structures pop up all over in software from general-purpose structures like lists and binary trees to more application-specific structures like this AST from a simple business rules engine: data BusinessRule input output = IfThenElse (input …

post

Economic concepts applied in software development, reliability engineering, and technical leadership

One of my favorite subjects as a layperson is economics. I have found many useful applications of methods and concepts to my work in software development, technical leadership, and reliability engineering roles. This is a post to share some of these. A few ideas from economics: …

software

To Type or not to Static Type

Originally published as a Gist here: https://gist.github.com/mbbx6spp/60577af8dc4106d6e710cd804292ce20 Minor modifications in formatting and an extra line of no-judgement was added to this text from the original Gist. Purpose, Disclaimer and Confessions This is the (mostly) no …

software

Parametricity: A Practitioners Guide

Introduction What software developer likes surprises, especially in production? Not me. At least not when I am on call. ;) Wouldn't it be great if we were able to reason about our code to make our lives as simple as possible when debugging or eliminate debugging …