The Pragmatic Engineer's banner
The Pragmatic Engineer's profile picture

The Pragmatic Engineer

@Pragmatic_Eng48,173 subscribers

Big Tech and startups, from the inside. The #1 technology newsletter on Substack. Sign up at https://t.co/MPNdQSVnwV. Podcast: https://t.co/nVOulBGYoh

Shorts

Imagine interviewing a candidate who looks like a very strong coder. Almost extending an offer. But turns out, the candidate is a deepfake. This actually happened with a startup called Vidoc Security - twice! Deepdive with all the details:

Imagine interviewing a candidate who looks like a very strong coder. Almost extending an offer. But turns out, the candidate is a deepfake. This actually happened with a startup called Vidoc Security - twice! Deepdive with all the details:

30,497 次观看

Videos

Pragmatic_Eng's profile picture

What it’s like to receive a job offer directly from Satya Nadella. Kelsey Hightower, former Google Distinguished Engineer, on the Microsoft offer that revealed a pay tier he didn't know existed: “I got this email from Satya, the CEO of Microsoft. He wrote this nice email: 'Kelsey, heard you had a good experience with the team' - remember I did the interview at the Microsoft headquarters - “heard really good things from the team, just wanted to let you know, you're going to be respected here. We're going to support you as a team.” I'm like, damn, support as a team? Coming from the CEO? So, number one, what an honor. This is the CEO of Microsoft. He has so many more important things to be doing than to be emailing me about a role. I opened the PDF - not very often in your career does a zero get added to the equation. And so you're looking at this like, I didn't even know that they do that. We know that it happens. But the person that graduated from high school in 1999, that chose the A+ Certification didn't know that was available. Even while I was at Google having all the success. Google paid me pretty well too, but I didn't know you can add another zero still. And I'm like, wow. I showed my wife and she was the one that said you should just go interview, like put your ego to the side and let's go see what's out there, so shout out to my wife. And so I get the PDF, and I'm like, okay, this number is perfect. Honestly, I don't know what to say, but let’s just find out, is this really the only number? So I remember giving a counter: you know what, I think it should be this. The funny thing is, Microsoft countered back higher, like we're not playing around. I'm like, oh, whoa. Now I understand that I don't understand this part of the game.”

The Pragmatic Engineer

556,044 次观看 • 1 个月前

Pragmatic_Eng's profile picture

Devs will “cash in” AI gains as time. Dax Raad(dax), creator of OpenCode, on the incentive problem most companies are ignoring: “We forget how big the software engineering industry is. Every company in the world employs software engineers to some degree. The majority of these environments aren't like the most motivating, exciting environments. Most people there are trying to do their job, go home to their kids, have a reasonable life. You give them a button that lets them do their work faster. The natural place for them to go is to hit that button as much as possible, do the same amount of work and just cash in that extra time, right? Which makes total sense. If you have no reason to be above and beyond motivated, you're not going to really use that to push your organization harder. Yeah, these tools may make you more productive, but be really realistic about your employees. Where are they going to cash in those gains? Obviously some companies are not like that. Employees are motivated. They have good reason to be. They're compensated in a way that makes sense, but most places aren't like that. The problem with that is usually in those environments there will be a couple people that are irrationally motivated because they love the work they do, et cetera, even though the rest of the company isn't as motivated. They're usually the ones that are trying to make sure everything is good quality, trying to push everyone to try harder. They're all now overwhelmed by slop PRs. And we've had a few people on our team that have joined and their previous company was like this. They were the person that still cared. The rest of the organization just hits the button and gets their tasks done and they're drowning in just garbage and they're getting burnt out and they're leaving.”

The Pragmatic Engineer

315,268 次观看 • 1 个月前

Pragmatic_Eng's profile picture

Anyone who thinks software engineering is ‘going away’ doesn’t understand the job. Kent Beck 🌻, creator of XP and TDD, on why Dario has it wrong: [Gergely: Dario said, I quote, ‘coding is going away first, then all of software engineering’. ] “That's a statement by someone who doesn't understand software engineering. Coding is part of what you're doing, but it's only a small part of what you're doing, even if it takes up a fair amount of time. You're building confidence, you're building connections with other people, you’re building your own understanding. All those things are happening while you're coding. And coding's actually a great way to cement understanding. The more you program, the more you understand the domain that you're working in. And so to say, well, we're just going to pass all that off to a machine. Well, that's not all there is to it. A couple of days ago I saw a phrase, and it really hit me, that we're accumulating code faster than we're accumulating trust now. And that sense of trust comes from me struggling to understand some domain concept, ah, I get it! I represented it in the code. I write tests that demonstrate that I really did understand it and now, I trust my program. If we're programming together, that act of programming together means that we trust each other more. And none of that can be automated. None of that occurs. If we prompt, we get the finger guns, the genie goes, yeah, it's all finished, boss. And it is like, well, hang on, finished. What's finished?”

The Pragmatic Engineer

20,322 次观看 • 20 天前

Pragmatic_Eng's profile picture

Pi was built when there were already agent harnesses around. Here’s why Mario Zechner(Mario Zechner), found them suboptimal and built Pi, a minimalist self-modifying agent: #1 - Mario initially was a believer in Claude Code: "I was a believer in Claude code because they were the first that packaged agentic search up in a really compelling package. And at the time that fit my workflow really well. Everything around the LLM was kind of nice and tidy and easy to understand. I was super happy. I was proselytising Claude code." #2 - Reverse engineering Claude Code highlighted the degradation that Mario felt as a user: "I personally like simple tools that are stable and that I can rely on. Even if they have non-deterministic parts, all the deterministic parts should be as stable as possible. That was just not the experience with Claude Code around summer 2025. They would take away your control of the context. They would inject stuff behind your back, which is bad. Then, your workflows stopped working because there's now a system reminder that you don't even see in the UI that would modify the behaviour of the model. They would also do this to the system prompt. I built a little service where I can track the progression or evolution of the system, prompt and tool definitions and, with every release, it was messing with stuff. That just messed with my workflows and I don't appreciate that." #3 - PI was built with an appreciation for simple and reliable tools: "If I commit to a development tool, I want it to be a stable, reliable thing like a hammer. I don't want my hammer to break a different spot every day. That's terrible. We need somebody who goes the full velocity kind of way. But I don't want to work with a tool like that."

The Pragmatic Engineer

62,825 次观看 • 2 个月前

Pragmatic_Eng's profile picture

Author of Designing Data-Intensive Applications, Martin Kleppmann, gives us a peek into "The Troubles with Distributed Systems" and why you can't assume things behave well in distributed systems: "The whole idea is that in distributed system theory, there are certain things that we tend to assume. For example, we just assume that there's no upper bound on how long it might take for a message to go over the network. So when you send a message, it might arrive within a hundred microseconds, or it might take 10 years, and distributed system theory just doesn't make any assumptions about that sort of timing if we can avoid it. Or rather, some theory does make those assumptions, but it's a dangerous assumption to make because occasionally the network delay does become much higher than what is typical. Another thing is about crashes. Distributed system theory just says nodes can crash, but what does that actually mean? What in practice does it mean for a node to become unavailable? Because it might be a software crash, but it might be a hardware failure. It might be somebody unplugging the power cable. It might be that the node is actually still running, but it's just become disconnected from the network. And so, the point of this book chapter really is to defend and justify the theoretical models that we use for analysing distributed systems and to give a lot of stories and case studies to show that, actually, tonnes of stuff does go wrong. Don't believe anyone who says, 'Oh, failures are rare. Don't worry about it. It's fine’. Actually, no. If you want to make things reliable, you really do have to worry about a whole bunch of weird, unusual, but certainly possible edge cases. Timing is another one of those things. It's very easy to assume that your clocks are correct, and most of the time the clocks are pretty correct, but we just can't rely on it because actually they're just not precise enough on the whole. It's very tempting to make certain assumptions that things are well behaved and in distributed systems, we just have to try to get away from those assumptions if we want the systems to work reliably, even in the face of things going wrong."

The Pragmatic Engineer

50,567 次观看 • 3 个月前

Pragmatic_Eng's profile picture

Why did so many languages copy async/await from C#? Anders Hejlsberg(Anders Hejlsberg) - creator of TypeScript, C# & Turbo Pascal - on what they got right with the design: #1 - async/await was designed to solve a common problem in the event-loop model: "A lot of languages are built around cooperative multitasking in the sense that they have an event loop that sits and dispatches events. Then you handle the event and then you yield back to the event handler loop. And it all runs in a single thread cooperatively. The problem with that is if you then want to do some long running work: how do I stop in the middle of this piece of long running work and yield back to the event loop cooperatively? And then when my result is ready, I can come back and continue executing here." #2 - state machines are the solution, but hard to build: "Well, in order to do that in an inverted architecture like that, you have to build a state machine. State machines are notoriously hard for people to implement because you've got to move all of your state off of the stack into objects. And then you have this big case statement that envelopes your entire logic. It's a nightmare to figure out. But, the transformation from serially executing code into a state machine, its continuation-passing-style translation is actually one that you can do in a machine-based fashion." #3 - compilers are good at writing state machines: "You can have the compiler write the state machine if you introduce syntax that allows you to indicate where you want to yield. And that's what await is. Await is basically saying, I want to yield here, and I want to yield this promise, and then when the promise completes, I want you to come back here and continue executing. Then the compiler writes a state machine around it and it actually turns it into this big switch statement and moves all of the state that survives across the await into something that's heap allocated. So it can be brought back. And doing all of that work is something that compilers are great at. And so that was sort of the idea that we have this new style of programming where we're using promises or the equivalent of promises and the ability to yield and then we have callbacks. But trying to write your program in that style, that's also what JavaScript suffered from a lot. It's like all this callback style stuff. With Async and Await, you get the illusion that you're just writing normal sequential code and then the compiler does the painful transformation for you. That turns out to be really useful."

The Pragmatic Engineer

13,258 次观看 • 1 个月前