I paused my blog about working on projects for a reason since I’ve been pretty busy for the last couple of years.
It all started with registering at the freelance marketplace UpWork. Of all the freelance sites at the time, UpWork was probably the most popular. Rather strict account moderation eliminated a fair share of inadequate customers and freelancers. Orders from the category of “make me a cool analog of TikTok for $100 or a percentage of future earnings” certainly existed, but such “genius” startups were few. Numerous programmers from India were held back by the high cost of the so-called connections needed to send offers. On the contrary, programmers from the CIS countries were valued rather high at the site.
Later, following a tip from my brother, a customer came to me, and for a long time, the need to find new orders disappeared.
The client already had a working application, whose main function was to automate routine tasks in the social network LinkedIn. This social network is still blocked in Russia. According to the official version, because of storing the personal data of Russian users on servers located outside the Russian Federation. In other countries, however, this social network is actively used for recruitment. With our application, a user could set up a campaign for mass profiles views and endorses profiles skills, messages, invitations for connections, and similar things. Mostly, of course, this was used for attention-grabbing and mailing. LinkedIn struggled with this in part, so we had to write not just simple bots, but imitate the actions of a real person.
The application consisted of three parts: the bots themselves, the frontend (client, the visible part of the application) based on the Angular framework, and the backend (the server part with the main business logic) based on the Laravel framework. Since I already had some serious experience with Laravel’s PHP framework, I mostly worked with this part of the application. However, after some time we had some problems with frontend developers, so I had to take over some frontend development as well.
Most of the time we worked on implementing new functionality, and fixing user issues along the way. Then, when we had a lot of customers we had to take care of performance, optimizing database queries, getting rid of nested loops, and removing obsolete chunks of code from the application. In May 2022 freelance platform UpWork blocked accounts of all Russians and Belorussians and that was the end of my career on this platform. For a while, I was still helping a client on a mutual agreement, but in the summer the era of WeConnect was finally over for me.
Well, this job sharpened my skills, especially in Laravel and database query optimization. This is not the first time I have had to redo database queries after the previous programmers. For some reason, it is with queries, whether due to carelessness or ignorance, people have the most difficulty. Making queries in a loop is a very, very bad idea… In some parts of the application, I had to retrieve data from the database in chunks, not in their entirety, due to memory overflow. Often I had to merge data from different tables in a query, to reduce the number of queries to the database, as well as use other tricks.
I also worked with integration with external services: Stripe payment system, Intercom customer care platform, and tested the webhooks in Zapier.
But the biggest challenge for me was the frontend based on Angular framework because for a long time it was occupied by some developers from India, and understanding their noodle code was often about as easy as looking for a needle in a haystack… And in principle I like Vue more than any other frontend framework, I know Vue much better than Angular.
Also little tightened my English because all of the communication with the customer and other developers took place in English. The users described their problems in English, too. English, English everywhere…
Ahead of me looms another long-running project, I hope that it will be at least as profitable and as long-lasting.