My name is Slava Fomin. I’m a professional developer with good IT as well as business/marketing backgrounds and more than 10 years of experience in the field.
I tend to see myself as a “T-Man” as Valve Software calls it, i.e. a man who has a solid expertise in some specific area, but also, who sees a bigger picture and has a broad interests and skills.
I hold a master’s degree in software engineering from Russian university and I do specialize in a full-stack web development, using various back-end and front-end technologies.
I’ve started as a freelancer and then moved to corporate sector working for different companies as a web developer at first and then as a lead web developer and CTO later.
I even founded some startups of my own, pursuing my interests in business, marketing, product development and design.
Through my career, I’ve learned a lot about web development and the technologies behind it. I have a solid understanding of how things are done starting from idea and design and finishing with concrete implementation when it comes to writing a quality code, shipping it or creating the documentation.
I do believe that software and it’s interfaces should be human-oriented with good design and usability, providing fluent user experience and engagement.
My mission is in creating high-quality products and services for the people, which will help to make this world a better place for us and the future generations.
I pay a lot of attention to details and I truly believe that this matters a lot. My professional demands a pretty high. When it comes to my work, I tend to do everything with great consideration and care.
I consider knowledge and experience as the most precious things in the world. I think, I can call myself a “self-made man”, because everything I’ve learned, I’ve learned through books, articles, source code and of course a lot of practice and real-life experience.
I spend a lot of time educating myself in various fields, studying new things, methodologies and practicing new approaches. I’m a fast learner! I always try to be at the cutting edge of technologies, applying the best instruments to my work and perfecting my toolbox and skills.
As a great supporter of OpenSource movement I’m always trying to contribute to the community by means of sharing a source code, creating libraries and writing articles. I’m an active member of StackOverflow and GitHub communities. I also wrote an article for Smashing Magazine. JetBrains company acknowledges me as an active OpenSource developer and rewards me with their free software licenses.
This section contains list of my skills and the technologies I mostly use.
Orange color marks areas that I consider modern, "hot" and interesting.
Blue color marks general areas I'm working in.
Grey color marks areas which I consider outdated/legacy or less interesting for me.
Star icon means that I have proficiency in the respective area.
Graduation cap icon means that I'm studying in the respective area.
Obsolete technologies or skills in non-related areas are not listed.
For back-end I’m focusing on using Node.js with Restify/Express and a TypeScript/ES6.
Here’s the list of the most important commercial projects I was working on.
Moebius is a prototype cloud-based software for MLM companies management. It consists of two principal parts: a server and a web-client.
The server is responsible for user data storage as well as for entire business logic and MLM company's marketing plan implementation, payment processing, products purchase, rewards calculation, payouts and other important activities.
In this project I've used TypeScript for the first time to program both server and client parts of the system as well as all additional tools. Some modules are even shared between both ends.
On back-end I've used Node.js as a primary technology, Express as a web-server, PostgreSQL database accessed via TypeORM library to store all the data and the TypeDI dependency injection container to help with the code organisation.
One of the important goals of the project was to allow handling of an arbitrary number of simultaneous users. I've designed the server component to be completely ephemeral. Such approach allows to run any number of identical server instances and therefore to achieve truly elastic load balancing. Because of that, I don't use nor cookies nor server-side sessions and I don't store anything in the memory between the requests. All data that needs to be persisted is persisted in the database. JWT authentication and access/refresh tokens are really helping with such implementation.
Also, in this project I had an opportunity to implement an entire infrastructure in the cloud using Amazon Web Services and I'm extremely happy with the results. This allowed to dramatically reduce costs (comparing to a third-party solution, the client was using in the past) and to improve deployment process and resource management.
I've implemented a CI/CD pipeline using Docker, Shippable and AWS integration, which enabled completely automated releases to the staging cluster on each commit. That way, management and QA team have secure access to the most actual state of the developing application. And the next production version could be released with just a single click in Shippable GUI using rolling updates without any downtime.
Another key goal of the project was to make the software as universal as possible in order make it useful not only for the single project, from which we were starting, but also for the future clients. I've approached this goal by implementing highly modular design and the concept of software driven by configuration and metadata. I've tried to split everything into isolated "feature modules", where each feature could be individually added or removed from the system, without breaking the entire application. The dependency injection container helped with this approach.
I've also used some JSONB columns in PostgreSQL database, which allowed to store arbitrary or dynamic data, effectively utilizing best parts of both SQL and NoSQL worlds: the core functionality is implemented via strict and relational schema, but additional functionality, where extensibility is required is using NoSQL approach.
Another solution was to use event system in order to additionally decouple and isolate code blocks. This proven to be extremely useful approach, which allowed to implement very dynamic and flexible logic, that could be changed even in runtime by the administrator.
When it came to web-client implementation, I've decided to use the Atomic Design approach. The idea was to create a complete design system first, consisting of various components, starting from simple buttons and labels and ending with complex hierarchical components, like form groups. I've even created a separate application, that served as a catalog and at the same time documentation and playground for all components available in the evolving design system. Only after that, we've started to use the designed components to actually build the screens of the final application. This approach seemed slow at the beginning, and the results were not showing initially, but after design system was complete, it allowed us to produce the application many times faster than with traditional approach and the look and feel of the application was more consistent.
“WA Marketing” was a startup project based on Winners Academy business model and educational products, created by Vladimir Dovgan.
As part of the project we've created a marketing platform, which allowed Winners Academy partners (after completing special courses and passing the exams) to obtain and process potential leads through our CRM system.
In order to accumulate leads, we've developed a network of various marketing modules, including websites, landing pages, webinars, advertising channels, targeted ads, E-Mail marketing, social networks and more.
Leads, which were entering the system, were distributed among active and certified partners by means of special exchange system, that I've developed and which we called the "traffic exchange".
In this project I was responsible for building the entire IT infrastructure, which was consisting of dozens of services, websites and inter-communicating modules. I've also had to choose and to integrate a lot of third-party solutions for analytics, payment processing, E-Mail marketing, notification and other. We've also used very complex marketing funnels, which required to pass and track users from various channels as well as to collect comprehensive analytics on each step of each funnel in order to monitor the system performance, conversion and profitability.
Additionally, I’ve started to use Node.js for the first time and was very happy with the results. The highly modular and extensive ecosystem of Node.js allowed me to achieve our business needs more quickly and at the same time showed very good stability and performance in production environment.
WoodPic was a manufacturing startup company, specialized in beautiful art and photo printing on planes of wood using specialized technology and equipment.
As a co-founder, I was responsible for a lot of different activities and business processes including website development, digital marketing and many other "offline" duties like managing the printing equipment, ordering materials, dealing with third-parties and other.
I've also developed a single-page website, which we were using to collect orders.
Additionally, I was designing a very convenient web-application, which should've given customers a full control over product selection and their orders. It would've allowed them to select various plane sizes and configurations, upload art and photos from different sources (or select art from the provided catalog), arrange graphics on the plane (manually or using pre-defined layouts) and to finally submit the order.
FriendAdvice was a web-service prototype, which allowed users to define their skills and services as well as to connect their social network profiles. Then, it was building the graph of all services and friends and allowed users to search for specific services among their friends or friends of their friends, and even deeper.
As a co-founder and developer I was responsible for both business and development parts of the startup company.
Although, my partner brought the idea, I've developed it further, came up with the name, developed a brand an hired the designer to implement it. I've also written a script and co-produced the intro video, which was explaining our product.
Additionally, I've created a landing page to explain our vision and to allow early birds to express their interest in the service by subscribing to our development mailing list. We've planned to convert those early users to beta testers later on, when service was mature enough. We even implemented a marketing strategy as well as various advertising channels to actually direct targeted traffic to our landing page. Those measures were really helpful in validating our idea early on.
Finally, I've implemented a prototype of the SPA application using PHP 5 and Symfony 2 for back-end and AngularJS for a front-end. I’ve used oAuth 2 and tight integration with social networks to build a graph database of social connections and to make queries like "find me a friend of friend of friend... who is a photographer" using Neo4j database.
As a CTO of new project with Vladimir Dovgan I was responsible for entire IT infrastructure of young and fast growing company, handling vast array of diverse tasks every day.
Apart from other tasks, I was developing various company websites and landing pages dedicated to periodic events as well as integrating marketing services with them.
I've also developed a single page application, around which the entire business was working. It consisted of two major areas: education and business.
The educational part included various content, which was available to users by means of a paid subscription.
One interesting content type was live webinars. I've implemented a custom infrastructure, which allowed to broadcast and watch such online events. The media, captured in studio using specialized streaming software, which was controlled in real time by the broadcast operator, was transformed into an RTMP stream and then delivered through a special CDN network to final users, who watched the webinar on website via specially customized HTML player, capable of displaying both RTMP stream using Flash technology as well as HLS stream for Apple users. We were also using realtime transcoding to produce multiple qualities of the stream as well as a special "sound-only" stream for users with very weak Internet connection. Another aspect of this process was recording and converting the stream into MP4, WebM and MP3 formats in order to later deliver this content to users, who wanted to see the recording after the fact though the webinars archive. I was using Amazon Web Services in order to store and deliver such content and custom FFmpeg pipelines to convert it in all required formats.
The business part of the application allowed partners to invite new users and to sell the subscription to them, effectively earning some percentage of it according to MLM marketing plan. Also, partners could recruit other partners and build their own distribution network. The actual MLM logic was implemented by a third-party, but I was responsible to fully integrate their solution with our application. I was in charge of designing an API that allowed two parties to effectively communicate with each other in the background.
The back-end of the application was implemented using PHP 5 and Symfony 2 framework. Data was stored in PostgreSQL relational database and accessed with Doctrine 2 ORM. Client-server communication was achieved through RESTful API, which was documented and used for both web application and mobile application (developed by a third party).
Front-end was a single page application (SPA) developed with AngularJS.
As a lead web developer in C-MEDIA holding I was responsible for one of the projects, called IWORKER.
Initially, this was a big social portal for employers and employees with vast amount of functionality, starting with job listings, personal resume profiles, company ratings and ending with blogs, polls, articles and lessons.
I've inherited this project from outside contractor and moved it in-house by migrating all the infrastructure to the company servers. I've then spent a year refactoring and optimizing the project as well as adding new features, required by the business.
One of the key goals was to improve website performance, because of that time it was executing poorly. I've achieved this goal by implementing various caching techniques, both server-side and client-side. I've also worked on reducing the number and size of HTTP requests needed to initially load the website by optimizing CSS, images, fonts and by making additional client-side improvements. I've also implemented a basic functional test system, which allowed to measure overall website performance and to prevent functionality degradation.
Another interesting task was to implement a system, which allowed website editors to easily brand any page of the portal by adding customized content and graphics to advertise third-party companies and their products. Additional requirement was the ability to add multiple format advertising banners to various columns and sections of website pages.
I've implemented a very flexible system, which allowed to do exactly that and provided a convenient web-based UI for administrators to configure it. It consisted of rule-based logic, which applied customization layouts to pages of the website by matching URLs and regular expressions. Each layout configuration allowed to add content to various pre-defined sections of the website as well as injecting scripts and custom CSS. It also allowed to add advertising banners from integrated OpenX system, which was responsible for banners configuration and analytics. The system even allowed to apply multiple layouts to the same page.
And in order to reduce performance penalties, introduced by the branding system, I've used aggressive server-side caching strategy by storing pre-generated layout blocks in the distributed memory cache. The cache was very granularly invalidated when corresponding block was edited by the administrator.
Finally, the holding management decided to do a pivot by converting the portal to educational platform. This task consisted of major re-design as well as re-purposing some functionality and adding some more.
I've worked closely with hired design studio to produce new website layouts. Furthermore I've introduced completely new modular styles system using LESS preprocessor, which helped to dramatically reduce CSS size by removing all legacy code.
At that time I was also tasked with recruiting and supervising a dedicated front-end developer in order to delegate some work and to improve development velocity.
Another key aspect of the new educational platform was lessons monetization. In order to achieve that, I've implemented a separate billing service, which allowed to accept and process payments from the website using multiple payment methods and integrated payment providers.
ATFG was an interior design and architecture studio for which I've developed an individual website with unique design.
As part of the project, I've created from scratch a content management system (CMS), which was then used to administer the website. Actually, this was also my diploma project in university, which I successfully completed with distinction from my professor.
The website included complex browser for studio portfolio, which allowed to search the projects catalog using various criteria and filters. Each project allowed to view high-definition photos via specially developed fullscreen browser with auto-playback functionality.
The website also featured a stylish vertical audio player, implemented with Flash. The playlist was controlled through the CMS system, where new tracks could be uploaded in MP3 format.
Groteck Business Media is a leading B2B publisher and events organiser serving security, telecom, IT and broadcasting markets in Russia since 1992.
I was working closely with Groteck’s CEO and CTO on various in-house projects, namely websites and CMS for them, web-applications and additional software and database systems.
One of the applications I've developed there, was an interactive map of exhibition booths. Information about exhibition participants and the location of their stands (in Cartesian coordinates) was loaded from the database and then rendered as a map, where each stand was drawn as a polygon with company's logotype. Each region could be hovered by mouse and the pop-up layer would appear with additional information and links.
Another solution, was a server-side rendering engine, which was loading hierarchical data from MySQL database and was producing dynamic pages of the website. It also supported various pre-designed components, from which complex pages could be created with interactive elements (sliders, galleries, tabbed panes, articles, etc). This allowed website editors to quickly update the content through the provided universal CMS system. Launching of new websites was also dramatically simplified.
Additionally, I’ve designed a complex distributed software server capable of sending vast amount of highly customized E-Mail messages to the subscribers of the company mailing lists.
MirTruda is an aggregator of job listings and resumes.
I was developing a distributed web crawler which allowed users to automatically import and export vacancies and resumes from around 10 different websites, normalizing the data along the way.
I was working as a release and team manager in LostFilm.TV release group. I was also developing internal information systems that facilitated release management, data accumulation and processing as well as team member coordination.
One of the solutions included full-featured private BitTorrent tracker, that I've developed from scratch using protocol documentation. I've also developed additional tools that allowed torrent file creation and submission to the internal system.
Another solution was a Skype-bot, which notified team members about important events and tasks, that demanded immediate handling.
Additionally, I was working as a community manager, administrator and was supporting the technical infrastructure.
I’ve written series of articles on level design for
Back in the old days I was interested in game development and was working with couple of FPS and RTS games, with successful releases on the market.
I've started my career as a private freelancer and was working on various projects, learning the basic technologies and gaining experience along the way.
As a part of the earlier projects I've implemented from scratch a fully-featured ecommerce website, with multi-category products catalog, cart, orders, registration and many other features, including CMS for it's administration. I've also implemented a web-crawler, which allowed to migrate thousands of products with their respective descriptions and photos from the legacy website to the new system.