7 days 30 days All time Recent Popular
Programming in abstractions is very different from a system that is capable of its own 'abstracting'. But what does abstracting mean? We only know of its inputs and outputs, but we fail to describe its inner workings.

I like this short video about living in space. This is because it makes you realize the gaps in your knowledge when you turn off something (i.e. gravity) that you have always assumed to be present.


Perhaps we can understand 'abstracting' better if we turn of many assumptions that we unconsciously carry around. Perhaps we need to get rid of the excess baggage that is confusing our thinking about abstraction.

Turning off gravity and living in space is a perfect analogy. We somehow have to turn off a cognitive process to understand the meaning of abstraction.

The first step to divorce ourselves from our habitual cognitive processes is to realize the pervasiveness of 'noun-thinking' .
I just completed "Rain Risk" - Day 12 - Advent of Code 2020 https://t.co/0wRPluJVeL #AdventOfCode

Today I learned that I really need coffee ☕️ to operate properly. Made a trivial mistake and it took me forever to catch it. This would have been obv. with a statically typed lang.

Also, I'm using a notebook-style env. to play (like
https://t.co/JgFUNSSRuD, here it's https://t.co/XrswSxjjwk). My take away from this fun experience + observations at work is that such notebooks are poison to the mind, fostering bad practices while not bringing much value.

I get that notebooks provide a nice environment for tutorials - you get a literate programming + a printf-debugger on steroids, which is very useful when suffering through tensor shape mismatch errors. It's useful for data science or ML 101.

But then I see people using Python notebooks to do actual work and it's horrifying to me. The natural tendency is to write notebooks as a series of cells mutating global state. So each cell has an implicit API defined by its interaction with the global state. 2/9

The API is implicitly a function of cell exec order, but then you can purposely (or mistakenly) exec cells in any order 😬. And this is on top of the usual issues you get with dynamically typed languages. No one can write maintainable code this way, but notebooks get a pass. 3/9
It's interesting (and mildly embarrassing) how much I used to think this too. Holy fuckola, how wrong I was.


Don't get me wrong, our storage engine is the rock upon which everything rests.

As the market matures over the next few years, our strategy and differentiation will shift away from "only we deliver o11y" to exploiting all the unusual capabilities of our storage tier. 😈🐝

Subsecond ad hoc querying over weeks of webscale traffic.. unsampled? ✅

Drill down from high level SLOs to see all of the dimensions, diffed in order of their degree of outlieriness vs the baseline? ✅

The raw speed and flexibility unlocks soooooo many product daydreams.

But that's just good engineering. How to build a product that helps our customers achieve meaningful observability...that is a design problem.

Teaching people to lean into their curiosity and follow the signal? Design (and product) problem.

This time last year, we were hiring our first product leader, our very first design leader. We had ~9 people writing code.

We've been busy 🙃 we now have four in product, seven in design, and just doubled our engineering firepower. Every single one of them is ✨😍amazing 🔥🤩🐝