I'm a product-minded Backend Software Engineer with a keen interest in Developer Experience.
I've worked mostly in startups and fast-paced projects, so I'm used to wearing many hats and learning new things quickly. I prioritize understanding the business and the users' needs so that I can build the best feasible solutions. I specially like working with decisions driven by data using Hypothesis-Driven Development.
- π I've done a lot of work on Double-Entry Bookkeeping Accounting systems in Elixir with Event Sourcing β there's a link to my lib at the bottom.
- π I'm currently looking into an architecture for processing high-volume operations (mostly integrations syncing) with log retention, telemetry and data visualization meant for engineering teams easily develop background jobs for and easily get insights from their jobs' stats.
- π± Iβm currently learning more about designing programming languages, and I'm designing a statically typed one using Set Theoretic Types just for fun.
- π€ Iβm looking for collaborations on how to scale Double-Entry Bookkeeping systems, since they are naturally so bound to sequencial operations per ledger.
- π¬ Ask me about Elixir, JavaScript, Node.js, HTTP Servers, middleware stack applications, Double-Entry Bookeeping, Financial Accounting, DevOps, CI/CD, Event Sourcing, CQRS, etc.
- π« You can also find me on π Twitter: at
@rwillians_
and at@rwillians.bsky.social
. - π You can find my publishings on dev.to (the place is a bit empty thought, I'm still moving my stuff to there):
@rwillians
.
- π You might be interested in my introduction to Double-Entry Bookkeeping Accounting.
- π¨βπ» You might be interested in Bookk, my Elixir/Erlang library that provides the building blocks for operating ledgers using Double-Entry Bookkeeping.
- π express-rescue: this is an old one but still used alot even after express.js got "native" support for async middlewares. Although its primary purpose β make it safe to run async middleware functions in express β is not longer needed, it still adds valeu by enabling developers to create cleaner code thanks to the
rescue.from(errorClass, handler)
function, which gives you the abality to selectively handle errors based on their class name. It's a really small lib and I encurage you to replace it with a single function in your codebase. The important thing here is the idea of how to organize your middlewares and have error handlers that are specific to a route that can translate domain errors to HTTP errors.