Looking to level up your consulting skills? One thing I’ve observed among our more senior Atoms is a mastery of approaching work strategically.
## What Do I Mean by Strategy?
As consultants, we juggle a lot of different concerns and goals. At a high level, our goals are things like:
- Deliver quality software
- Hit budgets and timelines
- Provide a great experience for our clients
Once we get down into the details of actually creating software, however, these goals get a lot more complex and nebulous.
For example, does delivering quality software mean that you’ve had time to prove its correctness by modeling it in TLA+, that you’ve written property-based tests, or that you wrote it in a strongly-typed language? Or does it mean you’ve delivered software that anticipates supporting the needs your client is likely to have in the future?
The answer, as you may expect, is that it all depends–on a million different details about the project and the scenario where you find yourself. Fortunately, we have a more fundamental goal: to deliver the most value we can, as soon as we can.
This is where strategy comes in, and it encompasses two important things:
- Identifying real future concerns
- Making the right tradeoffs between present and future work so you can deal with those concerns
## Identifying Concerns
Identifying areas of concern takes a mix of experience and analytical
thinking. It includes things like:
- Is there some performance impact down the line? How will the system need to scale over time? Who will be responsible for handling these issues?
- What work will need to be done as part of future stories, weeks or months in the future?
- What problems will need to be solved eventually, but can be deferred until later?
- What kinds of problems or pitfalls could arise from the tools we’re using or choices we’re making?
Experience is important here. Things that you’ve learned from past projects (both successes and failures) can help you stay alert for small details that could have big ramifications down the road.
If you don’t stop to think about these concerns now, you could jeopardize the project’s success in any number of ways. It might be small, such as wasting time on things that aren’t important right now and may never be important. Or it might be big, such as by making choices that make future work difficult or impossible without significant rework.
If you don’t think about these potential issues, you can’t prepare for them.
This is where strategizing comes in. Once you’ve identified a potential concern, what do you do?
One option is to try and solve it right now. Maybe it’s an interesting problem to solve, and by tackling it now, you’ll get the option to create a really elegant code-level abstraction.
There’s also the opposite approach, which is to do nothing.
Perhaps, with a bit of forethought, you can model the code you’re writing in such a way that it’s easy to accommodate later.
Depending on the circumstances, there may be many more options. Without context, it’s hard to say which approach is best.
The better consultants I’ve worked with are able to quickly determine a plan of action. It usually strikes a balance between a small effort now that sets the project up for more success down the road, and a plan for solving any problems you have identified in the event that they do arise.
It’s a difficult skill to learn, but the good news is that it’s definitely a skill that can be learned.
Working at a consultancy is all about providing the most value within our limited time. The “right” decision in any one scenario depends as much on the overall context of your project as it does on your knowledge of writing software.
Being a good consultant requires the ability to constantly zoom out to a larger context that can inform your day-to-day, minute-to-minute decisions. It’s a really challenging thing to master, but it’s also one of the fundamental skills that makes a consultant more effective.