How to Take Care of a Client

When developing software as a remote team

Photo by Igor Son on Unsplash

We’re usually hundreds or thousands of kilometers away from our clients. Our teams are also dispersed, everyone working from their homes. On a daily basis, we develop software for our clients not seeing each other face to face, not being able to sit next to each other and draw something on a piece of paper or point to some parts of the code on the screen.

We found two important ingredients that make it work: it’s the proper project’s kick-off and focus on communication. We also identified a few situations that are red flags to us. These are the settings in which we know something needs to change drastically in order to make a project successful.

Project’s kick-off

A universal Pareto principle applies here as well. Every project has its beginning and every cooperation has a starting point. This is the moment when investing 20% of our time, effort and diligence into a project’s setup, communication, client’s expectations, and the relationship decides upon the 80% of a project’s success. How to make it count?

Photo by Neslihan Gunaydin on Unsplash

Putting yourself in their shoes

It takes a lot of empathy and understanding from both sides to start a cooperation between two technology partners that results in a smooth development. Both teams might feel insecure at the beginning and basic cognitive biases (like halo effect, attribution effect) make it harder to get on well right from the start.

To overcome these we start by asking ourselves the basic questions like what were the reasons behind our client’s decision to hire us? Was that to speed up the development, transfer some knowledge or build a new feature? The reasons combined with the needs and motivations help us understand what role we should fulfill and also how can we build a relationship with the team.

In terms of the team on our clients’ side, we put great emphasis on what we could learn from them, and also what they could learn from us. Our goal is being partners and making the relationship beneficial for both sides. You want to have them on your side. Everything matters in these early days. Make sure to be particularly sensitive when evaluating the project and its codebase. Avoid criticism and speak about improvements instead. No one likes to be criticized and at that moment your main goal is building the relationship.

Building trust

Trust is the foundation and you need to do everything you can to gain your client’s trust in these early days. Again, put yourself in their shoes and try to think about the ways you can build trust. You can report on the project’s progress more frequently, you can be better at explaining the details of your work, you can share your knowledge and experience with the team. It all adds to the trust capital. Try to build one big team that consists of engineers from both teams. Everyone should have the same rights just as you have the same goal. Act as one big team and make trust one of the values of the team.

Finally, don’t be afraid to ask openly about the reasons behind your client’s decisions or approach to some of the project’s aspects. The more you know, the better you understand the situation, business model or end-user. It all adds to your project’s landscape and also results in particular constraints in which your client operates. Being aware of them makes it easier to accept the particular project’s decisions but also enables you to anticipate potential risks.

Saying it loud when something doesn’t work

This is equally important and hard to do when starting to work for a client. You want to be sensitive but at the same time, you want to be open about the things that are blocking the development. To give you some examples from our experience — you might think that some meetings are a waste of time or that only one person from every team should be attending them or that retrospective meetings should be held more often. Say it loud. Support your thinking with arguments, facts and common-sense reasoning. First, your client will appreciate your honesty and openness. And secondly, it’s a lot easier to introduce any changes when you join a project than after a couple of months.

Meeting in real life

Remote work is a lot easier and more efficient once people working together meet and get to know each other. We try to organize an on-site meeting with a client in the first couple of months. This is an opportunity to work together in one place, go for lunch and beer. We spend some time together and get to know each other’s personalities, habits, find out more about the behind the scenes project’s context.

Focus on communication

Working in self-organizing teams means that we don’t have PMs or formal leaders who would be the main point of contact for our clients. That’s why it’s even more important to take the communication setup very seriously and take care of it from the very beginning.

Photo by Markus Spiske on Unsplash

Deciding on the project’s setup

Your project’s setup is like a skeleton of your project. It should be strong, stable, reliable and present from day one. Discuss and decide with your client about the following things:

How do you structure your work — do you work in iterations and how long are they,

How do you report on your progress,

How do you make any major technical decisions,

How do you plan the next sprints or tasks,

How do you gather the requirements and business knowledge,

How do you evaluate your work,

What tools will you use for the development and for communication,

How do you communicate as a team

Decide on the way your teamwork and communication is organized. That doesn’t mean that you can’t change that in the future. It’s even better to be flexible about these decisions and adjust the setup on the way so that it serves your needs. But the ground rule is that you need to have a solid structure — something to start with from day one.

Regular meetings, also in real life

Status updates are the most important part of your communication. It’s best to do them as video calls so that you can hear your voices and see your faces. You get lots of information about each other’s moods, reactions, and personalities that way. Text communication is better than nothing, but you should be advocating for video conferences when possible.

As for meetings face to face, we try to meet in person once or twice a year with every client. Working together, having informal conversations, seeing someone in real life is just invaluable for day-to-day collaboration.

Understanding the business context

This is something you might be missing, especially in the beginning. And usually, the business context is really important when making any major project’s decisions. Make it a habit to ask your client additional questions about the business like future plans, next features, and company goals. In some of the projects, it makes sense to have someone from your client’s side that’s a business domain expert. This person should be supporting you on a daily basis with all the domain expertise that you need to make a project work.

Dealing with different time zones

Don’t let the different time zones turn into a blocker in fluent communication between teams. What works in our projects, especially when we’re in a few hours away time zones is adjusting our working hours every two weeks. One week we work later hours and one week our client’s team comes to work earlier. That way we have more hours during a day for synchronous work and communication. It also makes video status updates possible.

Red flags — what setups won’t work and what to do about them

Photo by Stanislav Kondratiev on Unsplash

A client that disappears

You might think it’s nothing bad, but believe us — it’s a big red flag in a project. You need to be in touch with your client. They need to be aware of the project’s progress and direction you’re heading to. They also should be able to provide you with project’s requirements and their expectations. If your client tends to disappear, try having a serious conversation and come up with a solution. Maybe they could nominate a person on their side that will communicate with you. Or maybe you can agree on a weekly meeting in the evening when they are available. Try inviting a client for a face to face meeting to discuss potential solutions.

Technical, control-freak client

It’s great to have a client who understands all the technical details. But a client who wants to control everything and wants to take part in every discussion and decision becomes a blocker. You end up discussing things instead of doing them. Your client becomes a bottle-neck that actually slows down the work in a project. Organize a retrospective meeting and be open about the problem. Try to come up with a solution that satisfies the needs of your client while you can focus on actual work.

A client that doubts the estimates

There is another potentially risky situation when your client starts questioning every estimate you make. It basically means that you haven’t gained their trust and according to them you should be working faster, doing more in a shorter time. Focus on gaining back their trust Review their needs and motivations and do everything you can to address them. There could have been some miscommunication along on the way, for example, they want an MVP and you’re building a fully operational product. Or they don’t understand the technical details and why some tasks have taken longer. Talk to them openly, explain everything in details and listen to their motivations.

Working on your own

Being a single person working on a project won’t work in the long run. You need to have other people around who can brainstorm ideas with you, do a code review for you or discuss potential approaches you can take. Avoid such projects in which you’re the only person in a team and always advocate for at least two-people teams.

Being one of the few working remotely

This is one of the most common reasons why remote work doesn’t work. You have some people working remotely, but the majority of the team works from an office. Guess the percent of communication that remote ones have access to. 50% sounds optimistic. It’s not always possible to do something about that, as it relies on your client’s company setup. But you can try mixing people from your team and your client’s team so that they work on the same tasks. That way you increase the percent of communication that remote ones have access to.

Only text communication

Try organizing your family life with text messages only. That would be a disaster. And it’s the same in software development. We need to hear and see each other. We need to understand our emotions and reactions in order to work efficiently. Come up with a regular meeting format that’s a video call. It might be planning, status update or retrospection. Do what you can within the limits of the project.