A few years ago, I acquired the habit of regularly collecting and sharing with my work colleagues the highlights of what I was reading from week to week. As I’m preparing to start working at a new company soon, I’ve been wondering if it would be useful to share this with a wider audience, and how I would do it.

I’ve decided that the easiest way to start is to use this blog. I’m not sure how often I’ll do these, or if I’ll end up creating a separate section to avoid drowning out my more specific posts with just what I read on X month ones, but in the spirit of agile and YAGNI, here’s my first stab at sharing what I’m reading.

I don’t often get feedback, but it’s definitely welcome as always — let me know what you’ve thought of these articles and the format in general :)

Without further ado, here’s what’s been keeping me interested:

  • Why Aren’t More Users More Happy With Our VMs? Part 1 and Part 2 (Blog Post): A writeup and analysis on how VM benchmarking often gets done wrong, including the benchmarking done by VM implementors, and how that can lead to wrong optimizations or trade-offs being taken as a result.

  • Rework (Book): Describes the approaches championed by Jason Fried, David Heinemeier Hansson on managing their company Basecamp, and what we can learn from them. Its focus on staying small and doing more with less really resonated with what I’m thinking these days. (There’s an audiobook version as well!)

  • Nice performance improvement landing in Python 3.10 (Tweet):

  • OpenJDK: add diagnostic command to write Linux perf map file (Pull Request): This pull request adds native support for the jcmd tool to generate the symbols needed when profiling OpenJDK with the Linux perf tool, without needing to use the third-party perf-map-agent. Translation: One less step to worry about when profiling using perf — the JVM will now do the generation itself.

  • Building Netflix’s Distributed Tracing Infrastructure (Blog Post): Deep dive on a distributed tracing design that allows very flexible sampling decisions (up to 100% for a specific subset of requests, even), as well as how to handle storing data from traces using a combination of architectural improvements, late sampling, compression and tiered storage.

  • Faster CPython (Website): Collects a number of ideas, experiments and measurements around improving the performance of the CPython interpreter.

  • Pitfalls of Object Oriented Programming (PDF Presentation): This presentation discusses how some common object-oriented idioms can cause bottlenecks in high-performance realtime applications (*cof* games *cof*) and how to refactor and break apart such approaches to extract more performance.

  • When busy-spining Java thread is bound to physical core, can context switch happen by the reason that new branch in code is reached? (Discussion): This Stack Overflow question triggered an amazing answer by Andrei Pangin (the author of async-profiler) discussing how and when the JVM interrupts user code to perform optimizations and measurements.

  • Dynamically Typed Languages (PDF Article): Interesting discussion on how dynamic languages differ from static languages, and what they have to offer.

  • Magic-Wormhole: Get Things From One Computer To Another, Safely (Tool): Small tool to securely transfer data between two computers, even behind firewalls and whatnot.

  • Enter the Vault: Authentication Issues in HashiCorp Vault (Blog post): Deep dive discussion into two recent issues with the Vault system for securing access to credentials. It highlights how even an apparently solid design can be breached by exploiting wrong assumptions and incomplete implementations when such system is integrated with third-party APIs.

  • INSPIRED: How to Create Tech Products Customers Love (Book): Describes what and how a product managers can work together with engineering teams and other company stakeholders to discover and deliver really good solutions to customer’s issues.

    It took me a few months to go through the entire book, but I cannot recommend it enough — even for, and especially for engineers that regularly work with product managers. I especially liked the "missionaries vs mercenaries" categorization of product teams, as it really aligns with my own experience in the field. (There’s an audiobook version as well!)

  • Nebula: A collection of Gradle plugins, built by Netflix (Tool): The Netflix nebula set of plugins extends the Gradle built tool with a number of nice features — better metadata, a dependency.lock file that works like Ruby’s Gemfile.lock/gems.locked and enables reproduceable builds via locking of dependency versions, ways to manage versioning and deployment, etc.

    This set of plugins is really interesting, and especially the version locking features are something that I never quite understood why/how people were getting by without them in the JVM ecosystem. Glad to see that Netflix’s engineering agrees with me ;)

  • Performance Summit IV (Conference): Upcoming free online conference with talks from engineers working in the performance profiling space.

    I’m particularly interested in seeing the "BPerf: Porting production profiling from Windows to Linux" talk describing the ongoing work to bring Windows' ETW tooling to Linux, as I’ve been fascinated in the past months by that toolkit, that I can describe as similar to Java’s Flight Recorder tooling, but at the OS level; as well as "Perflections: Tracking the perf of perf programs" as I’m also quite curious on how to safely use and deploy perf-based solutions directly to customers (e.g. when you’re no longer using it on your local infrastructure).

  • Raygun (Tool): Another hosted Ruby APM; uses flame charts for visualizing traces.

  • Technology Radar, volume 23 (Magazine): The latest version of Thoughtwork’s influential periodic review of techniques, tools, platforms and languages & frameworks in the industry. As always, a recommended read.

  • eBPF superpowers (Talk): Great "hello world" introduction to Linux’s eBPF tooling:

That’s it for this round!