Skip to content
> andrew_dryga
Projects
Blitz
Single-handedly owned ~20 high-traffic backends end-to-end (77 Elixir umbrella apps, 70+ Redis/50+ PostgreSQL instances) serving ~25k RPS with peaks to 150k for a 7-figure DAU product.
Firezone
WireGuard-based replacement for legacy VPNs. Re-architected and developed key components of the enterprise product. Led infrastructure as code with Terraform on GCP. Open source, YC W22.
eHealth: National Health Service of Ukraine
Co-designed and built the national platform behind reimbursements, EMR, e-prescriptions, and nationwide APIs for clinics and pharmacies. Led architecture, security, hiring, and hands-on Elixir + DevOps. All development open-sourced under Apache license.
Hammer Corp
Advertising platform for thousands of US automotive dealerships: ingests inventory, syndicates ads to major channels (at peak accountable for 30%+ cars on Facebook Marketplace), measures conversion, and collects leads to a unified interface with 24/7 human first-responder reps answering within 60 seconds.
Ryker
A self-hosted AI teammate for engineering and on-call work. Ask in Slack or GitHub, share an alert, or give it a coding task. Ryker investigates, shows what it found, and keeps working as you follow up.
Emisar
Gives AI agents a reviewed catalog of infrastructure actions over MCP. Policy decides which requests run, need approval or are denied. Typed inputs, checks on the host and searchable run records let an agent keep working within the access you intended.
co:op
A runtime and orchestrator for coding agents. Run Claude, Codex or Gemini in a container, limit the project files and network access it receives, and work through a task queue in a separate fork you can review.
Offloader
Serves repeated product queries from published Parquet snapshots through declared REST endpoints. DuckDB runs on your infrastructure; your data pipeline owns the exports. It fits customer-facing reads that can tolerate the snapshot's age.
Bullpen - Virtual Sales Floor + CRM
When COVID hit, our sales team lost the buzz of the office. We built a platform that brought it back - a CRM with virtual space where reps could collaborate, learn from each other in real time, and keep the same drive. Then we turned it into a standalone product with AI sprinkled around it.
TalkInto - Omnichannel Messaging Platform and CRM
Messaging/voice backbone powering products like Hammer, Bullpen, and Text2Buy: SMS, voice, various chat integrations, and web chat with clean agent UI and APIs. Features included local numbers, call recording, and routing.
Contractbook
Built the self-service billing system, B2B API and marketing pipeline that let kicked off the business growt.
Financial P2P Marketplace
Architecture and implementation for an institutional P2P lending marketplace for one of Europe's largest lenders ($9B portfolio).
Mbill - P2P Transfers
P2P transfer service for individuals and small-to-medium online merchants. Create a page for your card and share a link to receive payments. Includes customer cabinet, payment button constructor, and transaction reports.
Mastercard MoneySend
Front-end application to receive P2P transfers sent via recipient phone number. Country-wide rollout of phone-number-based transfers.
Forza - PayDay Loan Websites
Front-end, SMS gateway, decision engine, and marketing tools for an online lending originator operating in Moldova, Bosnia, and North Macedonia.
Best Wallet (ex. MBank)
eWallet cloud for worldwide money transfers. For B2C: pay for 2,700+ services across CIS, send money to phone numbers, cash out via partnered banks or cards. For B2B: free SaaS white-label eWallets for banks with simple integration.
IPSP.com - Payment Pages
Responsive landing and payment pages for an Internet Payment Service Provider. Improved conversion on payment flows via lighter UI.
ECommPay - Mobile App
iOS and Android business application for partners to manage payment platform on the go.
Autopayment
Automatically pays for bills based on two types of rules: by threshold of supplier balance (e.g., mobile top-up) or on a periodic basis.
Mobile Cashier
Turns Android devices into payment terminals for deposits and top-ups across numerous service providers, from cellular carriers to credit card loan repayments.
OnlyTTY
Share a shell or a single command through a link and control it from a browser or phone. Terminal traffic is end-to-end encrypted, and the relay never sees the session keys.
Sage - Sagas Pattern in Elixir
Dependency-free implementation of the Sagas pattern for distributed transactions with explicit compensation. Guarantees that either all transactions complete successfully, or compensating transactions amend partial execution.
LoggerJSON
Structured JSON logging for Elixir with first-class formatters for Google Cloud Logging, Datadog, and Elastic (ECS). Drop-in :logger formatter/handler with runtime config helpers.
Confex
Runtime configuration from environment variables with type casting and adapters (:system, :system_file). 12-factor friendly configuration for Elixir applications.
Elixir Bench
Continuous benchmarking platform for the Elixir ecosystem. Automatically runs performance benchmarks on each commit to detect regressions and track language performance improvements over time. Won Spawnfest 2017 and later accepted into Google Summer of Code.
Annon API Gateway
Configurable API gateway acting as a reverse proxy with a plugin system (ACL, Auth, Validation, CORS, Idempotency), request/response storage, metrics, management UI, and auth provider. Reduces boilerplate across services.
Ecto Mnesia Adapter
Ecto adapter for OTP's built-in Mnesia database that works in the same memory space as the application, providing extremely low latency without deploying a separate database.
Gandalf - Decision Engine
Open-source decision engine SaaS for rule tables, champion/challenger split testing, revision history, decision analytics, and debugging tools.
Man - Template Rendering Engine
Stores iex, mustache, or markdown templates and renders them with localization to HTML or PDF via REST JSON API. Includes an easy-to-use management UI. Free one-click deployment to Heroku.
Vagrant Box OS X
macOS Vagrant boxes for VirtualBox. Run UX tests or build iOS/Mac applications on any machine with a few CLI commands. Used by many teams worldwide, including Boxen. Got a $50k S3 bill in month one, was sponsored by Cloudflare for a while, and eventually taken down over Apple licensing.
Parasport - Foundation Portal
Medium-sized web portal for a foundation supporting Paralympic sport, physical rehabilitation, and social adaptation. Built on October CMS.
OneDayOfMine
Storytelling social network that helps see other people's lives through their eyes. Capture moments through the day and share them with descriptions - from special forces in Belarus to a family visit to a film museum in South Korea.
L15 - Night Club x Coworking
Experimental mix of coworking space and a night club ('clubworking') in Kyiv. Turned the office into a best-in-class night club and ran terrace events with world-class DJs every weekend for an entire summer.
Happy Customer
Outsource project to motivate small and medium-sized businesses to provide better customer service via public feedback and simple tracking.
truBrain 1.0
An early-stage product that needed help. I took some swings at UX and performance for free because I wanted to see them make it.
Blog
Your data warehouse is the wrong place to serve a dashboard
Customer-facing dashboards ask the same few questions all day, on data that's fine a few minutes stale - but every page load runs a live query against a warehouse that bills per query and was never built to sit behind a live screen. Here's the serving layer I built to move those reads onto cheap snapshots on my own infra.
Treating physical servers like cloud VMs
Modern BMCs turned bare metal into something you can terraform apply: declare a node in git, reimage it over the network, verify it against a receipt. How our cloud-to-on-prem migration kept the cloud workflow - and why that's exactly what LLM agents needed.
Your AI is brilliant. And blind
AI agents got good at writing code - and they're still flying blind on your infrastructure, guessing at problems they can't see. The obvious fix is to hand them SSH and let them run wild. Here's why I didn't, and what I built instead.
One brain, two agents: an OS for autonomous coding agents
AI agents lose context, stop early, and skip work. The fix is not a smarter prompt. It is a small, file-based operating system: a queue they cannot abandon, hooks they cannot ignore, and one shared source of truth.
Running an AI coding agent you can't trust
You can't trust an AI coding agent, and you shouldn't have to. Put it in a sandbox where the worst case is boring: one repo damaged, no secrets exposed, and a VM you can rebuild in a minute.
Design APIs with CDN in mind
Most APIs are designed for developer convenience, not cacheability. A few structural changes can make CDN do the heavy lifting for you.
The Real 10x Engineer
The real multiplier in software isn’t writing more code. It’s judgment: choosing the right problems, avoiding unnecessary systems, and reducing the maintenance burden that slows teams down.
Introducing Sage - a Sagas pattern implementation in Elixir
Distributed transactions are hard and expensive, if you wonder how to pragmatically handle them in a mid-size project - this article is for you.
Run stale tests on file change in Elixir
Mix is an awesome tool but most Elixir beginners are not aware of all its features. mix test --stale is one of them and can make your workflow much better.
Runtime configuration, migrations and deployment for Elixir applications
Shortly after moving from PHP to Elixir I've faced a common issue, the way how do we deploy applications is totally different from the one I'm used to.
National Health Service, on Elixir and Kubernetes
A look at building Ukraine’s national-scale eHealth platform with Elixir, Kubernetes, and pragmatic architecture for reliability and scale.
Bringing blockchain properties to centralized government databases
Making it cryptographically impossible to alter records in a database even with full system access.
Alternative approach for sensitive file uploads
Using signed URLs for secure file uploads directly to cloud storage, bypassing your application servers entirely.
Designing a P2P Lending platform with Elixir in mind
With this post, I want to share with you the design process on one of our latest projects - a P2P marketplace that was intended to be used by hundreds of thousands of users.
$ cat ./blog/servers-like-cloud-vms

Treating physical servers like cloud VMs.

I run terraform apply from my laptop, and a physical server in our colo ejects its virtual DVD, mounts a fresh install image over HTTP, reboots, wipes its root disk, reinstalls Debian, and rejoins the cluster - same identity, workloads rescheduled - in about twenty minutes. Nobody at the datacenter gets a ticket. With one variable, it’ll do that to all five Nomad machines, one at a time, in an order that keeps Raft quorum alive.

We’re migrating Blitz from the cloud to bare metal. When I started, the part everyone warned me about wasn’t the hardware - it was the workflow. In the cloud, instances are disposable: broken one? Delete it, the autoscaler makes another. On metal, the story goes, every server becomes a pet with a name, a history, and a two-page runbook for when it gets sick. That was true ten years ago. It stopped being true, and the reason is a little computer embedded in most servers you would buy.

The second computer taped to the first one

Every serious server ships with a BMC - iDRAC on Dells, some MegaRAC flavor on most of the rest. It’s a separate tiny computer with its own network port and its own OS, and it’s alive even when the host is powered off. It can cut power, change boot order, stream the console, and mount an ISO over the network as if someone walked over with a USB stick. For years the only way in was a Java KVM applet that worked on one browser from 2011. What changed is Redfish: a plain JSON-over-HTTPS API that’s now good enough to build on.

For example, here’s the entire “reinstall this machine” sequence - four calls with curl:

# 1. Eject whatever's in the virtual CD drive
curl -ksu "$CRED" -X POST -d '{}' \
  "https://$IDRAC/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.EjectMedia"
sleep 5   # iDRAC vMedia can't pipeline; back-to-back calls wedge it

# 2. Insert our install ISO - the BMC fetches it over HTTP itself
curl -ksu "$CRED" -X POST \
  "https://$IDRAC/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia" \
  -d "{\"Image\":\"$ISO_URL\",\"Inserted\":true,\"WriteProtected\":true,\"TransferProtocolType\":\"HTTP\"}"

# 3. Boot from it, once
curl -ksu "$CRED" -X PATCH "https://$IDRAC/redfish/v1/Systems/System.Embedded.1" \
  -d '{"Boot":{"BootSourceOverrideTarget":"Cd","BootSourceOverrideEnabled":"Once","BootSourceOverrideMode":"UEFI"}}'

# 4. Pull the trigger
curl -ksu "$CRED" -X POST \
  "https://$IDRAC/redfish/v1/Systems/System.Embedded.1/Actions/ComputerSystem.Reset" \
  -d '{"ResetType":"ForceRestart"}'

Eject media, mount media, set boot target, power cycle. Those are the same primitives a cloud API uses to rebuild a VM - except here the control plane is a chip bolted to the motherboard, and it’s yours.

There’s even a Terraform provider for the Dell side. For example, our RAID volumes are declared as redfish_storage_volume resources next to everything else, pretty much the same way I would do it for GCP or AWS.

This is not scary anymore

With a bit of scripting and a good BMC, the node declaration became just 30 lines of Terraform code:

nodes = {
  "node01" = { role = "server", host_index = 101, idrac_ip = "10.9.9.11" }
  "node02" = { role = "client", host_index = 102, idrac_ip = "10.9.9.12" }
  # ...
}

module "node01" {
  source = "../../../modules/bare-metal/nomad-node-iso"

  name = "node01"
  role = "server"

  network = {
    bond = {
      slaves       = ["ens1f0np0", "ens3f0np0"]
      mode         = "802.3ad"            # switch ports expect LACP
      vlan_id      = 100
      address_cidr = "10.0.10.101/24"
      gateway      = "10.0.10.1"
    }
  }

  idrac_ip  = "10.9.9.11"
  roll_iso  = local.roll_iso_per_node["node01"]  # false by default
  install_after = module.node03.install_id       # reinstalls are serial
}

Everything shared is hoisted into locals; as a comment in the file puts it, the diff between two nodes is “just hostname + IP suffix + role.”

On apply, the module renders a Debian preseed and a cloud-init bundle from templates, repacks a pinned Debian netinst ISO (downloaded once, SHA-256-verified) into a single-entry “Automated install” image with xorriso, and uploads it to a bucket.

Then the BMC pulls that ISO over HTTP, the installer runs unattended - bonded NICs, VLANs, LVM layout, all preseeded - and on first boot cloud-init brings up Tailscale, Consul, and Nomad.

About three minutes after cloud-init starts, the node is back in the cluster taking work. No PXE server, no provisioning appliance, no golden image drifting in a corner. At our scale - a handful of machines per site - PXE infrastructure would cause more work than it saves.

Mimicking the cloud storage model

Another thing that feels cool in the cloud is how you can mount storage and, optionally, treat it as persistent, even when the instance is disposable. This can be done on metal too, just with a little care.

Each of our servers has two RAID-1 volumes: an 80 GiB one for the OS and a big one mounted at /opt. The OS volume is cattle - wiped on every roll. /opt survives, and the first-boot script refuses to format a disk that already has a filesystem:

# Idempotent: skips mkfs if the device already has a filesystem, so a
# reinstall that re-uses the same data disk preserves Consul/Nomad/
# Tailscale state. This is the seam that lets us treat the node like
# a VM in the cloud - / is wiped on every roll but /opt survives.
FSTYPE=$(blkid -s TYPE -o value "$DEVICE" || true)
if [ -z "$FSTYPE" ]; then
  mkfs.ext4 -F -m 0 "$DEVICE"                 # first boot ever
else
  echo "already has $FSTYPE; skipping mkfs."  # every boot after
fi

SSH host keys and /etc/machine-id are stashed on that disk and restored after a reinstall, so the node comes back as itself: no “REMOTE HOST IDENTIFICATION HAS CHANGED” screaming, no new Nomad node ID, no storage array remapping. Raft state, allocation dirs, host volumes - all still there. It’s not a new server with the old name. It’s the same server with a fresh OS.

Where it stops being the cloud

On bare metal, failures are more costly and take longer to recover from. Mistakes become physical.

For example, Redfish ForceRestart sails straight past every graceful-shutdown hook you wrote. We learned this by corrupting a database volume. The fix was to drain the node through the Nomad API before touching the power.

Also, BMCs are good now, but not uniformly. Our second vendor’s BMC accepted the mount-this-ISO call, reported the media as inserted, resolved DNS, ARPed its gateway - and never sent a single TCP SYN to fetch the image. Three identical units, firmware up and down, factory resets; a packet capture on the BMC’s own VLAN finally proved it wasn’t us. (Its NFS mount path worked perfectly, so that’s what those boxes use.) Every new hardware vendor seems to cost you a week you didn’t plan for.

And the ecosystem has sharp edges in funny places: iDRAC truncates the virtual-media URL at roughly 590 characters, which happens to be shorter than a signed GCS URL. iDRAC does it silently, so you’ll have to scratch your head for a while trying to figure out what is happening and build a workaround.

The migration itself had plenty of other war stories - storage that corrupted itself, false alerts, DNS being DNS - and those deserve an article of their own.

But all in all, you just need time, patience and some dedication to get everything right. And once you do, the workflow is almost indistinguishable from the cloud, maybe just slower.

The migration is worth it

I wrote this article to show you that even though the cloud is convenient, you can get a lot of the same workflow on bare metal if you have the right tools and good engineers on your team. And this will let you save lots of money. Even in the current market, buying hardware and running it yourself ends up being way cheaper than renting it. (Especially if you can run on used hardware.)

And a lot of the struggles with bare metal can be automated away, and AI agents are a great fit for that. They are smart enough nowadays to do most of the setup unattended. You just need to be mindful of how you use them: an agent can hallucinate and do something destructive and expensive if you don’t give it the right guardrails.

That is why I built co:op and emisar. One ensures the agent runs in a sandbox and cannot do anything destructive without your explicit approval. The other one ensures that the agent has all the information it needs to make decisions and cannot hallucinate.

Related Projects

Blitz

Single-handedly owned ~20 high-traffic backends end-to-end (77 Elixir umbrella apps, 70+ Redis/50+ PostgreSQL instances) serving ~25k RPS with peaks to 150k for a 7-figure DAU product.

View project →
Projects
Blitz
Single-handedly owned ~20 high-traffic backends end-to-end (77 Elixir umbrella apps, 70+ Redis/50+ PostgreSQL instances) serving ~25k RPS with peaks to 150k for a 7-figure DAU product.
Firezone
WireGuard-based replacement for legacy VPNs. Re-architected and developed key components of the enterprise product. Led infrastructure as code with Terraform on GCP. Open source, YC W22.
eHealth: National Health Service of Ukraine
Co-designed and built the national platform behind reimbursements, EMR, e-prescriptions, and nationwide APIs for clinics and pharmacies. Led architecture, security, hiring, and hands-on Elixir + DevOps. All development open-sourced under Apache license.
Hammer Corp
Advertising platform for thousands of US automotive dealerships: ingests inventory, syndicates ads to major channels (at peak accountable for 30%+ cars on Facebook Marketplace), measures conversion, and collects leads to a unified interface with 24/7 human first-responder reps answering within 60 seconds.
Ryker
A self-hosted AI teammate for engineering and on-call work. Ask in Slack or GitHub, share an alert, or give it a coding task. Ryker investigates, shows what it found, and keeps working as you follow up.
Emisar
Gives AI agents a reviewed catalog of infrastructure actions over MCP. Policy decides which requests run, need approval or are denied. Typed inputs, checks on the host and searchable run records let an agent keep working within the access you intended.
co:op
A runtime and orchestrator for coding agents. Run Claude, Codex or Gemini in a container, limit the project files and network access it receives, and work through a task queue in a separate fork you can review.
Offloader
Serves repeated product queries from published Parquet snapshots through declared REST endpoints. DuckDB runs on your infrastructure; your data pipeline owns the exports. It fits customer-facing reads that can tolerate the snapshot's age.
Bullpen - Virtual Sales Floor + CRM
When COVID hit, our sales team lost the buzz of the office. We built a platform that brought it back - a CRM with virtual space where reps could collaborate, learn from each other in real time, and keep the same drive. Then we turned it into a standalone product with AI sprinkled around it.
TalkInto - Omnichannel Messaging Platform and CRM
Messaging/voice backbone powering products like Hammer, Bullpen, and Text2Buy: SMS, voice, various chat integrations, and web chat with clean agent UI and APIs. Features included local numbers, call recording, and routing.
Contractbook
Built the self-service billing system, B2B API and marketing pipeline that let kicked off the business growt.
Financial P2P Marketplace
Architecture and implementation for an institutional P2P lending marketplace for one of Europe's largest lenders ($9B portfolio).
Mbill - P2P Transfers
P2P transfer service for individuals and small-to-medium online merchants. Create a page for your card and share a link to receive payments. Includes customer cabinet, payment button constructor, and transaction reports.
Mastercard MoneySend
Front-end application to receive P2P transfers sent via recipient phone number. Country-wide rollout of phone-number-based transfers.
Forza - PayDay Loan Websites
Front-end, SMS gateway, decision engine, and marketing tools for an online lending originator operating in Moldova, Bosnia, and North Macedonia.
Best Wallet (ex. MBank)
eWallet cloud for worldwide money transfers. For B2C: pay for 2,700+ services across CIS, send money to phone numbers, cash out via partnered banks or cards. For B2B: free SaaS white-label eWallets for banks with simple integration.
IPSP.com - Payment Pages
Responsive landing and payment pages for an Internet Payment Service Provider. Improved conversion on payment flows via lighter UI.
ECommPay - Mobile App
iOS and Android business application for partners to manage payment platform on the go.
Autopayment
Automatically pays for bills based on two types of rules: by threshold of supplier balance (e.g., mobile top-up) or on a periodic basis.
Mobile Cashier
Turns Android devices into payment terminals for deposits and top-ups across numerous service providers, from cellular carriers to credit card loan repayments.
OnlyTTY
Share a shell or a single command through a link and control it from a browser or phone. Terminal traffic is end-to-end encrypted, and the relay never sees the session keys.
Sage - Sagas Pattern in Elixir
Dependency-free implementation of the Sagas pattern for distributed transactions with explicit compensation. Guarantees that either all transactions complete successfully, or compensating transactions amend partial execution.
LoggerJSON
Structured JSON logging for Elixir with first-class formatters for Google Cloud Logging, Datadog, and Elastic (ECS). Drop-in :logger formatter/handler with runtime config helpers.
Confex
Runtime configuration from environment variables with type casting and adapters (:system, :system_file). 12-factor friendly configuration for Elixir applications.
Elixir Bench
Continuous benchmarking platform for the Elixir ecosystem. Automatically runs performance benchmarks on each commit to detect regressions and track language performance improvements over time. Won Spawnfest 2017 and later accepted into Google Summer of Code.
Annon API Gateway
Configurable API gateway acting as a reverse proxy with a plugin system (ACL, Auth, Validation, CORS, Idempotency), request/response storage, metrics, management UI, and auth provider. Reduces boilerplate across services.
Ecto Mnesia Adapter
Ecto adapter for OTP's built-in Mnesia database that works in the same memory space as the application, providing extremely low latency without deploying a separate database.
Gandalf - Decision Engine
Open-source decision engine SaaS for rule tables, champion/challenger split testing, revision history, decision analytics, and debugging tools.
Man - Template Rendering Engine
Stores iex, mustache, or markdown templates and renders them with localization to HTML or PDF via REST JSON API. Includes an easy-to-use management UI. Free one-click deployment to Heroku.
Vagrant Box OS X
macOS Vagrant boxes for VirtualBox. Run UX tests or build iOS/Mac applications on any machine with a few CLI commands. Used by many teams worldwide, including Boxen. Got a $50k S3 bill in month one, was sponsored by Cloudflare for a while, and eventually taken down over Apple licensing.
Parasport - Foundation Portal
Medium-sized web portal for a foundation supporting Paralympic sport, physical rehabilitation, and social adaptation. Built on October CMS.
OneDayOfMine
Storytelling social network that helps see other people's lives through their eyes. Capture moments through the day and share them with descriptions - from special forces in Belarus to a family visit to a film museum in South Korea.
L15 - Night Club x Coworking
Experimental mix of coworking space and a night club ('clubworking') in Kyiv. Turned the office into a best-in-class night club and ran terrace events with world-class DJs every weekend for an entire summer.
Happy Customer
Outsource project to motivate small and medium-sized businesses to provide better customer service via public feedback and simple tracking.
truBrain 1.0
An early-stage product that needed help. I took some swings at UX and performance for free because I wanted to see them make it.
Blog
Your data warehouse is the wrong place to serve a dashboard
Customer-facing dashboards ask the same few questions all day, on data that's fine a few minutes stale - but every page load runs a live query against a warehouse that bills per query and was never built to sit behind a live screen. Here's the serving layer I built to move those reads onto cheap snapshots on my own infra.
Treating physical servers like cloud VMs
Modern BMCs turned bare metal into something you can terraform apply: declare a node in git, reimage it over the network, verify it against a receipt. How our cloud-to-on-prem migration kept the cloud workflow - and why that's exactly what LLM agents needed.
Your AI is brilliant. And blind
AI agents got good at writing code - and they're still flying blind on your infrastructure, guessing at problems they can't see. The obvious fix is to hand them SSH and let them run wild. Here's why I didn't, and what I built instead.
One brain, two agents: an OS for autonomous coding agents
AI agents lose context, stop early, and skip work. The fix is not a smarter prompt. It is a small, file-based operating system: a queue they cannot abandon, hooks they cannot ignore, and one shared source of truth.
Running an AI coding agent you can't trust
You can't trust an AI coding agent, and you shouldn't have to. Put it in a sandbox where the worst case is boring: one repo damaged, no secrets exposed, and a VM you can rebuild in a minute.
Design APIs with CDN in mind
Most APIs are designed for developer convenience, not cacheability. A few structural changes can make CDN do the heavy lifting for you.
The Real 10x Engineer
The real multiplier in software isn’t writing more code. It’s judgment: choosing the right problems, avoiding unnecessary systems, and reducing the maintenance burden that slows teams down.
Introducing Sage - a Sagas pattern implementation in Elixir
Distributed transactions are hard and expensive, if you wonder how to pragmatically handle them in a mid-size project - this article is for you.
Run stale tests on file change in Elixir
Mix is an awesome tool but most Elixir beginners are not aware of all its features. mix test --stale is one of them and can make your workflow much better.
Runtime configuration, migrations and deployment for Elixir applications
Shortly after moving from PHP to Elixir I've faced a common issue, the way how do we deploy applications is totally different from the one I'm used to.
National Health Service, on Elixir and Kubernetes
A look at building Ukraine’s national-scale eHealth platform with Elixir, Kubernetes, and pragmatic architecture for reliability and scale.
Bringing blockchain properties to centralized government databases
Making it cryptographically impossible to alter records in a database even with full system access.
Alternative approach for sensitive file uploads
Using signed URLs for secure file uploads directly to cloud storage, bypassing your application servers entirely.
Designing a P2P Lending platform with Elixir in mind
With this post, I want to share with you the design process on one of our latest projects - a P2P marketplace that was intended to be used by hundreds of thousands of users.