It's Sunday again, which means another article from me. I hope it's helpful to you.
By the way: do you enjoy shorter or longer articles? I'm unsure if I should shoot for a specific length or just let it swing wildly each week; feel free to shoot back an email or drop a message on my Twitter profile to let me know what you think. 🙂
Now onto the weekly article. And I hope you have a great day. ☕
Ok, so you’ve landed a project or contract with a client. Great! That means you’ve already built some trust and rapport with them. Now it’s time to deepen that trust further.
“I’m building solid software for them. Isn’t that enough? I’m a good programmer!”
Yes, that’s the foundation: the meat and potatoes.
But I already assume you’re competent at your craft since you can find work. Now go the extra mile to make your client feel safe and happy with you. Let’s look at a few ways to do that.
1: Be upfront and clear about your availability
One thing that regularly burns companies is freelancers that suddenly disappear or have irregular capacity: this is your first opportunity to stand out from the rest.
Make it clear what they can expect from you, how long and how much you will be available, and the timelines you usually operate on.
Here’s an example of how to set up clear expectations from the beginning:
“I will be available for you 25-30 hours per week for the next two quarters at a minimum. I usually work with clients between 6 and 18 months at a time. If anything changes about my availability, I’ll do my best to let you know well in advance so we have time to replace me easily.”
Doing this gives the client clear timelines and constraints up front. It’s also why it’s easier to work with a single client at a time: providing guarantees like this becomes much more challenging if you juggle multiple engagements simultaneously.
Of course, you can’t plan for every scenario. Plans must change quicker than promised if you have a family emergency or an acute health issue. The idea here is to be as predictable as you can.
2: Have a predictable work schedule
Somewhat related to the previous point: try to have a standard weekly rhythm.
Yes, I know: “But I became a freelancer to have a more flexible schedule!”
And you still have much more room for this than salaried employees! Just be aware that working with you becomes more challenging for the client if you have irregular working hours.
An example of a middle ground could be:
“I’ll work on your project on Mondays, Tuesdays, and Thursdays from nine to four. I can be on-site on Mondays and some Tuesdays. If something changes, I’ll let you know the week before.”
Do what you can to be predictable and easy to work with.
3: Schedule periodic check-ins
Many salaried employees have 1:1 conversations with their managers: you should have a similar habit with your client.
Set up a recurring chat where you can check in and make sure your client is satisfied. Do this weekly if it’s early in the project or a smaller engagement. Monthly chats are fine if you’re deep into a stable, long-term project.
The meeting does not have to be formal—a quick 15-minute chat over coffee will do. Ask how things are going and if there’s anything they’d like to change in how you work together.
Be methodical about doing these check-ins: have them in your calendar, possibly in the calendar of your client contact.
Be very clear in how you communicate. Take additional steps to ensure you’re in sync with the client.
Summarize things. If you verbally hash how to proceed in a feature or delivery, come back quickly afterward in Slack or email with a written summary, ending with “This is how I understood what we discussed. Please let me know if anything looks off to you before I proceed.”
Provide frequent updates. Describe completed tasks so far, what is in progress, and what the next steps look like from your perspective. Make it easy for them to understand where you stand. Make it simple for them to see issues and change course if needed.
Adjust how you communicate as you go along. Is your client contact more of a verbal person? No problem. Work things out in meetings and phone calls, then follow up in writing afterward. Are they more of an asynchronous text person? Then adjust in that direction instead—perhaps add some informal chats to ensure you’re not overlooking anything.
Put extra effort into your writing. Use simple, straightforward language. State your assumptions explicitly. Make your writing easy to parse visually: use paragraphs and whitespace well. Bold out crucial points.
Generally, please assume that the people you work with are busy and overworked: make it very simple to keep up with your work anyway. The less cognitive load you demand from them, the more pleasant they will find your services.
5: Manage expectations constantly
Estimates are hard to get right.
Unfortunately, you still have to answer questions like “How long do you think this will take? Do we have time for both of those features next sprint?”
Practice basic estimation techniques rather than just trusting your gut instinct. When they ask you about timelines, don’t hesitate to counter with, “Can I think about this one and get back to you?”
Only promise or commit to something if you know that what they are asking is possible, viable, or feasible.
Before you deliver something, try to be restrained in what you promise, and make it clear when you see uncertainties and potential roadblocks. If necessary, remind everyone that estimates are a form of guesswork—not an exact science.
As you go along, if you see that your estimates were too optimistic and the schedule might slip, immediately let your client know about it. Don’t just sit on it. Please don’t rely on a heroic effort to hide it, either! Rational clients understand that estimates are subject to change.
After you deliver something, regularly remind stakeholders that there could be bugs and misunderstandings. Do what you can to make testing and verification as easy as possible.
If you deliver more or faster than they expected, downplay it. “This one was easier than I thought! Let’s hope the next part doesn’t bite us…”
6: Make your work visible
Always make sure project stakeholders know the work is progressing.
We’ve already covered status updates, but also make sure you regularly show visual and concrete samples of what you are working on.
Don’t rely on textual status updates alone: screenshots of your work are better. Better still: screencasts demonstrating what you are working on. Another step up: perform a narrated walkthrough (tools like Loom makes it easy to capture your talking head alongside the screencast).
7: Speak up about tradeoffs and concerns
Keep an eye out for any speed bumps and risks that could impact the project you’re helping with. Speak up as early as possible when you catch one of these.
The same applies to any points where a significant decision comes up. If you have to choose between two technical approaches that have a substantial impact on, let’s say, user experience or scalability: bring in the client as quickly as you can and describe the upsides and downsides of each choice.
Try to make as few assumptions as possible: you probably don’t have all the context you need to make decisions for your client. It’s your job to explain hard choices as well as you can to them.
8: Own your mistakes
It doesn’t matter how experienced you are: mistakes will happen. What matters is how you handle the situation when you screw up.
As soon as you know you’ve made a mistake, take full ownership.
If it’s minor, something like this is enough: “Hey, I messed up here, sorry. Fixing!”
But suppose it’s a severe issue with a broad impact. In that case, you need to treat it like a proper incident: communicate what went wrong, why it happened, the consequence of the error, how you’ll fix it, and how you plan to prevent it from happening again.
People are far more likely to be angry with you if you don’t acknowledge that there’s a problem.
And: if they can’t handle the occasional honest mistake, you should find a new client.
9: Be honest about what you don’t know
Nobody knows everything. The client has likely hired you for some core expertise, but you can run into holes or unexpected questions even in the subjects you are most comfortable in.
If you don’t know the answers right there and then, it’s ok to say so.
“I don’t know that off the top of my head. Can I get back to you on this?” is a perfectly fine answer. What matters is how good you are at researching and finding solutions afterward.
Not having clarity can also be an opportunity to build rapport with your client: “Great question! I’m not sure. Let’s think this through together.”
10: Make yourself replaceable
When you work as a consultant, remember that every engagement is temporary. You should help your client account for that as well.
I once worked as an employee in a big consulting agency, and during a 1:1, I told my internal manager there that I did everything I could to make myself replaceable on the client project. He almost choked on his coffee: I may have phrased it too sharply…
Clinging to one client for too long is bad for you: you can lose your edge and forget that you’re not an employee. It’s not a good situation for the client either: if they face a budget cut and have to let you go, they’ll remember you much more fondly if you made that transition easy for them. You will be fine: moving between clients and projects is the name of the game for us.
Knowing all this, you should actively help them prepare for when you leave.
How? Make your code easy to pick up and work with for everyone and anyone else. Write great documentation. Bring other developers into your work while you’re still around.
Bonus: Think like a client!
Finally, I have a mental exercise that can help clarify the tactics above. It can also help you develop additional ways to handle your clients.
Have you ever hired a tradesperson to build, renovate or fix something for you? A plumber, electrician, or carpenter?
Think through your experiences with both bad ones and good ones. What made you as a client feel safe and confident while you worked with them? What had the opposite effect? How did they communicate throughout? How were mistakes handled? What can you steal from how they conduct their business?
These interactions are interesting because they relate directly to our business: software developers are tradespeople as well.