Sign in

Sebastian Schöner

@sschoener.bsky.social
729 followers 54 following 327 posts

Programming! - previously at Epic Games, Unity Technologies, Paradox Dev Studios blog.s-schoener.com

PostsRepliesMedia
Sebastian Schöner @sschoener.bsky.social · 15/09/2026
What if Vampire: Survivors was an incremental game? I'm making a game with a huge tech tree (600+ techs), ridiculous events, and screenfilling spectacle. www.youtube.com/watch?v=7ijL... store.steampowered.com/app/5224020/...
youtube.com
FORTRESS FULL FURY TRAILER
YouTube video by Sebastian Schöner
131
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
You can use this feature by getting the profiler from profiler.kerntief.net and then switch to the "next" channel. Coming to "stable" soon. (This instrumentation feature only works for native code, not for C# code.)
profiler.kerntief.net
kerntief Profiler for AI coding agents
Native, C#, Unity — zero integration — line-by-line attribution.
020
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
The sky is the limit, really. I pointed it at a Unity game and asked for a dependency graph of all jobs in the game, works beautifully. You just instrument all scheduling functions, capture the inputs, correlate them with stacks, and render it out.
100
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
This is super useful for both performance profiling and debugging. It avoids rebuilding large applications just to test some theory or collect extra data. It allows you to answer questions like "what is the distribution of input data?" Or "why are some of the calls to this function extra slow?"
100
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
The idea is simple: Instead of hardcoding instrumentation into your source, the profiler adds it into the built program. With a little bit of work the profiler can use the debug symbols for the program to "just" patch the instrumentation into the program at runtime.
100
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
It's quite flexible. Just tell your agent: "I want precise timings for the nav mesh update." -- "I need callstacks for all calls to resolve_collision." -- "Capture the 'address' member of the third argument to poll_clients." Then the profiler will make it happen.
100
Sebastian Schöner @sschoener.bsky.social · 11/06/2026
I have just pushed out an experimental update to my profiler with a feature that I have wanted for a long time: dynamic instrumentation. Add instrumentation to programs at runtime without recompiling them.
110
Sebastian Schöner @sschoener.bsky.social · 28/04/2026
That ship has sailed. The box is open; there is no alternative to dealing with reality.
100
Sebastian Schöner @sschoener.bsky.social · 27/04/2026
See it in action here: player.mediadelivery.net/play/646390/...
player.mediadelivery.net
kerntief profiler demo
Watch kerntief profiler demo on Bunny Stream
000
Sebastian Schöner @sschoener.bsky.social · 27/04/2026
The profiler also has a couple of neat features by itself like giving you estimates for how much time your code is spending on memory stalls and annotating disassembly with inlining information. Take a look and try it for free!
100
Sebastian Schöner @sschoener.bsky.social · 27/04/2026
How does it work? Just point your agent to the profiler and let them measure and optimize. Or record a trace yourself and let the agent interpret the results for you. Works with Claude Code, Codex, pi, etc.
100
Sebastian Schöner @sschoener.bsky.social · 27/04/2026
I have built a Windows x64 sampling profiler for native code+C# to be used by coding agents. Why? Because it is irresponsible to let computers write code but give them no tools to evaluate the performance of their code. Stop guessing, start measuring. -> profiler.kerntief.net
profiler.kerntief.net
kerntief Profiler
3332
Sebastian Schöner @sschoener.bsky.social · 16/04/2026
I wanted Zig's nice toys. My DLL hot reload setup wanted an ABI. We met somewhere in the middle, and now I have the worst of both worlds. Return of the Header File 2, now live: blog.s-schoener.com/2026-04-16-z...
060
Sebastian Schöner @sschoener.bsky.social · 13/04/2026
Thanks. It's nice to hear that. While I don't necessarily just write for others, I wasn't sure how much anyone else actually cares about this topic in particular :)
010
Sebastian Schöner @sschoener.bsky.social · 13/04/2026
More learnings from turning Mono into an optimizing compiler. This time: Why not LLVM? Was it a good idea to start with x64 peepholes? Plus some thoughts about aliasing. blog.s-schoener.com/2026-04-13-m...
blog.s-schoener.com
What I learned from improving Unity's Mono codegen, part 2 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post is a continuation of last week’s post about this journey. To LLVM or not to LLVM? The first d...
180
Sebastian Schöner @sschoener.bsky.social · 07/04/2026
Why does a tiny float4 function blow up into 400 lines of assembly on Mono? Value types, lowering, and lots of unnecessary copies. I wrote up a step-by-step walkthrough from C# to IR to final codegen. blog.s-schoener.com/2026-04-07-m...
blog.s-schoener.com
What I learned from improving Unity's Mono codegen, part 1 | Sebastian Schöner
My current sidequest is to improve the codegen for Unity games (and the editor) running on Mono. This post and the next two are about this process and what I learned. In this post, I am going to give ...
083
Sebastian Schöner @sschoener.bsky.social · 31/03/2026
I have spent some time on a little project to improve codegen for Unity's Mono runtime, which is used in the editor and is even what some games ship on: blog.s-schoener.com/2026-03-31-b...
blog.s-schoener.com
Better codegen for Unity games on Mono | Sebastian Schöner
tl;dr: I am tinkering with improved codegen for Mono to get better performance in the Unity Editor and in Unity games that ship with Mono as their runtime. Not done yet, but please do get in touch if ...
0100
Sebastian Schöner @sschoener.bsky.social · 27/03/2026
How trying out Zig made me miss header files blog.s-schoener.com/2026-03-27-h...
blog.s-schoener.com
I miss header files | Sebastian Schöner
I am currently on a side quest to write some Zig code, or more specifically: take some C++ code that is written in a I-can’t-believe-it’s-not-C style and turn it into Zig. This entire adventure starte...
0100
Sebastian Schöner @sschoener.bsky.social · 19/03/2026
Yes! There's so much code you know that *should* be written, but writing it? Urgh. I currently have an agent binary searching through compiler failures by tracing what optimizations fire in what methods and then deny-listing half of them. The idea is obvious, but implementing it by hand? No thanks!
010
Sebastian Schöner @sschoener.bsky.social · 18/03/2026
It has never been about the typing blog.s-schoener.com/2026-03-18-n...
blog.s-schoener.com
It has never been about the typing | Sebastian Schöner
My friend Stefan Reinalter is asking: I find this extremely worrying, with many of people I respect saying things like “I no longer write code” or “let LLMs do it”. Why did you start programming? Was ...
161
Sebastian Schöner @sschoener.bsky.social · 28/02/2026
I'm flattered :) -- fwiw, it took me a while to understand the RectTransform layouting, but once it clicks, it's very good indeed. I have only recently used a very similar approach for a new UI system.
010
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
Elements need to be keyed manually. There is no auto-keying, but you can often derive it from content (e.g. a button can be identified by its text within its parent scope). It's essentially what DearImGui is also doing :)
010
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
nice side-effect of making all cross-frame dependencies explicit and obvious. One of my main gripes with immediate mode GUIs is the layout lag/stabiliziation frame that you sometimes see, and it was important to me to make it obvious where that exists as a risk.
100
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
but sometimes it happens explicitly. In the case of interactions, the system handles it for you ("oh, you created spot XYZ? That existed last frame and we're hovering it!"). In some other cases, you have explicitly say "I am now querying the position of this box in the last frame". This has the...
100
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
I use hierarchical keys to give every item a hash. The state flip-flops between two arenas: last frame and previous frame. So at the start of a new frame I can use the new mouse pointer to compare it against last frame's data, and then you can query it using the hashes. Most of this is implicit, but
100
Sebastian Schöner @sschoener.bsky.social · 09/02/2026
What I've learned over the last 1.5months of writing a GUI library: blog.s-schoener.com/2026-02-09-g...
1204
Sebastian Schöner @sschoener.bsky.social · 28/01/2026
Putting slim locks on a diet blog.s-schoener.com/2026-01-28-r...
blog.s-schoener.com
Putting slim locks on a diet | Sebastian Schöner
Let’s talk about reader-writer locks. Reader-writer locks are what you employ when you know that multiple readers can safely access a resource concurrently, but once there is a single writer that writ...
040
Reposted by Sebastian Schöner
Clément Grégoire @lectem.bsky.social · 27/01/2026
Ever wrote spin-locks or had to debug them? I have, and I got tired of seeing (and writing) crappy ones, so I did a real investigation this time. Spoiler: trust your OS. siliceum.com/en/blog/post...
siliceum.com
Spinning around: Please don't! - siliceum
Embark on a journey about why you should sometimes trust your OS more than yourself.
1239
Sebastian Schöner @sschoener.bsky.social · 14/01/2026
A piece on how I learned to appreciate the brainless enthusiasm of AI agents. blog.s-schoener.com/2026-01-14-c...
blog.s-schoener.com
Clauded optimism | Sebastian Schöner
This post is a continuation of my last post about programming with AI agents. I wanted to specifically talk about one property of Claude Code: The constant “Yes, of course!” and “That’s a brilliant id...
140
Sebastian Schöner @sschoener.bsky.social · 19/12/2025
An early good bye to 2025: blog.s-schoener.com/2025-12-19-y...
blog.s-schoener.com
An early good bye to 2025 | Sebastian Schöner
There are less than 2 weeks left in 2025 and this means it is time to look back at the last year. In last year’s review I ended on this note: For the next year, I hope to spend more timing painting in...
1100
Sebastian Schöner @sschoener.bsky.social · 04/12/2025
I wrote a few words about when improving codegen actually leads to better performance, motivated by my experiences with cpp2better: blog.s-schoener.com/2025-12-04-w...
blog.s-schoener.com
When better codegen doesn't help | Sebastian Schöner
I want to write a few words about what sorts of games benefit from my build postprocessor for Unity il2cpp builds, cpp2better. It’s not the case that every game unconditionally benefits from it to the...
1100
Sebastian Schöner @sschoener.bsky.social · 24/11/2025
How do you figure out why your C# projects are rebuilding, and how does the MSBuild log help? blog.s-schoener.com/2025-11-24-m...
blog.s-schoener.com
How to figure out why C# projects are rebuilding | Sebastian Schöner
A friend recently joked that all my blog posts are to some level just trauma processing. He is not entirely wrong. Today’s trauma is “why does it take 12s to recompile C# when nothing has changed?” I ...
071
Sebastian Schöner @sschoener.bsky.social · 14/11/2025
can we declare this an international holiday already?
020
Sebastian Schöner @sschoener.bsky.social · 13/11/2025
Every once in a while, I check the reviews on my games on Steam. It's always nice when a game finds the exact player it was made for. New review from July: "We Love this game, it plays as advertised." (store.steampowered.com/app/1584170/...) How I advertise it:
0100
Reposted by Sebastian Schöner
Live++ @liveplusplus.bsky.social · 06/11/2025
Is your company interested in trying Live++? Want to know what it can do for you? Curious about its features? You can now request a live demo through our website - free of charge! liveplusplus.tech/request_live... #cpp
143
Sebastian Schöner @sschoener.bsky.social · 04/11/2025
Do you want to improve the performance of your il2cpp Unity projects, without changing your code or your assets? My il2cpp build processor cpp2better is now officially available (on request). Reach out to me, details here: blog.s-schoener.com/2025-11-04-c...
blog.s-schoener.com
cpp2better, an il2cpp postprocessor | Sebastian Schöner
It’s been a while since I last talked about cpp2better. Time for an official “here it is” post. What is cpp2better? cpp2better is a tool that hooks into your build pipeline for Unity to achieve better...
0147
Sebastian Schöner @sschoener.bsky.social · 01/11/2025
Fantastic! I saw it the other day, excellent change. I am also looking forward to watching the talk, I am sure I'm going to learn some new tricks!
110
Sebastian Schöner @sschoener.bsky.social · 01/11/2025
Ahhh you should have said you are going to be in Stockholm, I would have gladly invited you for dinner!
110
Sebastian Schöner @sschoener.bsky.social · 09/10/2025
I'm currently dealing with dawn as well. We started with github.com/eliemichel/d... (used via github.com/eliemichel/W...), which provides binaries and also does a slightly leaner build of Dawn. Ironically, I have just decided to build Dawn myself today and ditch the binaries :)
github.com
GitHub - eliemichel/dawn-prebuilt: Only look at releases! This fork of Dawn is use to share precompiled artifacts until upstream shares official builds.
Only look at releases! This fork of Dawn is use to share precompiled artifacts until upstream shares official builds. - eliemichel/dawn-prebuilt
010
Sebastian Schöner @sschoener.bsky.social · 08/10/2025
There are plenty of cases where Windows will actually stop you from deleting a file while it is in use. Try deleting a DLL that's loaded into a process, for example. But to be very precise, the entire post shows that Windows doesn't actually stop you very much, so I also disagree with it :)
010
Sebastian Schöner @sschoener.bsky.social · 04/10/2025
Removing the API isn't the only option. It could be marked deprecated, it could get an API upgrader. The upgrade wouldn't Remove the allocation, but it could clearly tell people "this is more expensive than you think."
030
Sebastian Schöner @sschoener.bsky.social · 30/09/2025
Do you want to know about what things might go wrong when cross-compiling from Linux to Windows? No? Ah, too bad. Then don't click the link below. blog.s-schoener.com/2025-09-29-c...
blog.s-schoener.com
What can go wrong in cross compilation | Sebastian Schöner
I have been unfortunate enough to embark on a journey of C++ cross-compilation, by choice nonetheless. In my case, I use clang to compile on a Linux machine to get binaries for a Windows machine. This...
1141
Sebastian Schöner @sschoener.bsky.social · 24/09/2025
That's sort of the thing: when you DO need it, then it's obvious that async/await is a *really* effective design.
010
Sebastian Schöner @sschoener.bsky.social · 23/09/2025
Async, too much blog.s-schoener.com/2025-09-22-a...
Bilbo: "After all, why not? Why shouldn't I make this async?"
1348
Sebastian Schöner @sschoener.bsky.social · 17/09/2025
How I accidentally served as the control group for an AI experiment blog.s-schoener.com/2025-09-17-c...
blog.s-schoener.com
How I became the control group in an AI experiment | Sebastian Schöner
At the risk of alienating almost everyone reading this blog, I wanted to report some first hand experience of interacting with AI for programming. I specifically want to talk about how I accidentally ...
091
Sebastian Schöner @sschoener.bsky.social · 10/09/2025
Yes! The ability to just write a TODO frees up your mind to write the thing that actually matters today.
010
Sebastian Schöner @sschoener.bsky.social · 10/09/2025
How my attitude to "unfinished" code changed blog.s-schoener.com/2025-09-08-t...
blog.s-schoener.com
TODO TITLE | Sebastian Schöner
In the past, I used to work in a codebase that had a lot of // @TODO: comments in it. Those TODOs would rank from obvious, small improvements to calls for features that would require an entire rewrite...
273
Sebastian Schöner @sschoener.bsky.social · 29/08/2025
*completely unrelated to this*, but since this is an opportunity: I'm currently doing a bunch of work with OpenUSD! Thanks for your work on this!
110
Sebastian Schöner @sschoener.bsky.social · 29/08/2025
Thanks! Yes, I think that point is totally debatable. I especially don't think it's *only* for executives. It's more a reminder that a lot of actions from executives really make sense when you see them through that lense (instead of "they are actually insane"). :)
110
Sebastian Schöner @sschoener.bsky.social · 29/08/2025
Unreasonable within reason blog.s-schoener.com/2025-08-29-r...
blog.s-schoener.com
Unreasonable within reason | Sebastian Schöner
Over the years I have come to appreciate “unreasonable” coworkers. What a weird sentence to write, right? When it comes to programming, you are usually fairly well advised to be “reasonable.” For exam...
182