Position: Full-Stack Developer (Node + React)
Category: JavaScript
Experience: 2 years | English: upper

My commitment to effective communication and teamwork, combined with my passion for problem solving, has led to significant process efficiencies and revenue growth in the projects I have worked on.

#The latest optimisation example

One of the projects had a NestJS server running two scripts in parallel.
The first script was responsible for fetching data from static JSON files, while the second one was supposed to scrape the web pages of a particular site. The project was partially complete and my job was to fix bugs and implement new features, but during testing, we noticed that both scripts were blocking the HTTP server during execution. The seeding script would only run once and would take about 5 minutes. The scraping script had to run in parallel with the HTTP server due to the large number of web pages to be processed. Conventionally, the server would be available for 0.2 seconds per second of operation and then unavailable for 0.8 seconds due to scraping.

The scraping consisted of several different HTTP requests, a lot of database interaction and reading the DOM document. Each category page that the script crawled had 50 links to other pages, that were the target. When the links on one page ran out, the script would switch to another one, and when the pages ran out, it would change the category. In the beginning, it took 10-12 minutes to read 50 pages. I managed to improve this time to +-2 minutes.

Scraping optimisations done by me:
1) removed the request for unnecessary resources in puppeteer to reduce the execution time;
2) implemented reusing of Puppeteer instances to avoid wasting resources and added some settings to avoid problems with CloudFlare;
3) since there were a lot of operations with the database (MongoDB), I optimised the structure of the target collections, added indexes for collections with frequent reads, and optimised queries;
4) optimised the reading of the DOM document, e.g., reduced the number of calls to the DOM tree traversal operations;
5) set up server clustering via PM2.

Seeding optimisations done by me:
1) optimised the structure of target collections, added indexes for collections with frequent reads, and optimised queries;
2) rewrote the reading of large JSON files to the Streams API.
I am a full-stack software engineer with over two years of commercial experience. I have worked on ten commercial projects in two different companies (product and outsourcing).

List of projects:

 - a traffic aggregation and analysis application (JavaScript, Ember.js, Node.js, Stripe);

 - a startup management platform (TypeScript, NestJS, MongoDB, Mongoose, WebSockets, Firebase, Stripe, Puppeteer, Cheerio);

 - an e-commerce application (JavaScript, WebFlow CMS);

 - an email signature creation platform with the ability to assign them to a group of users on different platforms such as HubSpot, Gmail, Outlook (TypeScript, React, Redux, Node.js, GraphQL, MongoDB, Google APIs, Facebook APIs, Outlook APIs, Stripe, MUI);

 - an e-commerce app to connect customers who need clothes repaired with local craftsmen (TypeScript, React, Redux, NestJS, Firebase, MongoDB, Mongoose, AWS, Google Analytics, Google APIs, PayPal, Bootstrap, Jest) 
 - an admin panel for the above application (TypeScript, React, Redux, NestJS, MongoDB, Mongoose, AWS, Google Analytics, Google APIs, WebSockets, Bootstrap, Jest);

 - a remote tracking application for runners and racers (Javascript, React, Redux, MapBox, Node.js, MySQL, AWS, WebSockets, PayPal, Jest);

 - a landing page for an e-commerce application (Javascript, React, GSAP);

 - two applications for a product company (React, Redux, Node.js, MongoDB, Mongoose, Next.js).

My responsibilities:
 - Developing new projects from scratch;
 - Maintaining applications (sometimes legacy);
 - Communicating with clients;
 - Managing small teams of junior developers;
 - Optimising application performance;
 - Working with QA engineers, other developers, DevOps engineers and designers;
 - Providing effort estimates.

I am passionate about my profession, so I like to improve myself in related areas. Projects that allow me to grow professionally and a friendly team willing to share their experiences are important to me.