Hello! I'm a software engineer who has been working on commercial projects since 2004.
Along the way I have been very lucky to learn from outstanding people and work with them on the exciting projects:
- contributed to the book on Implementing Domain-Driven Design (ISBN 978-0321834577);
- designed architecture of a social network;
- helped to deliver big data analytics for retail in the cloud;
- helped to scale multi-channel inventory management software past 1.5B events;
- delivered real-time analytics for a social network.
I graduated from the Bashkir State University (Ufa/Russia) with a degree in economics in 2005. My thesis was about applying Neural Network and Genetic Algorithms to model and forecast economic processes (it covered multi-layer recursive neural networks with memory 10 years before TensorFlow was released by Google).
During my career I mostly focused on designing, scaling and verifying distributed data-intensive systems. Most of my experience revolves around the retail domain: sales, warehouse management and inventory optimization at scale.
In the past years I also got more opportunities to apply bits of my university background (economics, modeling and forecasting, data engineering and machine learning) to the data at scale. This was a welcome experience, although I'm still waiting for a chance to get back to the neural networks with evolutionary algorithms.
I blog and occasionally talk at the conferences about CQRS, Event Sourcing, Domain-Driven Design and scaling event-driven systems.
Here are last blog posts that cover things I'm really excited about these days:
Major part of my career focused on .NET and Windows Azure. Starting from 2014, I've been spending more time with:
- Linux - for deploying and managing servers (sticking to Ubuntu, but keeping an eye on illumos and FreeBSD).
- golang - for building real-time analytical data pipelines, lean services and small tools.
- Python - for scripting (when bash isn't enough) and data analysis (pandas, numpy, matplotlib).
- Lisps - because Emacs and org-mode (see my config). Also for building DSLs to help team-members eliminate boiler-plate code and boost productivity.
One can't talk about distributed data-intensive systems without touching the subject of storage.
Storage-wise, I've had systems deployed to production with: MS SQL, Azure Storage, Cassandra (with Lucene and without it), EventStore, InfluxDB, FoundationDB.
I've built MessageVault - lightweight HA Kafka alternative designed to work on Azure and the original Lokad.CQRS Event Store (both - currently in production with 100GBs of data).
These days I prefer to capture data models with LMDB (ACID, lexicographically sorted key-value storage that uses memory-mapped files) for the flexibility and performance. Replication across machines and data-centers is usually done via a distributed commit log.
However, technology bits can only take you so far. Here are some of the underlying principles that I've been taught and grew to value:
- Continuous learning: by sharing, writing, running experiments and invalidating assumptions.
- Fast development iterations: from running full-stack tests at 100-500 Hz on a dev machine to continuous deployments.
- Rigorous testing: from fuzzing and property-based testing to the deterministic cluster simulations and fault injections.
- Designing software systems and tools to empower teams and support long-term sustainable growth.
- Sticking to the basics, such as: immutability, single-writer and event-driven systems.
If you are interested to learn more, please feel free to get in touch. You can also scan this blog for more details.
Here are some notable projects I've been lucky to work on:
- Data Engineer and Analyst at HappyPancake.com - building a lean platform for real-time analytics. Read more.
September 2017 - Present
- Systems Architect at SkuVault.com - helping to evolve and scale multi-channel inventory management software. Read more.
November 2014 - Present.
- Co-host in a podcast on software design - BeingTheWorst.com. Audio apprenticeships for the aspiring software craftsman. Currently exploring DDD, Event Sourcing, CQRS, distributed systems, cross-platform, cross-cloud, & cross-language software delivery. Listen to the episodes.
August 2012 - Jan 2016
- Software Engineer at HappyPancake.com - helping to scale Sweden's largest internet dating website. Read more.
Dec 2013 - Nov 2014
- Technology Leader at Lokad.com - managing a remote development team, building core technology (Big Data analytics for the retail on .NET/Azure) and a portfolio of products. Read more.
April 2008 - January 2014
- .NET Team Lead at iDocuments/ICertainty - started as a .NET tester for a web-based information management system, ended up building and managing a remote dev team.
July 2006 - May 2007.
LinkedIn profile has more details.
I'm available for consulting, doing prototypes and MVPs across platforms, building tooling and infrastructure for the teams (incudling DSLs and verification tools).
Don't hesitate to drop me a line, if you have any questions or an interesting project.
PS: At this point of my life I'm interested in moving from Russia to a country with good child care and no radioactive fallouts in the area where you live (see Russian radiation leak story). Scandinavian countries and Canada come to mind.
Outside of software engineering, I enjoy these things:
- Traveling with my family
- Tabletop games - used to love MtG and DnD; these days I stick more to the classics like Dominion, Race for the Galaxy or Munchkin.
- Sports - functional training and swimming; hoping to get back to Tai Chi Chuan one day.
- A good sci-fi or fantasy book, including everything written by Pieter F. Hamilton.
- Doing things with my hands - from cooking and meddling with ESP8266 to Lego Technic.