Becoming an effective remote programmer

I have been working from home as a web developer for one year now. But before that I was a web freelancer for almost 4 years and for 2 years I worked in the office at SimCorp but my whole team was sitting in Copenhagen. So, I am a pretty experienced remote worker. I love this way to work and thus I try to be effective at it. In this post, I will share what I think it takes to be an effective remote programmer (non-tooling tips, which are covered here).

I believe that in order to be an effective remote programmer, one has to deal with severe problems this way of work imposes and develop personal traits: initiative, excellent communicator, and trustworthiness.

Let’s talk about problems first.

Lack of social interaction. Or just loneliness. Working from home solved my biggest problem of working in the office – the commute. It took me 3-4 ours per day, almost 55 days per year. But unfortunately working alone is unnatural. We as species survived because we had social interaction and collaboration. We are too weak to survive alone. Thus the need to socialize and collaborate is deeply embedded in our brains.

Furthermore, researchers have proved that changeable environment and interaction with different people improve our ability to learn.

Hence, to be effective remote worker one must find the way to interact with other people outside his family. I really struggle with this. But I try my best to socialize with my current and previous coworkers, to teach courses, to talk at conferences and other events. I am in constant search for an opportunity to have my social interactions.

Some people use coworking spaces but I am not a huge fan of them since for me workspaces neglect commute absence and personalized environment benefits.

I do at least 1 hour of exercises 6 days a week. To compensate the toxic influence of loneliness on our ability to learn effectively, the remote developer must do a lot of exercises, preferably aerobic, preferably every day. Researchers proved that aerobic exercises can help with this problem.

Lack of self-motivation. It is definitely hard to stay motivated when you stay home and things don’t flow much. There is no boss standing behind your shoulder and motivating you using whatever method he is good at. In such a case I believe only hard self-discipline can keep you effective. I use Pomodoro technique and my discipline is pretty simple: deliver 10-12 Pomodoro per day to my customer. That is not less than 50 Pomodoro per week. I almost never break this rule. Sometimes I feel like I do not want to code. But I force myself into doing Pomodoros. And you know what? Right in the process I start feeling good about the work I am doing and the amount of Pomodoros I have done.

Lack of self-management. Since you don’t have 9 to 6 working day anymore your concentration starts to decay. You start mixing work with entertainment and home duties. You relax because you are home anyway. This semi-work can take a large portion of your day and at the end of the day you might feel unsatisfied with what you have achieved. Thus you merge your work and your private life and neither part of your life wins in such a situation. To stay effective, the remote worker must manage his time and his work very actively. I don’t have a manager who would micro-manage me and therefore I do everything on my own. But I still use some kind of Kanban board, create and manage tasks there, try to do estimates and reflex on my estimations accuracy. I usually pretty consistent with my working hours. Although I do have the flexibility to work whenever I want to, I don’t really wait for that muse to come and start working according to the planned schedule.

Now, let’s talk about traits one has to sharpen to be an effective remote developer.

Initiative. You don’t move your ass unless someone kicks you? Then remote work is not for you. At least for now. I hope one can teach himself to be more initiative. Initiative bases upon a strive for productivity, being self-driven and requiring the least amount of managerial overhead. From time to time, you will have the idle time. It is important to spend this time with the value for your customer. I always try to initiate some improvements in the project which will potentially increase team’s productivity in the future. These improvements might be technological, educational, process or product related. Does not matter much. The point is to strive to deliver something a value to my customer even if I was not asked to explicitly.

Excellent communicator. This is a trait everyone in tech must have. But in remote work it is critical. To be effective one must communicate as clearly as possible because almost everything happens asynchronously in remote. This constitutes a special challenge for a non-native English speaker who works for the English-speaking customer. I do a whole lot of things to improve myself on communication skills. Starting from reading books on tech writing and finishing with listening to podcasts and writing this blog.

Trustworthiness. I have never seen my current manager. He has never seen me. He sits somewhere in California and I sit here in Ukraine, opposite side of the globe. Most probably we will never see each other and have some beer together. Teambuilding is the place where people build trust in addition to other things. But we can not have them. Hence all our interactions are based on a trust in advance. He and I do our best to maintain and build real trust. I try to be never late on the call and in case something happens I make him aware. I try to make visible my work and my progress. I do my best to be as available as possible and make him never wonder where I am and what I do and whether I am worth to deal with. My manager also does something which makes me trust him. This something is only known to him. One thing I am sure about is that he know how to build a trustful relationship with the remote team.

To summarize, in order to be effective try to socialize at least once a week with people outside your family. Do everyday workouts (preferably aerobic ones), use Pomodoro technique to fight distraction and structurelessness and impose a discipline on yourself to do at least 50 Pomodoros per week. Try to be initiative, constantly invest in your communication skills and actively build the trust with your remote client or manager. There is, of course, whole tooling side of this topic, which I have covered here.


Про творчість у програмуванні

Програмування давно перестало бути творчою професією. Мені нудно ним займатися і я не хочу провести решту життя перед монітором складаючи програми. Так розмірковує один мій приятель, який між іншим, уже покинув програмування і зайнявся більш творчою справою.

Мені здається він і має і не має рацію. Професійне програмування сильно змінилося за останні кілька десятків років. Якщо відкрити та погортати книги з програмування минулого століття, можна помітити, що вони насичені інформацією алгоритмічного і математичного характеру. Думаю, це пов’язано з тим, що більшість тогочасних програмістів були колишніми або математиками або інженерами з електроніки. Апаратне забезпечення було порівняно примітивним, тому більшість програмістів займалося системним програмуванням намагаючись витиснути максимум із заліза. Було багато завдань, які ніколи раніше не стояли перед інженерами. Наприклад, створення перших браузерів, текстових процесорів, графічних редакторів та інтерфейсів. Усе це вимагало неабиякої майстерності у створенні ефективних алгоритмів і, безперечно, творчості. Робота програміста була дуже творчою, програмістами тоді були переважно фанати своєї справи, яких захоплювала можливість створювати щось, чого не існувало раніше переборюючи обмеження фізичного світу представленого примітивною електронікою.

Сьогодні усе змінилося. Так, є невеличка купка програмістів, які досі розширюють межі можливого. Вони сидять у Google, Microsoft, Nasa, Facebook та інших місцях створюючи й визначаючи наше технологічне майбутнє. Але світ заповнений величезними ордами програмістів. Більшість із них і близько не ставляться до своєї професії пристрасно. Вони потрапляють до неї лише тому що вона комфортна, безпечна і гарно оплачувана. Перед цими ордами ставлять бізнес завдання і ці завдання мають мало спільного з творчістю. Потрібно порахувати купон по облігації? Ось, будь ласка, формула. Необхідно відсортувати великий масив даних? Ось бібліотечна функція. Необхідно зробити запит до мільйонної бази даних? Ось приклад запиту на StackOverflow. Треба зручний веб інтерфейс? Хапай Angular та Bootstrap! Треба виконати автоматичну транскрипцію аудіо? Смикай IBM Watson web API. Потужне апаратне забезпечення робить економічно невигідним возіння з вишуканими алгоритмами напівосвічених програмістів з астрономічними зарплатами. Дешевше мати немотивованого програміста який пише аби як. Апаратне забезпечення і повільна мережа у 80% випадків перекриє неефективність його програм.

І все ж я вважаю себе творчою людиною, яка отримує задоволення від своєї роботи навіть після 13 років практики. Мені не потрібно застосовувати творчість для складання крутих алгоритмів. Творчість я застосовую до оформлення, до створення по справжньому простих і читабельних програм. По своїй суті це ніщо інше як педагогічна діяльність, спроба передати процедурні знання не лише комп’ютерові, а й людині, яка читатиме програму завтра. Чого вартий лише вибір назв для різних програмних артефактів! Це цікаво, це захоплює, це мотивує. До того ж простий та читабельний код має велику цінність для компаній, адже дорогі програмісти менше часу витрачають намагаючись зрозуміти код. Натомість вони мають більше часу створювати нову функціональність та виправляти дефекти.


Мій перший мобільний Веб застосунок

На 5-ому курсі університету у мене був цікавий курс, назви якого я не пам’ятаю. Щось подібне до економічної кібернетики, навіть не знаю яке він мав відношення до моєї спеціальності, телекомунікації. Я не можу пригадати жодної теми з того курсу, як і з більшості інших університетських курсів (тому я виступаю проти вітчизняної вищої освіти, для мене то марнування часу). Але дуже добре пригадую екзамен, для якого я вперше розробив мобільний веб застосунок і забезпечив гарний результат на екзамені для усієї групи.

Так, ми були не надто сумлінними та чесними студентами. Мені особисто взагалі було до всього байдуже, на той час я вже кілька років займався професійно веб програмуванням, вважав себе програмістом та збирався розвиватися у цьому напрямку. На тому екзамені було необхідно розв’язати доволі складну задачу, здається пошуку оптимального шляху для доставки товару із пункту А до пункту Б. Розв’язок необхідно було підкріпити описом ходу розрахунків, оформлених визначеним чином. Розв’язок цієї задачі найбільше впливав на результат екзамену, а задача була складнувата для більшості студентів, особливо в умовах стресу, який завжди наповнює екзамен.

Як я уже згадував, я був на той час веб програмістом і мені стало цікаво не просто розв’язати задачу, а написати програму, яка б розв’язувала задачу та автоматично формувала звіт про хід розв’язку. Посидівши деякий час я таки написав цю програму використовуючи PHP і, звісно, HTML для формування звіту про розв’язок. Програма містила форму, в яку можна було вводити умови задачі та кнопку, яка запускала обчислення.

Але як було мою програму використати на екзамені? Комп’ютерами користуватися не можна було, та й не було ні в кого ноутбуків у ті часи. А навіть якби й були, про WiFi в 2005 в університеті ніхто і не думав.

Тогочасне рішення мені винесло мозок. Це було магічно. Я почувався магом і ще більше переконався у тому що я хочу продовжувати бути програмістом. У мого приятеля був один з перших смартфонів Nokia


Він не шкодував грошей на мобільний інтернет, хотів бути онлайн 24 години на добу. Тож я домовився з ним, що він дасть мені смартфон на кілька хвилин, поки моя програма розв’язуватиме задачу. Натомість я йому дозволив скористатися своєю програмою для розв’язання його варіанту задачі. Викладач не протестував. Чолов’яга не підозрював що смартфон + інтернет міг розв’язувати його задачі.

Звісно, ми впоралися з екзаменом на відмінно і дуже швидко. Був навіть час ще декому з групи, хто погано справлявся із задачею, передати телефон. Я тріумфував, моя програма допомогла стільком людям! А я для себе відкрив новий світ мобільного інтернету.

Але до чого я це розповідаю? По-перше, мені здається ця історія цікавою, а по-друге, це чудовий приклад ефективності learning by doing. Я не пам’ятаю жодної теми з того курсу, жодного факту, жодної ідеї. Але чудово пам’ятаю цю програму і як вона працювала.