Don’t forget to write your tests

Recently I was giving a talk about Observability in the context of maintaining stable production environments for highly distributed micro-service based systems, and was struck by the reality in the title of this post: Unit tests give you observability! It isn’t just system tracing, logging and metrics that can help you peak into what ultimately controls the behavior of the systems we control, but instead those are just another tool towards that end.

Observability is a concept developed in Control Theory to measure our ability to predict what the outcome of changing some feature in our system will be.


We can now look at what lies beyond money

I had a dream about having a conversation with three other people on a bus somewhere in Africa, after seeing the Cardano Africa Special; and it went something like this:

Three different fictional tribespeople are going to a market controlled by a white colonist to sell their wares when they are interrupted by a stranger saying they are under attack from the pressure of the colonists. The mysterious man asks the Wouha tribesman what he wants to buy at the market, and he says Arubari cream, while the Arubari woman came to sell that cream and buy bread and meat…

Investing in types pays back in time

The one advantage dynamic typing pundits seem to bat around with little resistance is that types get in the way of their prototyping, or deciding how they plan to write a program. This cannot be true after the first handful of functions have been written; it is simply impossible for humans to track the explosion of possible function bodies dynamic typing allows.

I was fleshing out these ideas with my friend Louis van der Stam. We found the final numbers somewhat impressive…

Type Cardinality

Let’s first quickly brush over cardinality: let’s consider the type Boolean has cardinality 2 and that the type…

Software Architecture is getting too complicated…

It is easy to look at all those design pattern books, and online articles about hexagonal architectures, or the cake pattern, or the onion architecture and get lost on how you are best able to design applications and services in a world driven by docker containers, edge computing and serverless architectures.

There must be a way to cut through all the noise and get to some core principles that have a more rigorous mathematical defense…

This article is the introduction in a three part series about algebra and software development.

Basic Algebra

Why don’t we just…

Lenses, Prisms, Isos, Folds, and Kaleidescopes

I want to chime in on the sleeping Giant that are Lenses and Prisms in software development:

They are probably the most powerful unused tool in our arsenal!

As a Learning Tool

Optics can be the perfect bridge from Algebraic Data Types to the Functor hierarchies and beyond. They can the prism (could not resist the pun) through which you can peek into useful and concrete applications of more abstract ideas; once you understand the connection between:

  • tuples and functions
  • products and powers
  • conjunction and implication

Optics is a very concrete and visceral connection between computation and logic. …

Captain’s Log

In functional programming, and fervent advocates of strongly typed languages it is common to hear phrases like: “It compiles; ship it!” or “I don’t need to run it, I already know it compiles”, referring to this notion of being able to write code that gets formally verified by the compiler’s type system. …

Type systems, and more importantly, type checkers, are invaluable to how someone could go through understanding how any given codebase works. They might consider typing errors as guard rails as they start wrapping their mind around the expected computational outcomes of any given code block they are examining.

It is a stark contrast to the proposition of working without any obvious contracts, expectations, or local invariants as is more common in un-typed scenarios like javascript, ruby or pearl.

The explorations done under these guard rails, when computation can be cleanly connected to category theory, different type theories, and certain logics…

Rodolfo Hansen

Constructive Programming Advocate. Looking for new ways to leverage the connection between categories, logic, language, and lambdas…

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store