I am an Engineering Manager at Toptal as of December 2020.
Before that I was a freelance software developer and spent most of my time working on backend systems in Ruby (usually with Ruby on Rails) and Go.
Since 2015 I have been working remotely succesfully and prefer remote work over on-site work whenever possible.
My home is in Tallinn, Estonia and usually I'm based there.
You can reach me at firstname.lastname@example.org.
Tools & Technologies
Over the years I've worked with many different programming languages, libraries, tools, services and frameworks. I'm always happy to try out something new, yet the following technologies have been a stable in my work:
- emacs, vim, git, tmux
- Ruby on Rails, React + Redux, Vue.js
- Postgresql, MariaDB, Redis, Elasticsearch
- Docker (Swarm), Kubernetes, Terraform, Ansible
- AWS (IAM, EC2, S3), Digital Ocean
- Jenkins, Travis CI
I took the chance to become an Engineering Manager for another team, and
- improved the relationship between Engineering and Product
- successfully worked towards achieving highly predictable, regular delivery
- helped people grow by coaching, mentoring, and encouraging them to take on new responsibilities
I've joined Toptal as a senior backend engineer.
During this time:
- I helped my team achieve a high level of predictability in their delivery
- Worked with a large distributed system written in Ruby
- Developed internal tools that help support our processes
I've been working in various projects together with Njiuko as part of a larger team:
- A marketplace for storage space in warehouses
- A background system to sync text resources between two systems
- QR-code based login and social features for a conference mobile app
- A background system syncing and mapping sales data between three other systems
- Ruby, Ruby on Rails
- Resque for background jobs
- MariaDB, Elasticsearch, Redis
- Docker, Heroku, Linux
I helped D2IQ (formerly Mesosphere) manage their Jenkins configuration as code.
- Go for writing a custom Terraform provider
- Java/Groovy for interfacing with Jenkins internals
- Terraform for managing Jenkins configuration
I helped D2IQ (formerly Mesosphere) migrate their Jenkins setup from one cluster to another, including related processes like backups.
- rsync, ssh, awk, sed and assorted command line utilities
- Groovy for inspecting, verifying and restoring Jenkins state
As part of a cross-functional team we developed a social network-like platform for a client, to help them manage and foster their community, curate and publish content and host video-streamed events.
We built a greenfield system based on Domain-Driven-Design principles using Event Sourcing/CQRS as the main architectural principle.
Towards the end of the project a large part of my time was spent onboarding and mentoring new team members as well as conducting technical interviews.
Technologies and services used:
- Ruby with Sinatra for the backend server
- GraphQL for backend/frontend communication
- DRb for communication between services
- Redis/Postgresql as event stores
- Amazon S3 for caching
- Elasticsearch for providing autocompletion and search over a content library
- Docker Swarm for deployments
- Ansible for configuration management
As part of a close-knit team I helped getting Harrow (now defunct) off the ground.
The project was a greenfield project, heavily relying on persistent queues, provisioning infrastructure dynamically and featured a clear split between the frontend (implemented as Single Page Application) and the backend (exposing only a JSON-over-HTTP API).
Technologies and services used:
- Go for implementing all background services and the HTTP API
- Postgresql as the main data store
- RabbitMQ for persistent queues and IPC
- AWS EC2, LXD and Docker for providing isolated execution environments
As part of the Communities team at XING I developed and shipped features in a large Ruby on Rails application. Development happened in an enterprise context and required constant communication with other teams maintaining their own Rails applications.
- Ruby on Rails
- RabbitMQ for IPC
- Elasticsearch, MySQL
- Technology is a tool to solve problems and not a goal in itself
- Never skip automated testing. It will come back to haunt you
- Argue with facts, not emotions
- Document the why, and if necessary the how. For your team mates and your future self.
Other things of note
Languages are the thing I'm most excited about in my free time
- German (native)
- English (fluent)
- Estonian (fluent)
- Spanish (A2)
- Russian (A1)
- Hungarian (A1)
- Greek (A1)
I was invited by IT College in Tallinn to teach a Ruby course for beginners for one semester.
The feedback from the students was great and I was nominated best guest lecturer of that year.
Helping others grow and realize their potential provides deep satisfaction.