But they have asked more information. So I have written more text about myself and my skills.
>> I’d love to hear in your words what coding techniques can make a project successful in the long run and perhaps any technical trade-offs you’ve made along the way.
This question was a number 2 in the questionnaire. I have answered without deep details and will try to expand it now. As I understand this question isn’t about project management and techniques like Agile, Scrum, Kanban and etc. It’s about coding techniques like TDD and principles like DRY, KISS, oop, design-patterns, DDD, etc. I hope I got it right.
If you checked my books recommendation list at my StackOverflow story profile, you can have an idea that I should be pretty good in coding. But it’s in theory for you now. I will try to tell you a concrete story from my previous jobs to prove it and will tell a bit about myself.
Here is my story. After 5 years in university, I had no idea what I’m gonna do in my life. I didn’t know that I could write a code and earn money for that. I graduated in the 2010 year in Odessa, Ukraine. Mechnikova university is a good and strong university. I got a very strong basis of math and programming here after 5 years. But they haven’t explained only one thing, that I need to use this basis to improve my coding skills and find a job. :)
In the end of 2010, I have moved in Krasnoyarsk, Siberia. From a sunny coastal city to a cold gray Krasnoyarsk. I still don’t adopted and don’t like to live here and want to move to some warm place near an ocean (or sea). Especially since I have visited Thailand this year for 2 months.
I have moved in Krasnoyarsk to my wife. We have met each other on the internet, in Russian social network vk.com. I was already in love with her before even have met with her first time.
We live together in Krasnoyarsk for last 6 years and have 3 years old child. All struggles that I overcome to get married and to get Russian passport could be another long story.
But it’s half year has passed already since I have the Russian passport.
My real story as a developer had started in Rightside company (internet and telecommunications). I have been working in the company in 2011-2012. Here I have started my first PHP project from scratch. At this moment I hadn’t any real experience with OOP and frameworks. I had only university experience and some knowledge from basic video courses. My code was a mess with PHP, SQL queries, and HTML. The first task was to create an online interface for a call center. Access to a database of all company clients was given to me by a system administrator. It was hard and stressful, but I have managed to accomplish this project in about 3 months. The boss of Rightside is well known inside the company as a very critical man. But I haven’t an issue with him because he was satisfied with my job. Also, I have worked here for a company website which was made with Bitrix CMS. Bitrix CMS is a well known and popular in Russia CMS with a bad code inside. I didn’t want to work with it anymore ever again. So, since my 1st project, I decided to be always growing and learning. In this company, I had started two more small internal projects and they were made with “handmade” MVC and OOP. I had been watching video courses in a workplace.
I started to feel more confident, started to learn Kohana framework. Kohana is a fork from CodeIgniter and it was popular these days. But now this framework is completely dead.
So, I have updated my resume and trapped into company Razlet.ru in few weeks. It’s an air ticket sale company. Here I had grown all levels from middle developer to senior and even team-lead.
But, let me tell about my work in Razlet in details. I have started to work here in 2012. When I come into the company it was a small startup placed in a business incubator. 2 programmers worked here hard and the phone had never stopped ringing. They had huge problems with bugs in their running platform. And it’s not surprisingly. The platform was a monster written without a framework and actually, it was a combination of two projects in one – accounting balance and ticket sales processing.
Rulers of a company were a bit strange guys and they decided to run a new project in parallel connected with e-commerce.
First 3 months I have been working with bugs in an old platform and have started new e-commerce project using Kohana framework.
Boss was so impressed with framework possibilities, that we decide to split old platform into 2 projects. The old one would become an accounting system only. And I suppose to rewrite ticket sale processing system from scratch using Kohana framework. I have been working on a project for 1 year and it was launched. It was a success, company situation became much better. In next 2 years company become able to hire more developers and move from incubator to own office. As I know my system is still used as backend on a company main site. I got salary rise 3 times and became a lead developer in a team. I continued with project improvement and started some parallel projects with Zend framework 2.
In the air ticket backend system, I have connected several external booking and air ticket host systems APIs. In real time all APIs were requested to give a user a combined result. Also, all necessary steps to buy a ticket were implemented, including payment systems integration and documents generation. We had integrated Aviasales and there was a bit high load.
I have completed another project which goal was to parse unstructured air tickets and provide information for accounting system in some business model.
E-commerce project expanded into a platform to sell child cloth. We designed an integration with the 1C platform using SOAP.
During work, my responsibilities in a company changed a lot. I was responsible for deploy on a server, for scaling and services configurations. I was responsible for a task progress, of technical decisions and design, for hiring new developers (I was interviewing them). In one time I was informal team-lead for 5 devs and 1 DevOps.
I have participated as a developer or a team lead in several company projects including internal and external, connected with air tickets and not.
The process of work of IT department wasn’t good and I tried to improve it all the time. But considering Razlet was a small company and bosses weren’t programmers it wasn’t always successful.
While working in a company I have read several books including GOF Design Patterns, PHP objects, and Patterns by Matt Zanstra, Clean code by uncle Bob, Refactoring by Martin Fowler and even Code Complete. I started to read books every day and it’s my evening habit now. My understanding of OOP, patterns, architecture and my experience drastically improved. That’s why I have chosen ZF 2 + Doctrine 2 because I was very interested in good OOP and architecture.
Finally, I reached a possible company growth borders and decided to quit and work remotely. Also last year I feel that I could earn a lot more money with my skills, that I’m underpaid.
So, I have updated my resume.
>> I love to hear about collaborations you’ve been a part of particularly in an asynchronous environment, lessons you’ve learned from and how it impacted your development moving forward, as well as the desire to grow as an individual as well as a developer.
One day I have received a message on one site where I had updated resume. It was a message with a proposal to work remotely on a project from Yauhen from Czech republic. This message started a process which has changed my vision and gave me a lot of experience in text 2 years. First of all the proposed salary was twice bigger than at my job in Razlet. I was right, I was underpaid.
But I wasn’t very confident in my skills, I though that I need to be much better to work remotely. And I was afraid to change stable office job to some remote unstable.
When I met my new remote team in Slack it consisted in 2 back-end devs and one front-end. One back-end wanted to quit the project, that’s why they hired me. Another developer was a project lead. I felt very confident because I was a lead and the smartest guy at my previous job. I though that I know so much about web development and architecture already. I started to argue with a new lead developer at some points and quickly realized – I know nothing. His level was at least twice higher than mine.
He knew much more about DDD, about microservices and about new thing for me – hexagonal (port adapter, clear) architecture. When I realized that he is better and mostly he is right and I’m not – I loved this project, this job and he became my role model to learn from. For the first time in last 3 years, I would work with a guy much better than me. I was excited. Alexey was a 50% reason why I finally left Razlet and joined a remote team. Another 25% was a salary and 25% was an interest in a project and interest in remote work.
So, I decided to learn from him, to take this challenge and became the best developer in a team again and became a better version of myself. Some days we had long conversations in Skype with Alexey and he will so kind to explain me all basic things, give me links to articles and suggested books for a reading. I started to read a DDD book by Eric Evans and tried to understand DDD for a practical usage. And I succeed.
After 6 months Alexey decides to leave a project because he supposes to have an opportunity from his main work in an office to rewrite old external system with DDD and microservices.
And he stayed in panel100 project only as a consultant. But at this moment I was ready to take a responsibility and rule a project by myself. I was in the middle of the DDD book, but I got all practical knowledge to use DDD.
To be honest, we have worked with Alexey a bit longer. He invited me as a part-time developer into his team. And we had a project together for 6 months. Here I have trained a lot my DDD, microservices and hexagonal with Alexey. I have worked part-time only on weekends and after the main work.
Let’s return back to a panel100 project. This is a project for webmasters who have their own adult websites. The main project goal is to maximize webmasters income. The idea is based on a prediction of which broker will pay the most for an ad for a specific location. We gathered a statistic on a background from about 7 external brokers, through API or admin parsing, and analyzing this data. Then webmasters replace ad codes on their sites with our code. And our system tries to return the most valuable ad for a user geolocation. We have a high load here, about 10 000 000 unique visitors per day.
In 1,5 years project main functionality was ready and development was stopped. I have worked with another new developer.on a backend. He helped me on a project and I was giving him tasks. We have started another project called mjutools. It’s a project from an opposite side, for advertisers. It helps to manage advertising companies using complex rule system to update companies budget, add new companies and stop not profitable.
In both projects, I have used ZF2 with Doctrine 2, many external libs and use DDD and microservices architecture. While Panel100 mostly used MySQL, mjutools use a PostgreSQL and I became a fan of this DB.
Before I will finish let me tell about another challenge which I have faced during my work at a first remote job and actually give an answer about an async environment.
Challenge not connected with a technology, it’s connected with my personality.
The team has used Slack and Basecamp for communication. After my work in an office, I was like super charged. I haven’t understood that remote work has a different pace. The team was very distributed in time. I’m in UTC+7 timezone, some devs were from Crimea (UTC+3) and some from a different zone (UTC+4) and bosses were from UTC+1 time zone. And I have faced with a new situation. When I had some job to do which is depends on another dev job. But he hasn’t published any commit for a long time (for me), like about 1-2 days. Also, I have worked for a full-time, but team mostly worked as a part-time. I started to be nervous about the slow process. It wasn’t because of me, It was because I wanted to provide the best job for my bosses. It was familiar to me to do my job fast because I was trained to work in high pace in office. But for my bosses all was alright and I was only one person who cares about work pace. This situation even leads to some arguments with bosses and a team. I was confused that this argument wasn’t because of a slow job, but because I was too active. :)
After some time I fully adopted to a remote environment. I decided to provide all information about my work in Basecamp that will help all my team members to understand the current situation and do their jobs when they will at a computer. Also, I think this information gives the project owners a view of how things going.
I have read two great books from 37signals called Rework and Remote. They are improved my understanding of a good remote work culture and I fully agree with information from these books.
It’s a pity that before the 2017 New Year project owners decided to put development on hold. They wanted to make a pause to review their business model.
That’s why I’m looking for a new job now. :)
Now I can’t even imagine if I would found myself in office again, how I would adapt back to an office. I like and appreciate the freedom which remote work gives to me. I like to choose the right time and a place to work and to do my bests. While I have been working remotely I accomplished bureaucracy quest to became officially an entrepreneur. I started to consider myself as an entrepreneur who sells his skilled time to a customer.
During the last 2 weeks, I have sent a lot of applications to remote jobs and also to a company which helps with relocation. I had several skype calls with Germany, Nederlands, Vietnam, Cyprus. I’m doing it only because I still haven’t found a remote job. I want to relocate, but it would be better to travel first around the Europe, USA, Asia, Australia and see the world. Relocation with company help is like a roulette because I can’t be sure if I would like this country, where I will be relocated.
I hope that I have told a good story about myself. I hope you will like it and I hope I would find an opportunity to work remotely again or opportunity to relocate to a good English speaking country.