Santiago

Santiago

@svpino.com

I help companies build Machine Learning • I run http://ml.school. • Posts about what I learn along the way.

5.4K followers158 following397 posts

I'm adding this label to the software I sell: "Every line of code in this product was written, reviewed, and approved by a human who understands, guarantees, and stands behind it."

Google: "Our productivity has increased 10% thanks to AI." Random Internet User: "Skill Issue! We are 100x faster!" This is a tough one: I'm not sure who to believe here.

I've been uploading screenshots of my investment allocation to ChatGPT and asking where to invest a specific amount. I've been doing this for about a year. 10/10 recommend.

Writing tests is a superpower, especially now with agentic coding. Every time I ask Claude Code to build something, I get it to run my test suite: 1. It writes the code 2. Runs my test suite 3. Identifies regressions and fixes them 4. Repeats 1/2

If I'm building new functionality, I ask Claude to propose new tests. I've seen so many people simply asking Claude to "verify the code" and hoping that's enough. Untested code is broken code. Write. Tests. 2/2

You should stop treating agents like humans. This has probably been one of the biggest unlocks for me over the past few months in terms of building agents. I see people giving agents personalities, goals, and even titles. But agents aren't people — they are functions with context windows.

When you anthropomorphize agents, you can't see them for what they are. This might sound weird, but errors didn't make sense because I was thinking about agents the wrong way.

Agents are functions. It's much better to think of them as unreliable APIs that will give you the correct answer most of the time. As soon as I did that, my code became cleaner and much more efficient.

I'm working with a huge company on their data preparation pipeline, and they are running a 9-step data processing pipeline. This all happens before their data is ready for training. There's a lot of code here and considerable complexity. 1/4

View full thread

1. Load raw data from 6 different plaves 2. Remove unnecessary tokens 3. Remove low-quality data 4. Remove duplicated data 5. Replace personally identifiable information 6. Normalize data formats 7. Align multi-modal data 8. Enrich the data with domain-specific annotations 9. Tokenize the data 3/4

At this point, the data is ready for training. They are processing more than 10M documents, and the pipeline takes several hours to complete. A significant amount of code was written here, and 0% of it was AI-generated. 4/4

I'm working with a huge company on their data preparation pipeline, and they are running a 9-step data processing pipeline. This all happens before their data is ready for training. There's a lot of code here and considerable complexity. 1/4

I wanted to outline the steps to give you an idea of what production applications typically deal with. Here are the steps in their pipeline: 2/4

Python is the best language in the world. Yes, Python is slower than other languages, but I don't care because most of my work doesn't require it to be faster. Python is fast enough for what I need, and fast enough for most people out there.

On top of that, over 90% of the Python code you interact with uses C/Rust/Fast-thing behind the scenes anyway. The speed at which you can write good Python code is way more important in most situations than the speed at which that code must run.

Yesterday, I posted that large language models are non-deterministic, and people went bonkers. People called me stupid, asked me to go back to school, and used so many other names I can't remember. Today, I want to elaborate. 1/9

View full thread

So, in practice, the LLM you are calling is non-deterministic, even at temperature = 0. OpenAI's documentation tells us that we can expect "(mostly) deterministic outputs across API calls." 8/9

Gemini's documentation says that "responses for a given prompt are mostly deterministic, but a small amount of variation is still possible." I'm not sure about you, but "mostly deterministic" is not the same as "deterministic." 9/9

Yesterday, I posted that large language models are non-deterministic, and people went bonkers. People called me stupid, asked me to go back to school, and used so many other names I can't remember. Today, I want to elaborate. 1/9

View full thread

• If you are using a model scaled across multiple servers, you are not always hitting the same model instance, which increases the chances of finding issues with differences in hardware. 6/9

• Your model provider will patch, retrain, and fine-tune the model you are using without telling you. What was true yesterday isn't guaranteed today. (I'm kinda cheating with this last point, because it's not related to the nature of models, but it's still a problem we have to deal with.) 7/9

Yesterday, I posted that large language models are non-deterministic, and people went bonkers. People called me stupid, asked me to go back to school, and used so many other names I can't remember. Today, I want to elaborate. 1/9

View full thread

Theoretically, temperature=0 makes a model deterministic. In practice, this is not the case. There are several reasons: • Non-deterministic hardware ops can produce different outputs. Two GPU kernels can diverge slightly run to run. This may introduce slight differences in your outputs. 4/9

• Floating-point operations are tricky, and even when using greedy decoding, a model might suffer from tiny numeric drifts that shift the outputs. 5/9

Yesterday, I posted that large language models are non-deterministic, and people went bonkers. People called me stupid, asked me to go back to school, and used so many other names I can't remember. Today, I want to elaborate. 1/9

A deterministic model will always return the same answer given the same input. My argument is that the set of large language models we use today can't fulfill that contract. 2/9

Yesterday, most replies tried to school me about the temperature parameter when using an LLM. Yes, you can set this parameter to 0 to try to force a model to return the same answer, but in practice, you'll find this isn't guaranteed. 3/9

If someone presents themselves as a "Programmer" and somebody else does it as a "Software Engineer," would you consider them equally capable? Do you see a fundamental difference between a Programmer and a Software Engineer?

This guy freaked out when he tried a model much dumber than GPT 3.5. He ended up losing his job. He was an engineer and thought the model was sentient. Imagine what will happen when 99.99% of the world population uses one of these models for the first time.

Anyone can learn to code, especially now with AI. But it's still hard to find good solutions to difficult problems. Stop obsessing about languages, libraries, frameworks, and code. They won't make a difference. Your brain will.

There are *zero* successful software engineers who have only used one language in their careers. Zero. Most have used a dozen languages or more. Programming languages don't matter. They have no bearing on how valuable you are. And more importantly, people who pay don't care.

It's been 24 months since people told me my job was dead for real. (Coincidentally, these have been the best 24 months of my professional career.) Stop paying attention to the hype. Keep investing in yourself.

Do you really think “Project Managers” will survive AI? Really? So many people in my replies seem to think Projeft Managers will be immune to AI. They are even recommending engineers to pivot.

Every developer should consider pivoting to AI/ML. There are infinite opportunities to start enhancing what you're building with AI. Don't stay stuck for too long. Be aggressive with this. Things are moving fast.

Almost every person I've heard complaining about the job market has nothing to show to demonstrate their qualifications. They have no past projects they can share, no one to vouch for them, no publications, no social presence. Nothing. Words are cheap. Show me what you've done.

My favorite all-time computer ever has been the MacBook Pro M1 Pro. I have an M3 Max and an M1 Pro. Of course, the M3 is better on every metric, but there's something I can't describe about the M1 Pro that makes it special for me.

The biggest challenge right now is not to prompt an AI model to produce code. Almost anyone can do that. The challenge is to validate that this code is actually doing what you want it to do. The challenge is to understand how to improve it, fix it, and update it.

There are *literally* infinite opportunities for AI and software builders. We aren’t building more and better because there aren’t enough qualified people. These aren’t zero sum. We aren’t fighting for a fixed number of jobs. There’s no cap on how much we can build. We need more builders.

In 2025, try to place a "Buy" button on the Internet. This is something that could change your life. It certainly changed mine.

Midwits with a chatbot will never build better software than you. These are two of my all-time favorite Software Engineering books: 1. The Pragmatic Programmer 2. Clean Code Read them in 2025. They will pay off for years to come.

Start worrying the minute you see that companies building AGI stop hiring people. Right now, all of these companies have hundreds of open positions. That should tell you everything you need to know.

The best code is the one you didn't write. The second best code is the one that solves the problem. The best tool is the one you already have. The best solution is the simplest one. Always make it work first. Make it better later.