The latest in Sam’s ongoing series reviewing American fast food. God help me it is so hard not to editorialise here.
The Canadian members of the family think Krystal is bad food. The American member thinks its hearty old fashioned American fare.
On this, I side with the American.
I got the 4 Cheese Krystals combo with fries and a coke.
Starting with the least important: the coke was full of hfcs and I didn’t even hate it. Plenty of syrup to make it tasty and addictive.
The fries were on the thick side with a flash of skin. I think they could have been significantly improved by being fresh not frozen and/or a better seasoning. I felt I needed sauce to eat them and that should be optional not mandatory in my opinion. A common issue with fast food fries.
Now down to the important bit. The big event. The showpiece. The Krystals. They’re served in delightful individual boxes, colour-coded to indicate their contents. It’s a lovely experience to delicately retrieve the little fellas from their hiding places. Inside is a square, steamed, white bun. Soft and pillowy. Light as a feather. They’re adorned with American mustard and a tangy pickle.
Now, I had to look this up to be sure, but Krystal cook their burgers in a way unique to America. Never have I found this way of cooking a burger in the UK. They use a flat top grill and place a holey beef burger on top of onions and cover the lot with the bun. This steams the burger rather than frying it. What you get when it all comes together is a moist and dainty little burger. Maybe four to six bites big. There’s a subtle chew to a fresh one, although I did observe a snappy reduction in quality if left undisturbed. Eat slowly at your peril. Scarfing them is your best bet. Don’t save the best until last or they won’t be the best when you get there.
I found their flavour to be classic and simple and honest. I liked the jeopardy of needing to eat them at their best because I think their best is a real treat.
My advice: skip the fries, get a sackful of Cheese Krystals. And if you’re anything like me, grab a handful of extra mustard packets.
Leave Keswick on Spooney Hill Lane heading up Latrigg. Make a wrong turn and then climb up through a plantation onto the grassy moor via what feels like a racing line. The top of Latrigg is broad and open and feels like a lovely place to spend a sunny day, which this is not. I slip on some mud and splatter my knees.
Down to the car park (full) and then start climbing the tourist track up towards Skiddaw, but then cut right for the narrower path by the fenceline up toward Lonscale Fell. I climb into the clouds and Keswick disappears behind me.
I meet a group of lads coming down from Lonscale in full waterproofs. I’d taken off my fleece on Latrigg in a fit of sweat, but in the stiff southerly on top of the fell I am starting to regret it.
Follow the posts to Jenkin Hill; cross the tourist path and climb to Skiddaw Little Man. Impossible to tell in the fog which is the cairn that marks the summit, so I wind up clicking the “Lap” button on my watch 3 or 4 times as I pass more and more austere cairns. Two men with ice axes shelter behind one of them. As they move off I take their place and pull my fleece back on. Clouds race in wisps over the soggy gravel path.
Onwards and upwards to the southern shoulder of Skiddaw where the wind is at its worst, ballooning my hood as I turn to descend to Carl Side. The path is full of shattered slate and slippy halfmelted snow but I’m glad to be out of the wind in the lee of Carl Side’s big, low dome.
I make my way out along Long Side to Ullock Pike, where I meet a family of four coming up the other way. I bet this is a gorgeous ridge walk in clear weather but today there’s not much to see, so I u-turn and skedaddle back up to Carl Side without ado: no further Wainwrights lower on the ridge.
From Carl Side I take the traverse up, up, and up the west side of Skiddaw. The wind seems to have let off, or maybe it’s just at my back. I meet some lads — the same ones from Lonscale, I think — coming down from the summit, and pause to let them pass along the thin strip of muddy slate between bands of windblown snow. I’m at the summit before long.
I continue down the back of Skiddaw, scoping out the top of the Bob Graham descent line, but electing to continue along the fence to Bakestall. The clouds open up back here and the views over the Calvas and the headwaters of the Caldew spread out. There’s an older guy on the little shoulder of Bakestall but otherwise not a soul in evidence. As I descend via Birkett Edge to the Cumbria Way, even the footprints dry up.
I’m speaking metaphorically, of course: it is very wet back here.
I follow the Cumbria Way for a little while up to the foot of Great Calva, and rejoin the Bob Graham line that I left at the top of Skiddaw coming down from Blake Hill and Hare Crag. It crosses the track at a narrow burn, swollen today. Not much drama here, though the path is nearly totally underwater. I regret wearing my trail shoes here; though they’d fare much better on wellbeaten paths at drier times of year, I should have worn fell shoes for today’s expedition. I slip on a rock near the top of Great Calva and just about catch myself to avoid truly Eating It.
The path off Great Calva is hard to find at first — I expect I’m going to have to rely on more experienced feet to guide me in future. The descent features lots of those little mudfilled divots in the heather where your foot slips way forward and throws you off balance and I wind up treading on the heather in the verges just to keep purchase.
Soon I’m down to Wiley Gill and the sludgy bog at its confluence with the Caldew, which is very full at this time of year. I pick a likely-looking spot and ford the river to start the long slog up Mungrisdale Common. I can’t fathom why Wainwright included this in his books, other than to have a big dumb boggy hump to dunk on. The climb is not too bad but the top is a morass of sphagnum and very cold water, and to add insult the wind is blowing hard across the common. The moss eventually yields to water-soaked scree which crumbles underfoot. The clouds descend again as I climb up past Foule Crag on the traverse direct to the summit of Blencathra. There is no one on the summit.
I start the descent via Hall’s Fell but it’s slow going over the greasy rocks just below the summit. I spend most of it sliding down on my bum, my hands groping shakily for purchase. If it were dry I’d fly down this kind of thing. A quartet of lads in regular trainers up ahead seem to be in the same predicament. I call Sam and chat with her asI descend, for company & morale. Across the valley, Clough Head looms. Man I love the look of that hill.
It gets a lot more straightforward lower down — and then I’m crossing fields towards Threlkeld and out to the railway path back towards Keswick. This is simple running; I switch off and cover the last 5km no bother.
I no longer have a firm mental model of what they can do and how they work, which means each additional feature becomes harder to reason about, eventually leading me to lose the ability to make confident decisions about where to go next.
This is a similar problem to one that I’m dealing with in a large legacy system at work: the people who designed the system are no longer around, and many of the decisions made in the interim have been bottom-up solutions to transient problems, rather than cohesive approaches working with the grain of the application.
I suspect that the advent of LLMs for programming is not going to resolve the issue.
Since moving to the UK, I’ve started using the word rubbish a lot. It’s something that they do here. Use different words. Whenever I hear myself say it I wonder if I’m just cosplaying a British person, or if I’m importing British vernacular as a strategy to keep too much attention off of myself, or if it’s some psychological safety thing. Anyway I’m not going to stop saying rubbish because it’s a good word.
The main way that people use it around here is to describe something not very good, but which is also not very important. Nigel Farage’s misguided rightwing populism is awful, but some football club owner’s misguided rightwing populism is rubbish. A leak in the ceiling is awful but an overdone sticky toffee pudding is rubbish.
The weather has been rubbish for like three weeks.
No sun, alternating between fog and low cloud; continuous drizzle. The rivers are overflowing; the bankside paths are three or four inches of slippery clay-heavy mud. In the woods, fallen leaves have disintegrated into a thin, glazed-over wetbrown slurry where even fell shoes cannot find purchase. My own breath hangs in the nighttime beam of my headtorch so I cannot find my way among the puddles. Sometimes, before an evening walk, Ghyll looks at me at the threshold with an expression that says, I think I’ll take a pass on smelling all of the other dogs’ pee this evening.
Rubbish weather; rubbish time of year.
The trees are all dormant and their naked branches reveal the other type of rubbish: the literal kind, tossed thoughtlessly by the way. Vape pens, empty cider cans, crisp packets, dog poo. A plastic road barrier, a dollhouse. A decomposing bag of sharp sand and discoloured takeaway box flattened by car tyres. Shredded plastic blown into the trees. A smear of something white drawing Ghyll's interest.
The town seems to be overflowing with it. Not for lack of rubbish bins but for lack of pride, lack of shame. Row on row of tattered polyester flags shipped direct from Shenzhen, from the factories that took all of the jobs that people round here used to do.
We wrote to the council asking for trash bags and litter pickers and they arrived a few days later. They’re sitting in the garage. We went on a litter pick last year but the rubbish reaccumulated after a few weeks. I need to get back out there.
I feel, much of the time, that my One Trick is that I’m prepared to work a bit harder than everyone else — I’m not particularly smart, nor particularly organised, but I am willing to brute force my way through a problem. I want to brute force this town out of its broken windows thinking. And I guess I need to get started before the leaves come out and hide all of the gross crap lying in the verges.
Every application that I've worked on eventually just generates several 'flavors' of log messages out of stdout and stderr and logs stop being useful because they're filled with 'junk' like request logs.
I’ve tried structured JSON logs with pino, tried tslog, Betterstack, Axiom, and never got it. We've never had a team member that really got value out of logs. I've never really gotten value out of logs. I often wonder if servers should emit logs at all, and instead we should just do telemetry and metrics?
Servers should absolutely emit logs. So should scripts, and so should periodic jobs. Anything that does anything should write logs, because how else are you going to know what happened? Are you going to go into your database and check that a value was updated? Are you going to email your user and ask them whether they got the sign-up email?
Now — admittedly, I don't like structured JSON logs. I don't think they're very useful, because they're not very legible. Because they're just JSON, devs like to put all sorts of crap into them. Much better are simple human-readable logs, something like this:
2026-02-08 19:04:32.123456 Log_Level=INFO Process=<process_name> logReference=archiver:user:complete - User record user_id=123 was set to status=archived in duration=0.002 - internalID=20260208190432123_ABC123_10
A couple of points to call out, here:
Including field=value pairs in the log doesn't really harm readability, but it does make logs queryable. To make an implicit assumption explicit: your logs should be ingested by some kind of aggregator that allows you to index and query; trying to read through a 28-million-line plaintext file is a recipe for a headache. You can route all stdout to a file timestamped by the hour and then ask Claude to write you a simple Go service that indexes those files to your DB of choice and provides an API for querying. You probably don't need Splunk.
Logs ought to have something like an internalID to allow you to join across all logs for a specific request. One really good pattern I've seen is the above, using a microsecond-specific timestamp + 6 random characters + some optional suffix (in this case maybe the index of the record being processed by a nightly job that archives inactive users). This allows you to do a query like SELECT duration FROM logs WHERE internalID LIKE "20260208%" to get a sense for how long requests took on a given day, or SELECT * from logs WHERE internalID=<some_internalID> to see the story of a single request.
Most logging solutions write log as strings and output JSON, but this is backwards. Maintain a list of strings for outputting and write logs as objects/hashes/dicts:
const logs = {
"archiver:user:complete": {
"level": "INFO",
"msg": "User record user_id={userID} was set to status={status} in duration={duration} - internalID={internalID}",
},
// ...
}
// elsewhere...
logger.writeLog("archiver:user:complete": {
userId: "123",
lineNumber: 10,
status: "archived",
duration: 0.002,
internalID: "20260208190432123_ABC123_10"
});
There is some value in keeping different types of logs, although I think most logs should fall into only two categories: INFO and ERROR. Almost all logs should fall into the INFO category; ERRORs are written when something unexpected has happened and indicates that a problem needs to be fixed. If you are getting no ERROR logs you have either been very diligent in fixing problems or not diligent enough at logging. I guess this is kind of what Sentry does, so if you already have Sentry then maybe you don't even need ERROR logs!
Logs should be written a) when something is being measured, like the number of datastore query results, b) when one module or service hands off to another, c) when logic diverges from the happy path, or d) when something has gone wrong. I want to know these things.
I tend to believe that anything more than this is overthinking. The goal here is to be able to say with certainty what your application is doing, with whatever level of granularity allows you to best deliver whatever service you're, uh, delivering. Can you tell that I can't think up a good way to end my blog post about logging.
Theme of the year: travelling, running, drinking a lot of beer, then getting super sick and tired and burnt out for months. Positive on balance but let's try a slightly better balance next year.