RSSAmplifier

Blog

Janmeppe.com šŸ‘‹

I write about how to grow as a machine learning engineer.

janmeppe.com ↗RSS feed ↗10 posts

Latest posts

What people get wrong copying Toyota

People love copying Toyota. Toyota even willingly opens up its factory doors to curious people so they can have a look around. Many people do. With excitement, they start implementing all the tools and processes that they see Toyota succeed with. They add Kanban boards, mark the floor with tape, and copy all the tools they see. But in 6 months, when the dust settles, there is no real impact. No…

Infrastructure thoughts

Last Friday was great. I met up with Arnaud and we had tacos and crazy flavored beer called Michelada. The beer was dark and spiced with fish sauce and Worcestershire sauce. I ate some of the best tacos in my life. Then, on the terrace in the sun, we talked software architecture. Man. Life is good. The unintelligible diagram above is the result of the brainstorm, or the beer, or a bit of both.…

How To Decide

I recently read the book How to Decide by Annie Duke. I think it can be summarized as follows: Don’t judge the quality of a decision purely by its outcome. If you do this (which the book calls Resulting) you underestimate the value of luck: Did you make a good decision but were just unlucky (bad luck)? Or, did you make a terrible decision, but you were lucky (dumb luck)? I find that an interesting…

I like this abstraction

At work, we host a lot of inference endpoints and for that we use Sagemaker . Sagemaker uses this abstraction, and I’ve grown quite fond of it: default_model_fn(model_dir, context=None) : This loads in the model and acts as a setup() function. This returns the model and other related services that your endpoint needs. default_input_fn(input_data, content_type, context=None) : This is basically an…

The cache as a product category

The cache as a product is a product category of its own. Product ideas can be deceptively simple. The cache as a product stores a finished good of something and makes it instantly available with the press of a single button or a single click. Example 1: Quooker For example this is a quooker. It gives you hot boiling water at the press of a single button with of course of safety mechanisms built…

How to report screw-ups without losing trust

Every once in a while you (or your team) will screw up. The best thing you can do, when you inevitably screw up, is to own up to it and take responsibility. Reporting and communicating on this can very easily be lost in the chaos of the day, so here’s a template to help you not forget the most important things. Never let the rush and thrill of things going wrong and then fixing them get in the way…

How I use AI (December 2025)

I thought it would be nice to document how I use AI right now, as of December 2025. I suspect over the coming months/year this will change rapidly! I use ChatGPT for search Right now I mainly use ChatGPT for ā€œnormalā€ search. I notice I’m relying less and less on Google and more and more on ChatGPT, also referred to as ā€œChatā€. I use ChatGPT and Windsurf (with Claude Sonnet 4.5) for coding For…

Advent of Code 2025

I completed Advent of Code 2025 ! Yay! Previous years: Advent of code 2023 in Golang : I wrote one blog post about one specific day in 2023. I don’t think I finished all of it. Advent of code 2024 in Rust : Tried it in Rust last year. Got 27 stars in the end. Lessons learned: Every problem has a parse and solve step . Every puzzle has this step where you take the puzzle input and parse it into…

When in doubt, batch requests

When in doubt, always try to batch your operations. In the context of machine learning operations (mlops) I’ve learned that batching requests is almost always the better answer. Why? Mainly because network hops are expensive and inference is optimized for matrix math. If you must choose between 100 single requests or one batched request of similar size, choose the batched request. The batched…

The Magic Secrets of System Design

I return time and time and time again to John Oosterhout’s timeless advice. Magic secrets: Problem decomposition : Can we break up the system into modules or subproblems that can be solved relatively independently? Working code is not enough, we must minimize system complexity . Complexity is caused by obscurity and dependencies. Test-Driven Design (TDD) does not guarantee good design over time.…