$ whoami

Michael Ryan

Staff Engineer, platform and data.

Staff Engineer with 10+ years building scalable backend systems and leading engineering teams across digital banking, e-commerce and government. I stay hands-on: writing Go and SQL most weeks, reviewing architecture, and running platform teams that other squads ship on. I would rather run a boring, observable system than a clever one.

Auckland
New Zealand · UTC+12
10+ yrs
Building software
6+ yrs
Leading teams of up to 10
Digital banking, e-commerce & govtech
Domains
Currently
Staff Engineer, PT Dkatalis Digital Lab
Full-time · Feb 2025 to present · Auckland, remote to Jakarta

Working hands-on across payroll systems, access management and backend testing for a digital bank build, while bootstrapping onboarding and knowledge-sharing practice for the wider engineering org.

01 / How I work

Most of my work is the same shape: a team is shipping slowly because the path to production is unclear, unowned or unsafe. I find the actual constraint (usually not the thing people are complaining about), make it measurable, then fix it with the smallest system that will survive being on call for it.

01
Find the real constraint

Query timeouts, data quality dashboards, alert volume: the loudest complaint is rarely the bottleneck. I measure before I rewrite.

02
Boring, observable systems

A re-architecture that no one on call can reason about at 3am is not a win, however clever the design. I build systems I can hand off.

03
Ship in small pieces

A sprint cycle cut from two weeks to one, a task-force migration finished in a week with zero incidents: the pattern is always smaller, safer steps.

04
Grow the people, not the hero

Three junior engineers I mentored reached mid-level within a year. That is the outcome I am most attached to.

02 / Experience

6 of 6 roles

Staff Engineer

Full-timeFeb 2025 – present
PT Dkatalis Digital Lab · Auckland, remote to Jakarta

Digital bank build, working hands-on across payroll, access management and backend testing while based in Auckland and shipping to a Jakarta-based team.

  • Owned end-to-end delivery of a new payroll system, now live in production and adopted by customers.
  • Architected the database layer for a Google Drive–style access management system, integrating Ory for auth and authorisation.
  • Reduced backend test duplication and improved coverage by introducing parameterised testing with JUnit5.
  • Improved engineer onboarding clarity and bootstrapped a knowledge-sharing session that grew into a recurring tribe-level event.
KotlinSpring BootCursorBigQueryPostgreSQLMongoDBTemporalOry

Engineering Manager / Tech Lead (Hands-On)

Full-timeOct 2022 – Dec 2024
Govtech Edu Indonesia · Jakarta, Indonesia

Government education platform re-architecting its data layer while consolidating hundreds of ad-hoc databases into one managed system.

  • Led a re-architecture from PostgreSQL to BigQuery and implemented a message broker, improving data quality from 80% to 92% while reducing latency.
  • Led the migration of 500+ databases into a unified system, streamlining 120+ annually created databases into a centralised structure.
  • Designed and developed microservices for a Self-serve Data Quality Management system with BigQuery integration.
  • Improved team delivery by shifting the sprint cycle from 2 weeks to 1 week, leading to quicker project delivery and better collaboration.
BigQueryKafkaGCPData PipelinePostgreSQLMicroservices

Engineering Manager (Hands-On)

Full-timeApr 2021 – Oct 2022
Bukalapak.com · Jakarta, Indonesia

Marketplace seller platform at 100–300 RPS, leading an eight-engineer team through a query-performance rebuild and a resource-efficiency push.

  • Led a team of 8 engineers managing the marketplace seller platform at 100–300 RPS using Ruby, Golang, and GCP.
  • Led the ClickHouse project, reducing MySQL query times from constant timeouts to under 1 second.
  • Optimised resource usage to 40–60% CPU/memory range, improving overall system performance by 20%.
RubyGoGCPClickHouseMySQLMongoDBPostgreSQLKafka

Technical Lead (Hands-On)

Full-timeJuly 2019 – Apr 2021
Bukalapak.com · Jakarta, Indonesia

Seller membership platform, running a task force through a business-model migration with zero incidents while mentoring three junior engineers.

  • Led a task force of 6 senior engineers to transition seller membership from subscription-based to fee-based within one week with zero incidents.
  • Mentored 3 junior engineers, all of whom advanced to mid-level within one year.
  • Led the Facebook Ads Discrepancies project, reducing data mismatches for 400,000 products from 70% to 20% and driving a 15–18% revenue increase.
RubyGoGCPMySQLMongoDBPostgreSQLKafka

Software Engineer

Full-timeMar 2017 – July 2019
Bukalapak.com · Jakarta, Indonesia

Early engineering role breaking apart a monolithic service into microservices while raising monitoring and alerting to a 99% SLO.

  • Achieved a 99% SLO by implementing proper monitoring, alerting, and testing procedures.
  • Created 3–5 microservices to replace a monolithic service, improving deployment speed, scalability, and fault isolation.
RubyGoMicroservicesGCPMySQLMongoDBPostgreSQLKafka

Software Developer

Full-timeApr 2015 – Mar 2017
Liberty Jaya · Jakarta, Indonesia

Software house building in-house software for client companies such as Bayer Indonesia and L'Oréal Indonesia.

  • Developed and maintained internal tools to support business operations of clients, improving workflow efficiency and automation.
C#MSSQL
EducationS. TI (BSc) Computer Science, Bina Nusantara, Indonesia2011 – 2015

03 / Projects

3 of 3 shown

Things I built or led, with the problem stated first. Filter by tech, or open a card to read what was actually involved.

FlickActive
High-throughput feature-flag service: roll out to a deterministic % of users without a deploy.
GogRPCREST
The problem

Shipping a change behind a flag usually means a deploy and a vendor SDK adding latency to every request, so teams either skip flags or eat the cost on every evaluation.

What I built

A feature-flag service with in-memory rule evaluation over gRPC and REST, giving deterministic percentage rollout without a redeploy and microsecond-level evaluation latency under production load.

Outcome

Flags evaluate in-memory at microsecond latency, so rollout percentage changes take effect without touching the deploy pipeline.

JsonToolActive
Client-side JSON toolkit: beautify, minify, filter, and convert to CSV. Zero dependencies.
HTMLJavaScript
The problem

Reshaping JSON between tools, or turning a nested array into a spreadsheet, usually means pasting data into a third-party site, which is a problem when the data is sensitive.

What I built

A single self-contained HTML file with zero dependencies: beautify, minify, field-filter, and JSON-array-to-CSV conversion with fine-grained control over nested vs. flattened output. Runs offline, over file://, or on any static host.

Outcome

Nothing ever leaves the device: the whole toolkit is one HTML file that works without a server or a network connection.

Local LLM WorkbenchActive
Research and testing harness for running and evaluating self-hosted LLMs.
PythonOllama
The problem

Evaluating open-weight models locally means re-writing the same harness (model loading, prompt sets, comparison scoring) for every experiment.

What I built

A local testing setup around Ollama for running self-hosted models, comparing outputs across prompt sets and model versions without sending data to a third-party API.

Outcome

A repeatable way to try a new open-weight model against a fixed prompt set in minutes rather than re-building the harness each time.

04 / Toolkit

Languages
GoRubyPythonC#Node.jsKotlinJavaSQL
Backend & Systems
MicroservicesDistributed SystemsAPI Design
Cloud & Infra
GCPKubernetesDockerTerraformCI/CD
Data Engineering
BigQueryKafkadbtAirflow
Databases
PostgreSQLMySQLMongoDBRedisElasticsearch
AI & LLM Tooling
Claude CodeLLM-Assisted DevelopmentLocal LLM Development (Ollama)
Leadership
Team LeadershipMentoringSystem DesignDelivery Optimisation

05 / Resume

Three variants, generated from the same data on every deploy. Single column, no tables, no graphics, so they parse cleanly in an ATS. Two pages, enforced by the build. The Engineering Lead version is the default.

Engineering LeadDefault

Team leadership, hiring and levelling, delivery pace. Platform work framed as outcomes for the teams using it.

Senior EngineerSenior / staff

Hands-on backend and platform depth: Go, Ruby and Kotlin services, testing strategy, operability.

Data EngineerSenior

Ingestion and warehousing: PostgreSQL to BigQuery migrations, message brokers, data quality and cost.

06 / How this site is built

One set of JSON files is the source of truth. I edit it in VS Code, commit, deploy, and everything downstream regenerates: the site and all nine resume documents. Nothing here is typed twice.

01data/*.jsonEdit roles, projects, skills and variant include lists directly.
02make deployOne push to the deploy branch is the whole publish step. No admin panel, no CMS, nothing to log into.
03validateChecks the schema and that every bullet id referenced by a variant actually exists.
04renderThree resume variants emitted as .docx, .pdf and .txt from one shared document model.
05astro buildStatic site rebuilt. First paint under a second, works with JavaScript off.

CI fails loudly if any variant runs past two pages. That is a content problem, not a margin problem.

07 / Contact

If you are hiring an engineering lead in Auckland, or remote to APAC, I would like to hear about it.

LinkedInGitLab