Mainbox (https://mainbox.com) is an advanced b2c mail forwarder. It helps customers to buy and deliver goods from US stores to Russia and Gulf states. Technically it is a complex distributed system starting from warehouse automation subsystem, logistics service, APIs for web and mobile apps, multiple integration microservices: with couriers companies, geo providers, media storage and many others. The system controls lifecycle of every ordered parcel through all listed services. All communications made through RabbitMQ mostly, for others REST is used. For data storing PostgreSQL and Redis are the main options.
As a head of development, my responsibilities include:
- Organization of CI/CD process. Using GitLab I’ve implemented all CI/CD stages: building, unit and integration tests running, packaging and deploying to selected stage;
- Building a team. For about 10 months managed to build a team of 6 backend, 2 frontend and one QA. Created every job description and technical interview plan. Concluded multiple interviews. 100% of preselected candidates successful passed probation period;
- Increasing code quality. Introduced code review process. Refactored every service to run unit and integration tests agains docker containers. Test presence became one of mandatory conditions of code review passing;
- Increasing service reliability and operational transparency. To cover this topic introduced proactive monitoring using NewRelic. Suggested logging migration to ELK cluster.
- Looking for effective solutions. In order to create mobile app for iOS and Android suggested Ionic Framework to use one code base for this task. Helped UI team to build and deploy apps in Google Play and AppStore.
- Leading end-to-end service localization. This includes integration of SaaS service for translation management and backend improvements in order to support localized entities storage, filtering and sorting in DB.
- Implementing platform features and services. For example, file storage service for centralized access to all client files. Extracting API for mobile app as a separate microservice. Migration existing projects from older versions of Spring Boot. Dockerizing existing apps. And many others.
- Release management.
Domclick (https://domclick.ru) is a group of services designated for an overall mortgage process automation. These services work under an umbrella of the largest bank in Russian Federation (Sberbank), processing of thousands of mortgage deals every day in all Russian regions.
I was in charge of three different services: Real estate legal examination, mortgage online and secured mortgage payment. Also, I am involved in several activities concerning the whole java chapter in company including: hiring process and technical interviews, preparing best practices and code style, new technologies research and their adoption.
Achievements per service:
Real estate legal examination (team of 3 developers):
- Implemented b2c order process;
- Transaction management refactoring;
- Created unified REST API for different internal UIs;
- Migrated classic Spring project to Spring Boot;
- Optimized order processing to make it two times faster after half a year;
- Started migration to Kubernetes;
- Release management control.
Mortgage online (team of 7 developers): The main goal was to stabilize mission-critical service in terms of performance and number of outages.
- Fixed several elaborate memory leaks;
- Doubled DB performance after index reviewing and rewriting sql;
- Stabilized system performance under high load after fixing different system timeouts and pool sizes;
- Implemented complex integration with other services;
- Release planning and management;
- Bamboo to Jenkins migration.
Secured mortgage payment (team of 7 developers):
- Planned and implemented complex integration with bank processing system: two Spring Boot 2 microservices connected by RabbitMQ, written in Kotlin;
- Extensive devops duties: pipeline creation for CI and CD microservices in Kubernetes;
- Release planning and management.
Moysklad (http://www.moysklad.ru/) is one of the leading SaaS trade management and inventory control services in Russia with more then 100000 clients.
Core responsibilities - design, implementation and lead of key system parts creation.
Main technical achievements:
- Actively develop new JAX-RS based REST API used for both mobile apps and custom clients. Manage dedicated three member team;
- Implemented integration with POS manufacturer, which used Moysklad as a synchronization backend;
- Created custom user session management and authorization Hazelcast based system to provide transparent horizontal scaling;
- Created separate GWT based web application for retail and implemented its integration with the main system;
- Implemented data sharding. Introduced additional data source routing into multi-tenant application architecture and integrated it into Hibernate. Created data partitioning mechanism;
- Divided application by functionality into cluster. Moved asynchronous functionality: reporting, synchronization with other systems, etc into separate applications. Set up cluster integration thorough distributed cache and database;
- Implemented CQRS pattern using AKKA to optimize access to aggregated data required for various reports;
- Adopted Arquillian based integration testing;
- Realized lots of complex business tasks.