About — the record
Est. 2017
Darmawan Zulkifli.
I build software, and I like starting from almost nothing. Most of my work begins as a small test version. Just enough to see if the idea works. When it does, I keep going and turn it into a real product that people use every day, and that keeps working as it gets bigger.
I have done this a few times. One small test app became the messaging system a care team now trusts. An internal tool grew into the platform a finance team ran their whole business on. I work mostly in Go and Rust on the backend, with Flutter and React for the apps people see.
I did not start here. For my first few years I just built what other people designed, and that was the best training I could have had. What I enjoy most now is the tricky part. What happens when the network drops halfway through, or when two systems disagree about what is true. The hardest bugs I remember were never inside the code. They were in the gap between two pieces of it, so now I look for those gaps early.
These days I own the whole thing, start to finish. I have built clinical messaging that runs on phones a hospital does not fully control, an on-chain exchange, a telehealth app that connects Indonesian patients to doctors, and a government records system where every signature has to hold up in an audit years later.
I still write the code myself, not just the diagrams. I share how I think here and here, and a few small open-source tools from real work. I have worked remotely for most of my career with teams in Australia, Singapore, Europe and Indonesia. If any of this sounds like a problem you have, email me.
More about me → Show less ↑
Experience
- 01 Mar 2024 — Present
Software Engineer
Alexys International · Sydney, NSW (remote)
Product champion and engineer on Aptus Aware, a clinical communications product. Responsible for what it should be as well as how it is built, from the Matrix messaging backend to the handsets care staff carry.
- Product champion for Aptus Aware, responsible for what the product should be, not only for how it gets built.
- Built the Matrix.org proof of concept for the messaging backend, then reviewed and migrated backend code onto it.
- Extended location-aware presence, hunt-group routing and nurse-call configuration across both organisation-managed and personal handsets.
- Own the integration of Aptus Aware with Aptus Concierge, including its AI layer.
- Build features, fixes and backend services for the mobile product.
- Own release hygiene end to end, covering version control, testing to standard, releases, and issue tracking.
- Flutter
- Matrix.org
- Node.js
- AI integration
- 02 Mar 2022 — Mar 2024
Software Engineer
Undercurrent Capital · Singapore
Built the Algorai platform on Algorand end to end, covering admin and treasury tooling, the dApp front end, and the on-chain trading machinery underneath it.
- Built and ran the Algorai Admin platform, the operational surface for configuring products, monitoring positions and reconciling on-chain state.
- Owned the reconciliation seam between on-chain state and the application store, so the chain and the database that recorded it could not silently drift apart.
- Integrated Algorai with the Algorand blockchain using the official SDK.
- Built the Go REST services behind the platform on Gin and gorilla/mux, layered along SOLID lines. Thin HTTP handlers, business logic in services behind interfaces, and MongoDB access in repositories, so each layer could be tested and replaced on its own.
- Built decentralised applications on Algorand, with React front ends over smart-contract backends, enabling on-chain trading and asset management.
- Built the trading machinery: DEX integrations, order matching, limit and market orders, and liquidity pools using Algorand atomic transfers.
- Built cross-chain bridges and integrations (Ethereum, Solana, Polygon) so users could swap assets across networks while minimising slippage.
- Designed secure wallet connections (Pera Wallet, MyAlgo) for transaction signing, staking and real-time trading.
- Optimised for high-frequency trading, with oracle price feeds, transaction batching, and reduced confirmation times.
- Golang
- Gin
- gorilla/mux
- React
- MongoDB
- Algorand
- Smart contracts
- 03 Mar 2021 — Mar 2022
Software Engineer
Dua Digital · Bali · Lombok · Sweden
Cross-platform delivery for a predominantly European client base. Six months part-time building MVPs, then full-time on product.
- Spearheaded project planning and estimation, effectively catering to a predominantly European clientele.
- Built Kupongfia, a Swedish grocery-deals app, with React Native for cross-platform delivery.
- Engineered robust systems tailored to client specifications using Flutter for cross-platform delivery (web, Android, iOS).
- Developed high-performance backend services leveraging Golang and Node.js.
- Flutter
- React Native
- Golang
- Node.js
- 04 Mar 2019 — Jul 2021
Software Engineering Team Lead
PT Citra Digital Lintas · Jakarta, Indonesia
Joined as an engineer and was promoted to team lead. Owned feature delivery and release engineering for enterprise and government office-automation products.
- Led feature delivery and product maintenance across enterprise and government office-automation products.
- Worked directly with clients on feature planning and estimation, translating ambiguous requirements into scoped work.
- Owned application releases and deployment into staging and production environments.
- Golang
- React
- Flutter
How I work
Start with the problem
I start with who uses it, what the constraints are, where the boundaries sit and how it can fail. I choose the technology last.
Make trade-offs explicit
I write down why I chose this design and what I turned down. If nobody records it, the same argument happens again in six months.
Design for failure
Networks drop. A retry means the same request arrives twice. State goes stale. Phones kill background work. I treat all of that as part of the design, not as something to fix later.
Own the path to production
A design is not finished at the diagram. It includes building it, deploying it, being able to see it running, and being able to roll it back.
Leave leverage behind
I try to leave reusable pieces, tooling and written notes behind me, so the next person moves faster than I did.
Areas of depth
Distributed systems
Services that disagree, and how they get back in step
- Event-driven architecture
- Async workflows
- Retries & idempotency
- Consistency models
- State reconciliation
- Service boundaries
Realtime systems
Messages that have to arrive, on networks that drop
- Matrix.org
- WebSockets
- WebRTC
- Presence
- Messaging & routing
- Mobile network constraints
Backend & platform
The services underneath, and how they get to production
- Go (Gin, gorilla/mux)
- Rust
- Node.js
- gRPC & Protobuf
- NATS / Kafka
- CI/CD & deployment
- Observability
- SOLID & layered design
AI systems
Model features that keep working when the provider changes
- LLM integration
- Provider abstraction
- AI agents
- LiveKit
- STT / TTS pipelines
- On-prem inference
Product engineering
Turning an unclear request into a system with a scope
- Ambiguous requirements
- Technical discovery
- Architecture decisions
- End-to-end ownership
- Stakeholder collaboration
Mobile & edge
Where the system meets a device we do not control
- Flutter
- React Native & Expo
- State management (BLoC, Riverpod, GetX)
- Background execution limits
- Offline-first sync
- Device/backend integration
- ESP32 & microcontrollers