So far in my software engineering career, I’ve worked at a product focused company and at a media company (building internal APIs/tools/etc.). I’m interviewing at a small software company that’s more of a consulting shop / contractor. Teams have several active projects, and it sounds like most contracts last for less than a year, with several multi-year engagements mixed in.
So my question is: What should I be considering before moving into this sort of work? A variety of projects sounds like it could be engaging, but on the other hand, maybe I’ll get bored writing the same boilerplate over and over? It also sounds like consulting has the potential to expose me to a wider variety of technologies and languages, which I see as a plus. But I’m worried that being involved with shorter term projects means I won’t get the chance to gain _deep_ expertise in any one thing, which might hurt my future job prospects?
Any advice would be greatly appreciated.
- Consulting is great for people with good people skills, but it can turn into hell if you haven't them.
- It's very easy for experienced workers in some shops to take advantage of the "new meat", and basically shove you their work. Be on the look for that situation. If it happens run as fast as you can.
- Find out who are the top performers, get as close as you can. Some of them will just be political hacks, but others are fountains of experience, and learning from them will provide you with invaluable insight into their fields.
- Be ready to ship crappy products. Consultancy is about doing things fast and keeping costs down. Nobody expects perfection, although you'll hear business speak like "excellence" repeated constantly. Your bosses know it, your clients know it. If you are the kind of person that has trouble living with that (i.e. perfectionist), you'll be way happier in product orgs.
- Insist on meeting the client. Engineering consultancy is 20% about making the thing, 80% about understanding the clients needs and managing their expectations. All the big failures I've seen in consulting come from having middleman between the guy building and the guy talking to the client. You don't need to be there all the time, but enough to not be playing telephone with others about what the client wants.
- The type of work you do is largely the same across all orgs - unless you're a specialist in some advanced field nobody else can do or you can convince someone in power that you know how to do the occasional cool project
- Both can have long useless meetings. Product orgs' meetings will be crap about how the company is awesome and will make zillions or crap about process-but-not-process-cause-we're-agile; consulting orgs' meetings will be all about having 5 muted engineers on reddit while the client comes up with 3 new requirements per minute
- Product orgs can get by doing way less work, if people lazying around and doing the bare minimum or nothing at all upset you, avoid product focused orgs
- I think you can divide consulting orgs roughly in two groups:
- Doing client work with in-house project management: a nightmare of people trying to squeeze more work out of you until you die
- Giving engineers to organisations: largely like working in a product org
- Consulting orgs have the advantage of rotating clients more often, which means you'll have to deal with horrible people for a shorter amount of time (unless the horrible people are inside your consulting org). In product orgs you'll have to deal with them until they leave for somewhere else
- Consulting on your own is definitely more work & more money but, more importantly, reduces the risk of running into horrible people
First: I think it’s a great idea. Consulting, especially in an agency environment w/ many clients is high energy. Depending on the size of the team you can still wear many hats and touch a lot of different projects. It ends up adding a lot of color to your day to day life.
As far as the monotony of boilerplate: that can be seen as a drag or as an opportunity to develop in house best practices, protocols and tooling to eliminate the drag of all that as well as the room for error/inconsistency.
It’s a lot of fun! I encourage you to jump in feet first. Don’t worry too much about your future career prospects - continue to grow and learn and i’d wager this will make you a better candidate in the future.
My network grew larger than it ever did in agency environments. I built the entire Four Loko website at one point. I have work still running on Farmers.com. I got to provision the first Linux instances inside of a big spooky hedge fund in Century City. It was a great time in my life.
This is a reasonable thing to worry about, but don't overlook the opportunity to gain broad experience across the entire product lifecycle - not just with multiple technologies, but also working with customers, developing requirements and designing products to meet them, ops and maintenance, tier 2/escalation support, and all manner of other aspects of working with software that a lot of engineers in my experience tend to overlook.
You won't come out of it with exhaustive knowledge in one specific stack, sure. But you very well can come out of it a much more well-rounded engineer, and that can easily do more for your ability to contribute - and thus your prospects - than any single deep, narrow specialization ever will.
I started my career in the kind of role you're considering now, only in those days the tech was all Perl 5 and PHP 5. I was good at them then, but have barely so much as touched either language in about a decade at this point. No tech stack is forever; what's been of enduring value has almost entirely been the kind of broad experience I describe. Not all that many engineers in my experience can and will also sit down with clients to help figure out what they actually need, and then prioritize, plan, schedule, and lead the work to build it. Not all that many engineers can and will volunteer to handle customer support escalations, and be able to do so effectively, in order to get insight into where the pain points are and how to solve them. A job like the one you're considering is a great opportunity to learn those things by doing them; I don't know of any better.
Sure, if you ultimately want to take tickets and work tickets somewhere in the bowels of a FAANG, stuff like that probably won't be all that useful. If you want to start your own company, I think a job like this will be of immense value to you. Ultimately, of course it's up to you and what you want to get out of your next role - I hope I've been able to provide a decent sense of what this kind of role can give you.
- "long-term" architecture of projects is non-existent on short contracts (anything less than ~2 years)
- The ownership feeling is very different if you're working directly with a client, or if you work with your own team
- Even if the project sucks, it's nice to know that you won't be on it forever
- Networking as a consultant is great
- Your manager is always planning for the next project, any "down-time" is lost revenu, so expect to spend less than a week when switching between 2 projects
- I found salary negotiations simpler as a consultant, basically I knew what my manager was charging for my day. Remove some % that they're willing to live with. Then, you can do some easy math. This was within a small shop, so I wouldn't know if that would scale to big groups.
Consulting companies tend to optimise for output (delivering on time, code quality, reported bug counts, number of stories, sprint velocity etc.)
A full time product engineer has more skin in the game and freedom to work across the stack while consultants might be restricted to non-prod environments and therefore limited access to infra/devops work and prod support/troubleshooting. YMMV.
There is a huge learning in supporting what you build and not getting that experience can be a limitation in consulting.
However consulting offers you the opportunity to work across domains, tech stacks, work with new people, travel etc every 1-2 years whereas in product companies a commitment of 2-3+ years is desirable.
Finally, it boils down to quality of the group of people you are going to work with. A consulting firm with higher density of talent would be more interesting than a mediocre product team.
As you start looking to get into more mid/senior levels, the consulting work starts to hinder more than help. Typically when we are looking at candidates we want to see long term ownership of a product or project. This can include things like dealing with operational issues, shipping major versions, or leading large architectural changes. Most of these things are quite rare in the consulting case. Typically consultants don't have much ownership over the code or major decisions about the product, and that becomes increasingly limiting for the scope and ambiguity you are able to demonstrate.
This is of course purely anecdotal and not all consulting roles are like this, but it is a trend I have encountered.
I don't know what your long term career goals are or what stage of your career you are in, but in the off chance you may look to return to a product focused org at a higher level you should be aware of the challenges that can come from long stints in consulting.
My user name itself is a result of my experience working in one of those body shops. Client doesn't care, my employer doesn't care. I see people here talking about 1-1s and promotions and so on. I never had a single one in 5+ years. Clients treat us as outsiders. I am not sure if they even see us as humans. Just keep on dumping work, and then suddenly you are kicked out one fine day. Makes you wonder why did you spent 10-15 hours a lot of days for free. No team activities, no trainings, nothing.
My employer has absolutely no interest in my well being either. No promotions, no salary increments most years. Only time my 'manager' talks to me is when they want me to relocate to some other state or client. If I say no, they will threaten me - 'I will snip you' is what my manager told me once. Now I categorize these so called 'managers' as 'slave traders, parasites or demons'.
Wider variety of technologies and languages may sound good initially, but at least from my experience, the work you do for these clients are basically things you can learn on your own. So if that's your only goal, I would say do some personal projects instead.
Every single one of my colleagues have jumped ship within 2 years working in our company. Only idiots like me stayed. My itinerary for today is this: work from 6am-4pm. Then log out. Prepare for interviews. Get a work in good product company.
As for disadvantages there are several. Your main concern is the first one and it is real. You can only spend so much time on a project, and that means you may never get to take it to the depth and maturity that you want. In most cases you're there to start something or fix something. Once it is started the client will take over, and if it is fixed, it's fixed. So if you want to go deep into a subject, I would pick a different path. It can be a bit sad to put your heart into something for a year and then not be able to see it all the way through. The other disadvantage is around the politics of the kind of work. This is a three party system - there are your goals, the goals of your company and it's consulting business, and the goals of the client. Those don't always align and it can be complicated to navigate. You can also find yourself in situations that are uncomfortable - like dropped into a project timeline that you weren't part of estimating. It can be a bit sink or swim in my experience. The most important factor in being successful is communication / stakeholder management and making sure expectations are clear to everyone.
It's given me a lot of experience quickly, but it's a real challenge. It is fast-paced and intense and thus it is not for everyone - but if you're thinking about it it is probably worth doing for a few years to get the experience and see how you like it.
In the agency model, the company's profit margin is everything they don't pass to you. There are too many incentives to overwork and underpay you. The larger the agency, the more this is true (see accenture). But give it a try and if it sucks you can always quit.
I like consulting directly with clients because it does expose you to a lot of different industries and also pays pretty good compared to most startups. Working with other agencies has been a very bad and expensive decision for me in the past.
There are many ways to bring value other than writing code, mostly trying to fix broken processes at your client's and putting out fires that nobody cares about anymore.
In other words, if you care and value deep expertise then consulting may not be the best place for you. It certainly was not for me.
(sorry for the negative take, it certainly depends on the company's culture and how they are positioning themselves on the market)
By that I mean, you need to bring your A-game every day and essentially always be selling to the client (and always billing). There's no room for you being in a rut or having off days consulting and at a client site. Take your sick days rarely. That's great for some people but doesn't work for everyone.
If you find a technology you really like that's popular with clients, it may be that you get to use that with every client and then you can gain deep expertise in that. Don't be too picky here, this is an opportunity to get access to a lot of customers to find out what technology is really in demand. Contract-to-hire is also a valid thing that happens if you find a client with full-time positions open that you really like working for; you may have to negotiate with the consulting org for a finders' fee. Some orgs are not okay with this though, so I would only suggest it if you know it will work, or if you have a backup plan for another job in case it fails.
Extra advice I can give is that the relationships involved when doing consulting is pretty different; in my experience, unless the clients are all big IT firms, you likely won't have strong engineering management guiding any projects, and the client may not even be able to help you out with technical issues at all. It's on your team as technical experts to get in, figure out what is going on, and then get out. There are a number of ways to deal with this but the number one rule is: cover your ass with clients! I've seen lots of projects go south because of bad communication and failure to manage customer expectations.
I started out consulting because I thought it would be a great way to learn a wide variety of things but it turns in order to actually, really, truly learn something, you need to stick around for a long time to see the long-term, second order consequences unfold.
Instead, I've now been in a few smaller product orgs, where I get many of the benefits of consulting (high pace, many hats, good compensation, lots of learning all around, wide array of technologies) except I also get to witness how everything ends up and what the fruits of my labour are.
Something else that I hadn't thought about until now is that in these smaller product orgs I also get the opportunity to build the culture and organisation from scratch – that was rarely something offered to me at the consulting gigs.
[1]: Of course, I shoudn't say never. Maybe once or twice were there opportunities to stick around for a long time, but they were rare in comparison.
So the company is heavily pressured to push your hourly rate down and your billable hours up.
You will not get time to analyse technical details deeply enough before presenting to clients. Focus on code quality is seldom lesser. Be prepared for a lot more talking than a product org. Be prepared for a lot more work and constant pressure of timelines.
- product is long term , while consulting can be short or long term. There is no guarantees there.
- Product teams you have the freedom to chose and experiment, but in consulting you dont. Product has more number of innovations while consulting has very less or in my case negligible.
- Consulting pays you more but product gives you experience, knowledge and sometimes depending on the company pays you more.
- In life and career chose long term when possible and short term only when you are bored and need a quick change.
- Consultancy is all about customers and meetings. you need as some mentioned, lots of people skills. You can develop one , but it takes years of experience
- Personally I am moving back to product now from consultancy. You can always move and collect experience and make money. But always think long term and be obsessed about customer.
I may be wrong here but these are my personal opinions. Please take it with grain of salt
[1] https://www.amazon.com/Secrets-Consulting-Giving-Getting-Suc...
[2] https://www.goodreads.com/book/show/566213.The_Secrets_of_Co...
[1] https://etrading.wordpress.com/2006/05/31/permie-vs-consulta...
1) when times get bad you will be “expensive” and among the first to be let go.
2) you have to be expensive enough to afford bench time in between gigs. When the economy is good I plan for 85% utilization. Covid had me at 50%, until very recently.
3) if there are multiple consultants and or consulting firms be prepared for political games where each firm tries to position themselves to take other spots in the organization. It will range from limited access to information to outright bus throwing. The best way to stop this is highly detailed accounting of how you spend your day and what roadblocks you face. Send this to your supervisor daily via email. It’s worth the 30 minutes and has helped me on numerous occasions.
4) on a similar token don’t be afraid to mention your success. It doesn’t have to be a brag but if you build some take the credit before someone else tries to.
The agency landscape is pretty broad. Some shops are very technical, some are design lead. Some can dump an army of bodies on a project and some deploy lean tiger teams. My experience was doing a lot of strategic engagements. I got to do architecture and real planning and quality control. Sometimes it was fire and forget popup projects. Rarely if ever did we own any support role which was pretty great. Got to flip between web, mobile and even experiential work. Very frequently thrown into stuff with no training which is always exciting/terrifying depending on your personality.
If any of the above is not true go the consulting route with the goal to have your own clients. Its exciting, you pick the people you work with and the work you accept. At the time of this writing there is plenty of software work for consultants who are interested in long term B2B companies. You dont need many. We are a team of 4 and have about 5 large long term client. We are also building a product on the side (and this is the real icing on the cake)
When I made the change I was worried about healthcare. Using the healthcare.gov market place I ended up paying about the same for slightly better (local) insurance.
Talking to friends working for other consulting firms, reveals that some firms focus on a narrow niche of technologies and don't touch anything outside of that. Others seem to take on clients only in a limited range of industries.
Your best bet is to research the company and ask questions in the interview. Only then will you be able to ascertain whether it is a good fit for your career expectations.
One of the things I noticed is that all of the "how to be a good developer" books/blogs/etc felt much more targeted at product orgs - there's a real lack of "advice" for people working at agencies. That being said, maybe I just don't know where to look, and someone in this thread will point me in the right direction.
Even in the best circumstances there is a slight adversarial relationship with the clients, I think that is the source of a lot of problems.
1. You get to walk on 10x the eggshells for the same pay
2. Shorter project ownership time horizon might have been fine with me, except this particular group was so intent on presenting the appearance of utmost competence to the clients that they couldn’t do the necessary course corrections that become apparent maybe 1/3 of the way into any project, once you’ve gained the initial bit of experience particular to that project.
The result was a quality of work that I was not willing to be a part of, so I bailed.
Also find out what people do when they are on the bench (unstaffed). Sometimes you're allowed to work in your own projects on full pay and sometimes there's an internal backlog.
I personally think working for a consulting org is very stressful and they tend to keep all the profits at the top. Better to follow the other advice here and start your own--maybe start with a consulting org, negotiate a less restrictive non compete, build your client list, and start your own.
I have made that change recently and it's hard for me to let go the stupidities and the crappy job we're basically forced to do "because best practices, unit tests, (you name it) is not priority".
Money can be better, tho.
But in general as a consultant your time is the product that the co. is selling. Never forget that.
Change is Good: It is ok for customers to change their mind. Just make sure it gets documented as a change request and the Lead consultant gets the cost approved.
Never use the word No with a customer: You can propose alternative, argue, cajole, etc. But don't say no. No is a word that can be used by the lead consultant - not by the engineering team
I've worked in a couple machine integrator shops (kind of a mix of product and consultancy, basically building products that the OEM can't build themselves) over the past decade. There have been lots of 200-800 hour projects from lots of customers. My takeaway has been that every project that's valuable enough to contract someone to do has at least one really interesting problem to solve. Every project also has some boilerplate to make it work, I don't think anyone gets out of that. Even tenured research professors have to write grant proposals.
> But I’m worried that being involved with shorter term projects means I won’t get the chance to gain _deep_ expertise in any one thing, which might hurt my future job prospects?
Shorter term projects mean that you're gaining adequate expertise to be productive in dozens of things. If asked "We're using the X stack to build a product that does foo, are you capable of working here and helping us?", and you can say "I've used the X stack to build something that does bar, and I did a project that mostly automated foo using stack Y, I'm confident I could do it with stack X", you're clearly ready to hit the ground running. If you can say that you've never used stack X or done foo, but have learned V, W, Y, and Z, and have not done foo but have been successful with similar projects like bar, baz, and qux, well, HR drones and hiring managers aren't always the brightest bunch but they're often capable of a small leap of faith like that. You're in a much better position than someone who's only ever used stack W to build baz, and doesn't know anything else.
Also, it's really hard to gain deep expertise with one thing if you're only building a small number of products. Early architectural decisions often mean that you're stuck with the first thing that worked, while on a ton of short projects you can figure out what does work and what doesn't. For example, as a controls engineer, I've had the opportunity to try at least a dozen ways of representing a machine operation or actuator. I've built systems that are inadequate and had to be extended with cludgy add-ons, that are too rigid and had to be forked into subtly different varieties, that are too flexible and bulky, and finally settled on a representation that really works well. It's kind of like being given the opportunity to do a complete rewrite of the software, except you're not writing quite the same software each time...highly risky at a product org, but at a consulting org you're basically expected to do that.
For consulting, it's key to remember that your experience will be almost completely driven by the specific projects and teams you're on. Two people can go to work for the same consultancy on the same day, wind up on different projects, and have totally different experiences and outcomes. (This is particularly true at larger, more management oriented consultancies that might not be able to put you into technical roles at all. Even though I came in with years of professional engineering experience, I spent my first year at a big five consultancy building UI mocks in Excel, and watching the client's Java team make dubious design choices. After some growing pains, I was able to navigate my way over into a release management role where I was able to have a more positive impact.)
This is also true for one person working over time for the same consultancy. A great experience on a great project can turn into a terrible experience almost literally overnight with the wrong change in staffing. The upside is the opposite - if you can outlast the rough spots, you can usually find a way into a better situation, thanks to the more dynamic staffing model. It's easier to change teams within a consultancy (where it's expected to change) than within a product company (where the company has an incentive to keep you staffed where it knows you perform well and have experience). I have seen people leave product companies because they can't get away from maintaining the thing the built. (Ironically, though, I left my first consultancy job in part because I couldn't get away from a particular project with the political pull of a small black hole.)
For the technical side of the work, it again varies from project to project, but your involvement in a given consultancy project will on average be shorter than your involvement in a given product project. This makes it much harder to implement anything resembling a long term vision - there just isn't enough time. It can also make it hard to understand the full impact of the decisions you were able to make while you were there. If you're staffed for a build out, it's very plausible that you see the system go live, immediately get staffed elsewhere, and wind up with no real direct perspective on how well your design/code operates in production. Conversely, for greenfield build outs, consultants are often very much involved in project startup, so spend a lot of time setting up build/ci/cd processes.
As negative as some of that might sound, I did and continue to highly recommend engineers spend a significant amount of time doing consulting work, even if product work is the long term goal. The biggest positive about consultancy is that it can put you directly in front of customers and directly at the point of trying to solve 'real world' problems with software systems. Learning to develop customer facing skills and understanding what's truly important (and not important) to people in the 'real world' is hugely beneficial. Along those lines, I've been doing product work for the last few years, but there's not a day that goes by where I'm not thinking how I'd react to our product if I was in that other role, as a consultant, trying to use it to solve somebody's business problem on a too-short schedule with a too-small budget.