Secrets to becoming a better remote developer 2021 edition

Every year I like share what I have learned. I will do my best not to repeat myself and be as practical as possible with this annual post. Last year I shared a post where I talked about the following subjects.

  • Be Positive and Open-minded
  • Create a clean setup and neat workspace
  • Create a before commit secret message
  • Create a Pull request checklist
  • Approach daily meetings as journaling
  • Tools you should use
  • Take Notes, notes, and more notes
  • Work in the morning
  • Create a routine
  • Use Vim and Tmux (or at least master your Env and editor)
  • Create a Dotproject
  • Read these books

If you want to read some of them, click here to see the full post from last year.

Here you will find the list of tips for 2021 added to the head of the post so you can skip the ones you may not find interesting. There is no correct order, so feel free to jump around the ones you want to read. For each topic, I will explain why it helped me improve.

Block time for coding

If your calendar is always open to anyone that wants your time, then you don’t control your calendar, you are letting people add things on top of your to-do list, and you will work with the rest of the time you have available to you. If I don’t have 4 hours to work on a problem, it is better not to start.

I took this tip from the book Staff Engineer: Leadership beyond the management track[4], which I will talk more about later. The idea is to block out at least 4 hours a day to work on my assigned projects and then make the rest of the work fit in the missing 4 hours open on my calendar. Yes, I add a 4 hours block on my calendar for coding. Starting doing this was hard, and as one of the go-to people for several subjects at my company, it complicated things even more.

Here are a few tips that helped me adopting it.

  • Tell your manager and have them on board. Once you clarify that the goal is to get more productive, most managers will like the idea and even help protect your time to work.
  • Block notifications to focus better, but add your close teammates or mentors as exceptions, so you will still get the message if something urgent happens.
  • Don’t use the blocking time to read emails or check social networks. At least to me, email is a significant break in flow. As engineers, people in our organizations email us expecting final answers. They may seem simple, but it sometimes takes over one hour to reply to a single email from a manager.
  • If your block time gets interrupted for other important, urgent meetings (production issue, dev env outage), call “calendar bankruptcy” and open the calendar for that day. Then, try re-arrange other meetings so you can compensate in other days the hours you missed that day.
  • Use the two days rule for the time block bankruptcy, don’t cancel it the for two days in a row. It is easy to let another take away the control of your calendar, and before you notice the week is over, you could not get anything done. Therefore I will fight hard not to do it two days in a row and lose the effectiveness of the blocking time.

Batch non-coding activities (Email reading, meetings)

Of course, we cannot be happy all the time and be only coding all day and leave at the end of the day feeling happy and energized. So there will be many other minor activities expected of you to do as part of your job. That includes replying Email, doing corporate training, one on one with teammates, fill internal tools, register the task hours, and many other activities.

My tip here is to batch similar activities altogether so you will be more productive doing it. For example, when replying to a single email, it can take some time to get into the mood of writing, but once you are in the 9th or 10th Email, you will be much more comfortable with that activity, and it will be easier.

Next, I am presenting an example of my weekly schedule and where the focus and batch time fit in.

final-agenda

Turn on the camera in calls and use a good camera

Humans are visual creatures[1]; we need eye contact to build trust, but now lots of us work remotely, and many developers are introverts. This is like the perfect opportunity for them never to look people in the eyes or show their faces. I have worked with people for months, sometimes more than a year, and never seeing their faces. But I have found out that people that turn out the camera create a better relationship with the people, and people can see your face when talking about it. It is much simpler to express confidence or even doubt. If your manager rarely sees you, it is hard to create and gain trust because nature does not help.

Because of that, 99% of the calls I turn on my camera, on calls to show my face, even when I am not at home or traveling, I want others to see where I am. Sometimes this also leads to informal conversations about where you are in different cultures, and those conversations are great to build a friendship. Additionally, I rarely blur the background or replace it with those fun images. When I am in my office, I want others to see how organized my office is and how much work I have put into it to be productive, and if I am traveling, I want people to see where I am to feel natural and legit; rather than “perfect.”

Having a good camera will also help people to enjoy having calls with you. I use the camera in at least three positions not to be all the same all the time. Next, I will show some pictures from these three different positions.

Practical tip: Fancy cameras are expensive, but there are good alternatives. I, for example, use the app ELGATO so I can turn my iPhone into a webcam, and I can have “for-free” an excellent webcam, and I can put it on a tripod only while I am on calls.

To summarize, it helps to build friendship, trust and start informal conversations. It is essential to building a relationship with the other people you work with, which is critical to your future in the company you are working for or with the customer you are serving. So turn the camera on and have fun.

Invest in audio quality

Microphone

I have been receiving signals of this since I started working remotely. First, it is annoying to talk to people with bad audio quality. Second, you struggle to understand what they are trying to say. Ultimately, people start to avoid talking to people with bad audio quality.

If people enjoy talking to you, they will do it more often and invite you to participate in more meaningful meetings. In addition, they will want to hear your opinion more often. All this is very important to have a more significant impact and therefore get more space and ultimately been promoted or recognized.

If you are wondering what microphone I use, I use budget microphone you can find it here(Amazon USA or Mercado Libre BR)

Call people for “showoff” sessions or pair programming sessions

Sometimes we avoid having calls with people not to disturb their work, and I do it too, but I have found that it is pretty valuable to call people to show your excellent work, from your team and also with people out of your team when you do something that you think is excellent call, someone, to see it and see how you have made it and why it is fantastic.

Demo your work to other teams regularly

Demo your work to your team is essential to keep the team synergy high. I found it necessary to show your work to other team members, mainly to pairs of your (other developers in similar positions in the same organization). To me, it has two main goals.

  1. You sync other teams about what is happening. So they know what you are doing and how and what is working and what is not working.
  2. You get feedback. You will identify with time the people that can provide feedback on what you are doing. Some people will only watch and appreciate. Others will provide their opinions and share some ideas. Both are important, but the feedback brings excellent value before you demo your work to more broader audiences or products or PMs. This other developer will give you an outside view that may result in a much more impactful delivery in the end.

Why is this important:

  1. You show your best work people will know what you are good at and may look for you when they have problems or need help.
  2. You are open to them to do the same, and you should appreciate their work and encourage them to do it when they have something more to show.

As crucial as showing your best work, calling people to help you when you are lost or seem not to see a solution for a problem also helps build trust and work on your humility. They will respect you even more if you show that you have hard times solving some issues. Sometimes even simple stuff can make us spend hours, and calling another person to help for 5 minutes may help you see the problem and fix it quickly.

Help first, and also focus on delivering your results

It is important to help people as part of your job as a developer. Helping others will help you to build your reputation with other teams and even people across different products. Every time someone asks me help and manly if they are blocked that becomes a priority to me to help them, I prefer to jump on calls and help live event if we can fix it over chat application I find it to be more fun if you jump on a call and just chat a bit as you help them resolve their problems.

Another great result to help other people is that when you help, they are willing to help you back when you need it. For example, I love to help others with anything they need because one of our applications has some production issue. I may need their help to check something or find something I don’t have access to or don’t know how to find, and they have a lot of goodwill to help me. I never have to worry or do escalations or call people from alerting system; a simple ping from Teams or slack will quickly give me what I need. Moreover, as we are used to talking to each other, it is always a pleasant experience in the worst moments (when facing an outage, for example).

As much as helping others is essential, it is necessary to focus on delivering your results and take care not to spend all your work capacity helping and forget to implement the work you need to deliver. It is essential to communicate with your manager as well and “sell by the correct price,” if you help another team in a complicated task successfully, make sure to comment on your daily meeting and let your team know you are spending time helping others teams.

I find this to be one of the most important points of creating trust and friendship across the organization you work with, and in the end, that is what matters.

Go to a coworking or a coffee shop at least once a week

Screen Shot 2021-09-11 at 3 24 24 PM

I got this tip from the book Traction[3]. At the end of the book, the author mentions some of the most successful people in marketing have this habit of going to a call and different places to get fresh ideas. I live in a small city in Brazil with few options for this kind of activity, yet I do it at least once a week. I will pick my personal or working MacBook and go to a coffee shop and work on something there, normally like designing something or writing some documentation or blog posts or coding something I have already decided how to code.

It is amazing how changing the place where you are can do magic to your creativity and productivity. Some fresh air and other people contact can also be fun. I usually don’t talk too much to people in this kind of situation. I will usually have galaxy buds in and will be concentrated on my computer, so I am not open to interruptions all that much.

Normally when in my home office, I sometimes stare at the screen for like 5 minutes trying to write something, and I can’t get something to start flowing. On the other hand, in the coffee shop, I rarely have the same situation. It works like magic to me.

Create an Ideal week plan and pursuit it

I took this idea from the book “Staff Engineer: Leadership beyond the management track.” At the beginning of the book, they present some weeks’ calendars for each archetype, and I had this idea of creating an ideal week plan. In the past, I have made a “perfect day” plan and end up not working well because of some stuff I won’t have room to do all days, for example, going to the gym. I go to the gym three times a week on Mondays, Wednesdays, and Fridays, and on the other days, I like to use the morning for other matters like a haircut or keeping up on reading or writing. So in this situation, a weekly plan seems to be better.

I have one specific situation where I also need to work on my own company (I have maintained a SAS company for the last ten years, growing ~30% a year in customer numbers) and also want to put time into my projects like Nun-db, for example. So when I am not in the gym, I use the time to work on my projects.

Next, I am presenting my ideal week plan, note that I wake up early and sleep early just as much, I am a morning person, and I work much better in the morning, so that is why I like to do my “best work” in the morning and note that in the days I reserved to do Nun-db work I connected it with the reading writing because some times those activities are quite connected to each other. I don’t care too much to use that time to code something I am having fun and learning while working on Nun-db.

The first part of my work from 9 to 11:30 is where I have the most productivity, normally by 11:30, I have coded all I wanted to code for the day at 11:30 BRT I will have my daily meeting, and the USA team is start working the next 5 hours I have after the lunchtime I usually have a lot of interruptions and help other in my team and in other teams, as well as taking part in meetings and pair programming sessions, I sometimes block 2 of those for productive work but normally is more to sync and preparation work, it is also the time I use to connect with the team in the USA and Canada to make sure I remove any blocker I have and help remove others too.

As I am not a robot, once in a while, I will travel or have some events or collaborating with another team in India or Israel that will compromise my calendar. When that happens, usually, that breaks the hell out of my plans. In that case, my approach is to try hard not to let that happens for two weeks in a row, so my body and mind are used to this routine, and I think if I notice that this week’s plan is not doable, I will rebuild it from 0 to try new more realistic schedule.

My point here is to have a general plan, simple and easy to follow and try to pursue it, nor a hard plan that I will be miserable if I fail to follow it one week on the other.

Just as a final note, in the first hours of my day, I normally still waking up. I prepare my coffee with a v60 and hot water every day, as well as preparing eggs or pancakes every day. I also have two big dogs to feed and gardening to take care of on a daily basis. I found that initial activity to take almost 1 hour on most days, so this first hour of the day to me is just lost, and for me, that is ok because I use that time to get into the mood of the day and to rest my mind from computers before I jump into them.

I have been thinking of strategies to improve this week’s plan. I like the current one, but I feel, when I sit at the computer to work my day, is over, and this makes me feel bad some days when I sit to start doing my stuff at 7 am, and my mind knows I will only stop at close to bad time I feel a bit overwhelming but I still not have a good solution for that in my calendar, maybe I can share next year how I solve that.

Calendar text

Meet with your friends to work together (even if it is only a couple of times a year)

Screen Shot 2021-09-11 at 3 31 53 PM

This year made this tip a bit more complicated to apply, yet we managed to get together twice. Normally a group of close friends and I get together to work once or twice a year, it is rarely the more productive day of my week when that happens, but normally it is quite useful for networking and also shares some cool stuff you have been working personally.

We also use the opportunity to share tools and workflows we have been using in our day-to-day work. Like some new Vim plugin or new integration of GitHub actions or whatever we think is fun.

The last time we got together, we engaged in some interesting conversations on web performance and performance improvements.

I find it valuable to create these opportunities to talk to people you have worked with quite interesting this year. As soon as things in Brazil got a bit better, we also managed to organize an “Investing getting together” where 95% of the people attending the event is a developer, in this case, we did not work, but of course, we talked a lot about what we have been learning.

This is important for two things,

  1. You keep your friends close, and even tho we only work together like once or twice a year, my friends and I have been doing this for the last six years or more, and we still feel like we all work together in the same company, where in reality today we are distributed into at least eight companies in 3 different continents (most of us work remotely from Brazil).

  2. You keep your contacts close, and you can share new opportunities. As I write this blog post, I am bringing one friend that worked with me for four years in different companies to work on the same company I am consulting. He will be a full-time employee there, it is a good time for him to move on, and it will be a great fit for a team I am helping to build to handle scalability challenges that require supper, senior engineers, with Cloud and Node.js and distributed database deep knowledge, (Good look finding one of those in the marketing nowadays). And of course, if I have not maintained this relationship for this long, I would be out of luck to find someone to fill this role. In fact, in my current company, I only joined because I was referenced to the CEO by a friend that I worked with between 2010 and 2013.

Our field is full of opportunities. Therefore many people don’t worry too much about networking. I, on the other hand, think this can bring you opportunities quite hard to find otherwise. Hiring someone or being hired is such a stressful situation when you have a reference or someone to call and ask how the company performs and how the company culture or even how is the day to day work is nearly impossible to get a realistic view if you don’t have a close friend to call and ask.

Read

Reading is one of the most important activities for your professional growth. I like reading books and blogs. I don’t follow many blogs too close nowadays, but I am always on hacker news, checking what people have been doing recently. Next, I will present my approach to reading and how I have managed to read more in the last years.

1. I don’t have a want-to-read list.

Lots of people find this to be weird, but I don’t like to create a list of books that I want to read. Typically if A book is interesting, it will be repeated to you so many times you will remember it when you are looking for your next book. Having a list may overwhelm me with the numbers, and I find myself offering decision paralysis with my 200 want-to-read books list. Instead, I read books people recommend to me over and over again. I actually took this idea from the base case book where they are against having a future requirements list that never gets implemented.

This way, once I finish a book, I normally write a bit about it (Some of them I even publish in this blog) and bring it up on conversations with friends 90% of the time. My next book comes from one of those conversations.

2. I don’t check who is the author of the book until I have read it

I know this sounds odd, and once I get to know an author, I do read more books from them, but I want to create an opinion about the book without polluting my mind with the author’s resume. What is written is more important than who writes it, and if the book is bad, I normally won’t even go after who is the author.

As most of the books I read are recommendations from friends (Not from algorithms), I actually rarely have bad experiences.

3. Intercalate technical and non-technical books

I normally read two books at once at max, normally one technical and one from another subject I like, for example at the beginning of the year, I read “Adopting Elixir,” then “Atomic Habits,” then moved on to “Designing data-intensive applications” and then “Traction,” as you see not at all related to tech. This gives me some time to digest what I have read and, at the same time, read some alternative books to keep the reading going. When I read a technical book, I like to take the time to implement something from the book, so normally it will take much more time to read a tech book than A nontech book where at max I will try some new idea or habit in my day today, and that is it.

4. Quality is better than quantity

Enjoying the reading and feeling you are learning new stuff is the most important stuff, in my opinion. I don’t see the value of reading a book a week if you are stressed and miserable and much less value. I know if you read a book on a “rush” so you have a “count,” but you did not take the time to try something from it, I do want to read more, but only if that means I am learning more and implementing more of what I have learned,

Next, I am presenting the three books I liked the most reading this last year and you can click in the link to see my reviews about it.

Listen to technical podcast

I actually have a minimalist approach to digital products. There are so many options that, in the same way, for books, I don’t have a list of podcasts I need to listen to every week. I only follow one podcast the Changelog. I found the changelog accidentally, like four years ago, during my master’s. I used to drive for 12 hours every week. I lived 600Km(372 miles) from the university where I studied, and there were no good airplane options to travel from my city to there. I usually would go to BH on Sunday and come back to Paraiso (paradise in EN) on Wednesdays. It was a hell of a hard year. One day while I was preparing to travel, I was looking for media to consume while on the road. Normally I would download some Youtube videos, some fantasy books, and lots of Spotify music, but at that time, I was still learning vim, so I searched with no hope to find for vim on Spotify, for my surprise, there was one, and it got my attention right away, I remember downloading at least three episodes on that occasion, and I loved all 3 of them.

I have listened to the new changelog podcast ever since, but I only follow the main changelog no other track. I found this to be amazing. I read learned so much. I learned Elm, Rust, and elixir because of changelog, and I find it super energetic to listen to them every week. Now I days as I no longer have to drive that much, I usually listen to them while walking my dogs on Tuesday or Thursdays depending on my weekly schedule, and normally I will come back from the walking feeling energized and wanting to work on NunDb or write something or even to research something I have got from it.

If you don’t have an official podcast yet, I recommend starting from this one; you will enjoy it.

Run a non-commercial side project

Screen Shot 2021-09-11 at 4 00 56 PM

A big part of learning is making mistakes and learning from them. As you grow in seniority, mistakes become more expensive in money and or stress. Trying new things on stable products in big companies is hard. So how do we keep learning? How do we get updated? How do we try new stuff to be seniors on it five years from now? Run a side non-commercial project.

Why no commercial? I will get deeper into this soon, but if people are paying for it, downtime, bugs, and instability are not quite acceptable. While learning, you probably have all of those, sometimes multiple of them, at the same time.

I understand this may not be to everyone, and if you think this does not fit into your life now, don’t feel pressured to do so. Nevertheless, I believe this is the way I learn and grow the most. My SAS company started ten years ago as a non-commercial side project, and today, it makes me more money than all my other investments sum (stocks, real state funds, and a house rent I receive). I started that project in 2010 to learn Scala (the language I followed in love back then). After having a lot of fun creating a blaze fast real-time multi-column schedule calendar experience with Scala and HTML and Jquery (guys 2010 don’t judge me), I start presenting the idea to friends and managers of mine. That knowledge helped me get promoted to architect where I worked, and it yielded excellent results in my career back then. I was doing only mobile development for three years, so this side project kept me updated with web development and frontend technologies that were important to my following jobs. It took me two years to get my first paying customer and more than 2 to hit the 100 customers, but nowadays, with more than 600 registered companies, we are growing 30% a year with 0 external investment and only one employee. Once this business was running, I felt it was time to start a new one to try new things.

I am now ten years later repeating the same thing I did with Ebelle with NunDb, I spend 4 to 10 hours a week working on Ebelle related activities, but I consider this as my “second job.” Today’s side project is NunDb, a free open source MIT licensed real-time database, and it now servers Ebelle and its apps are their real-time data platform.

My main job is to be a consultant in a big company on performance optimizations code, web, cloud, and infrastructure. A big part of my job is to create the tools and frameworks to improve performance continuously. Before that, I worked migrating a platform from Azure K8s to a GCP and Mongo Atlas. Before that, I was responsible for migrating the legacy deployment system based on VMs on azure running a node.js application with PM2 to a cloud-native application on K8s, Dokerizing, and created the continuous delivery pipeline from 0. Before that, I was responsible for creating the CI and test culture in the same start-up creating test frameworks and CI pipelines for the same platform. All that to say, I am doing performance, platform, infrastructure, scalability, and architecture work on my day-to-day job.

In my own company, I manage all the infra by myself (it is a docker deployment not too complicated based on Linode), I code all the core features. These new APIs small mobile applications complement the product and onboard new integrations we call or expose new APIs. Most of the features nowadays are done by my other partner that works much closer to the customer and can do all the UI and workflow work needed for new requirements (this is rare nowadays too. We try to reduce as much as we can the number of requests we accept).

In these two activities, where I spend 40 to 48 hours a week, I will code at the max of 10 to 15 hours a week. All other activities are not code-related. In both cases, I have little space to experiment with new languages tools and etc., because there is little room for errors and failure in both cases (In my main job for health care systems, or in my own company with customers used to a ten years old stable as rock product).

To experiment and make mistakes that don’t cost me a lot of money or cause too big a problem, I must have a side project. I wanted to learn rust deeply, and it would be impossible to do so if I had not started NunDB. On Nundb, I can work 10 hours a week or no hours at all without any problem. If I have one hour to code, that is enough for me to do something on NunDB, it requires much more coding than my other two activities, and I still only have a hand full of people using it and only one single critical application (that is Ebelle), so there I can experiment, learn, have fun, in the future it may become another job if it became popular and than maybe ten years from now, I will have to create a new experiment project to have fun while Ebelle and NunDb run by themselves, I feel it may still be more fun for the long run because of the nature of the product (a database nor a business application) and is open source, but only time will tell.

Take a few days off every once in a while

Fishing Natal Hotel

“It is a marathon, not a sprint.” So a few days off won’t destroy your business or job.

I rarely took vocations in my early years working remotely (the masters are also to blame). As a consultant, most of my payment is hourly-based, making me want to take fewer vacations. I find this to be one of the more significant mistakes. My goal is to take three small vocations every year. They will be from 3 to 5 days, and I usually use some USA holiday to complement (as I live in Brazil, those are great dates to travel because places are less crowded).

I plan to travel at least 2 with my wife and one by myself (maybe even to a tech conference). I use this day to reduce the stress levels from my work and my company and meet new places and try activities that I like doing, like fishing.

This year as traveling is not that easy. Still, I went fishing for five days with my father, father in law and my wife, and now I am with my wife in Natal to spend 5 days on the beach.

While traveling, I always bring my MacBook with me, and if I feel like doing something, I sit and code with no shame, usually because I wake up super early. My wife normally will wake up 2 to 3 hours after me. I write some code in the morning, even these days, but that is not a problem if I don’t. I take the days off to rest. I don’t even open work emails or calendars these days, but if I am coding something for fun, why not doing it while my wife finishes her sleeping?

Write offline

I have written most of this blog has on a 3 hours flight from my house to returning from a small vocation in Natal/RN Brazil. It has been almost two years since I was on an airplane, but it is magical how much more we can write offline.

I have been trying to finish this post for at least three weeks, and it is hard to get to the “mood” of writing now. For 3 hours on an airplane with no internet connection, the writing flows much better. I am hoping to start traveling again once this pandemic gets better. Until then, I will get offline a couple of hours a week for writing, maybe when I am in the coffee shop. Or in the weekend mornings, we have all been hipper connected, and these last two years have made us (or at least me) more connected than ever. A few hours offline won’t kill anyone, and it may do great to your mind.

Conclusion

It seems that my 2020 post was more technical than 2021 one and that the 2021 posts touch some of the human behavior points. Maybe the most important point I should make is not to try to emulate something that is not natural to you.

After six years working full-time remotely, I have tested and learned a lot, and I am still testing and experimenting and eliminating what is not working from my tool belt. See you next year.

References

  1. Current research on the organization and function of the visual system in primates, Jon H Kaas and Pooja Balaram
  2. Kleppmann, Martin. Designing Data-Intensive Applications. Beijing: O’Reilly, 2017.
  3. Traction by Gino Wickman
  4. Staff Engineer: Leadership beyond the management track by Will Larson

Reviewes

@pedrokohler

Written on October 2, 2021