Joined March 2018
7 Photos and videos
What AI lacks in terms of software engineering is not capability anymore. What it lacks is trust and accountability. SWE will likely pivot from solving first-order business problems directly into making the most out of the new scarce resource: accountability of human teammates.
1
35
I can think of two things that are the highest leverage items that humans can drive: test policies (what to test, how to test, how to discover what to test) and architecture (anticipating future changes).
25
Wow, GPT 5.3-Codex xhigh is much stronger than Opus 4.6 for the tasks I'm working on. Not even close.
70
16 Oct 2025
AI generated code need not be hard to review. After the changes look more or less complete, make them create commits in logical* order. *Not necessarily in the order it was written, but in the order you (as a human) would like to review them.
37
I used to also avoid leaking mutation in public APIs, but at one point I realized my literal job was to write APIs that mutate state or do side effects, just over HTTP.
Replying to @olafurpg
Imperative core, functional shell is my favorite design principle. Many algorithms are dramatically simpler to implement with mutable state (for example, depth first search in graphs with cycles). Just don’t leak the mutation into your public API
2
114
28 Sep 2025
Tried writing some decrel code today. Opus 4.1 has absolutely no idea what needs to be done to add a simple new feature even with ultrathink, despite relevant code fits entirely in its context size. I'll believe this AGI thing once it can write a substantial PR on decrel.
1
144
I wrote a blog post: Making Data Races Unrepresentable, or Read-Modify-Write Considered Harmful (for business logic flows) purelyimpure.com/data-races/
3
4
558
I find myself slowly going against the Scala trend: because you can do something at compile time, doesn't mean you have to.
3
8
475
29 Oct 2024
It's a little annoying in Scala that with subtype overrides, I can define the output type to be a subtype to be of what's defined in the interface, but with typeclasses I can't. This with the fact that you implicit values requires type annotation makes a few tasks not so easy.
1
1
191
Haemin Yoo retweeted
Wrote a blog post about code-level architecture for the ZIO stack. This is about a pattern I'm using more and more often that leverages ZPure, ZSTM and ZIO for simplifying business logic and concurrency. blog.pierre-ricadat.com/the-…
5
23
90
5,574
21 Jun 2024
How do I compose generators so that the resulting generator is always coherent? Is it a matter of domain design or the generator composition? I have no idea how to even approach this when the composition depth (flatMap) can be arbitrarily deep.
1
167
22 Jun 2024
I think it is hard to use generators for testing business logic flow. Thoughtfully crafted and hardcoded database state seems like a better idea.
1
1
128
24 Jun 2024
Wait... isn't StateT enough to solve this? Why am I thinking so complicated 😅
1
90
22 Jun 2024
If we assume relations between domain entities are immutable, they can be cached. Relation cache to the parent entity can always be trusted, but relation to the children entities may be missing new entries(?). In any case, we can offload some rdbms joins to the app and redis.
2
135
21 Jun 2024
One unexpected (good) side effect of exposing a GraphQL schema is that it helps normalize my domain models. One field only ever have to be in one place, and there need not be a giant class that duplicates fields from other class, just so that REST api can expose it.
1
99
14 Jun 2024
I am struggling to configure scalafmt, to add a newline after toplevel package statement line(s), but make it not touch anything else. Anyone has done this before? The align.tokens part is most confusing. scalameta.org/scalafmt/docs/…
1
52
14 Jun 2024
OK this is what I got: newlines.topLevelStatementBlankLines = [ { blanks { after = 1 } } { regex = "^(Defn.*|Term.*|Decl.*)" } ] I ended up also getting the newline after import, if you don't want, also add `Import` in the negation group.
1
37
14 Jun 2024
astexplorer.net/#/gist/ec561… The AST Explorer did help, but I wish I didn't have to use this. Rather, it would've been much easier if there was a pretty doc page with all of the possible regex matches.

52
30 Oct 2023
Is it just me, or does sbt get extremely slow after sleep/wakeup in MacOS with Java 21? Up to 17 I didn't see this problem.
1
93