Anyone who tried hiring engineers knows that it can be tough to find the developers who have the necessary skills and experience for the job nowadays. Quite often you’ll find that you just can’t hire one who suits your needs – especially when you’re looking for experts of a certain field. Either because all the ones you’d like to hire are already taken, or you cannot provide full-time employment for them. It’s also possible that the field is so new to everyone in your company that you just cannot do proper technical screening.
Luckily there are professional services companies who provide just the thing you need. But if you’ve never outsourced any development work, you might be led to believe that you just hire a company and your problems will be magically solved. This is of course, not true true. Moreover, if you want to take the most out of this kind of collaboration, you’ll need to put quite some work into it yourself as well.
In this post, we’ll take a look at how you should prepare for working with professional services companies, how you should drive the co-operation and what kind of services you can expect.
Table of contents:
- Professional Services Offers in the IT Sector
- How to Prepare for Working with Professional Services Companies?
- What You’ll Need to do to Work With Contractors Successfully
- An Adequately Specified Task Should Look Something Like This
- Who is Going to Maintain the Product?
- More Tips for Better Cooperation
- If It’s So Much Work, What Can I Gain?
What Does the Term Professional Services Means?
Professional services are occupations in the tertiary sector of the economy requiring special training in the arts or sciences. Some professional services require holding professional licenses such as architects, accountants, engineers, doctors and lawyers. Other professional services involve providing specialist business support to businesses of all sizes and in all sectors; this can include tax advice, supporting a company with accounting, IT services or providing management advice.
So basically a professional services provider is someone who makes a living by having a skill most others lack. In our case, it means that a professional services company has more experience and more profound knowledge in a field than you currently do.
Now that we know what professional services companies actually deal with, let’s see what kind of services they usually provide in the IT sector.
Professional Services Offers in the IT Sector
The classic deal most people are probably most familiar with. You need something to be built, but you lack the necessary resources at the moment, or you don’t want to hire the person for the task as you only need extra workforce for a limited period. Outsourcing development is also a solution when you know that you’re not able to hire the proper people for the job as no-one in the company knows the technology/domain well enough to handle the technical screening.
As the name suggests, the professional service provider works alongside your engineers to reach the goals you set. The depth of the service depends on the specific agreement, but it often includes reviewing the code your engineers write, and educating them to use best practices. If you find that you need to educate your people while developing features, hiring a professional services company for co-development might be the best way to go forward.
Many call professional services firms “consulting companies”. Even though there are companies that only provide consultation, many provide more than that. Consulting can mean several things:
- Consulting sessions, where you can ask questions from the consultant, and they’ll answer it based on their expertise and experience with other projects.
- Code reviews, where you provide access to your codebase, the consultant reviews it and provides insight on how to improve it.
- Architecture reviews can be similar. The emphasis here is on the organization of the system as a whole, the components it comprises and the way they interact. In case of a Microservices are not a tool, rather a way of thinking when building software applications. Let's begin the explanation with the opposite: if you develop a single, self-contained application and keep improving it as a whole, it's usually called a monolith. Over time, it's more and more difficult to maintain and update it without breaking anything, so the development cycle may... architecture, these components are the actual services and the way of interaction is remote procedure calls over messaging queues or HTTP.
- Infrastrcture review is just as broad as the term infrastructure is. It can mean reviewing the way you set up and use auxiliary technologies, such as databases or messaging queues. It can also mean reviewing your cloud provider setup to make it more efficient and cost-effective. The service may also include security analysis or disaster recovery checks.
- … review, by now you probably guessed it: if it exists, you can find someone to review it, from UX through project management to team setup.
As professional services companies make a living by being more experienced and/or educated in a certain field than others, they often provide education as well. It can be just a short, couple of day-long training session,
or a longer one, where you get a couple of hours of training over the course of several weeks.
Outsourced technical screening:
Technical screening becomes essential when you need one or more people as full-time employees, but you lack the knowledge at the time to decide whether a candidate has the necessary skillset for the position. In these cases, you can hire a professional services company to assess the candidates and filter the ones who won’t be able to serve the needs of the position.
Different companies may provide various services, but as you can see, there is probably someone out there who specializes in the thing you need.
Now that we established what kind of services you can expect let’s take a look at how you can get the most out of them.
How to Prepare for Working with Professional Services Companies?
You might be led to think that by outsourcing the development of a feature, you can offload all the work from yourself and just need to wait until the product is ready.
Though a lot of professional services firms advertise that they work this way, that’s probably not what you want. Just as development doesn’t work inside a company the way that management tells developers what they want and then wait for the results, this cannot work either when you outsource tasks to a contractor.
Actually, when you outsource any kind of work, you should treat your contractors as if you hired a new employee.
They will need to be onboarded to learn the business domain you deal with, so they can efficiently deliver the features you need. While working together, you’ll need to provide additional information and of course they’ll run into questions that are not technology, but business related. You’ll need to make those decisions on the spot, so your outsourced team can go on.
Basically the same applies when you hire consultants. They will need to have a basic idea about the business you drive, as some solutions and workarounds might be business related. The consultant will have a lot of questions to properly assess what could be improved and what cannot be done in any better way at the time.
What You’ll Need to do to Work With Contractors Successfully:
Have a solid plan on what needs to be done!
You probably think this goes without saying, but it is definitely worth mentioning. Get a list ready with a detailed list of the problems you’re facing and the goals you want to achieve even before starting to look for a company to help you. “Create an app that does that”, or “Do me DevOps” are not detailed explanations of what you need.
On the other hand, Don’t overspecify!
You probably have a set of technologies you want your contractors to use, but keep in mind that you are hiring a team who knows what they’re doing. Having a too rigid specification may make it difficult to be agile and solve problems as they arise. It is better to set the goals you want to achieve, and the constraints alongside you want to get them done. Make the goals as clear as possible, but leave room for creativity, as during the implementation phase, more problems will arise than you can conceive beforehand.
An Adequately Specified Task Should Look Something Like This:
Implement shop API and front-end with the following features:
- Product listing
- Use react.js, with a state management library of your preference
- Deployment target: AWS EKS
- Image storage for products: AWS S3
So in a nutshell: only specify aspects that you have to.
Make sure you properly declare the ownership of the product. By ownership what I mean is you need to have clear answer for the following question:
Who is Going to Maintain the Product?
If you want to hire a professional services company to maintain your product (or at least a part of it), you should let them make technology choices of their own, so they can work as efficient as possible. On the other hand, when it is your team who’s going to maintain the product after the implementation contract, make sure to give your professional services agency a set of expectations about the stack upfront.
Of course, if you use Java SpringBoot and Angular.js you want the contractor to use them as well. However, you probably shouldn’t specify each and every endpoint that will be created ahead of time. The only exception is when you have clients that already expect an interface to work certain way.
In case you are outsourcing front-end work, make sure to be available for UX research and find the time to review wireframes and mockups if you haven’t done that previously. However, as UX specialists need to work closely with developers, it might be best to leave it to the outsourcing company.
More Tips for Better Cooperation:
Have only one dedicated contact person: As I mentioned earlier, everyone runs into problems that are not technology, but business related. It is wise to have someone who can be a bridge between the outsourced team and the company’s decision makers.
Be agile: Instead of overspecifying the tasks ahead of time, make sure to keep close contact with your contractors and treat them as internal teams. Have daily standup meetings, weekly or bi-weekly sprints, and have a channel for live communication open during the day. Create cards during sprint plannings and prioritize them, so in case you are temporarily unavailable, the contractor can continue with another task, until the question at hand is resolved.
Be prepared for delays: Just because you write up a statement of work and set goals for a given timeline, it does not mean that unforeseen blockers cannot arise. That’s why it is crucial to be agile when it comes to deadlines and instead of looking for someone to blame, try to find a solution — e.g. drop some of the features you originally wanted to include in the next release. It is a lot better to be prepared for problems than blaming it on the external team straight away. Of course, if the company you hired cannot keep up with your requirements, even though you’ve enabled them to in all necessary ways, you probably need to look for a replacement. Working this way is apparently only possible if the external team is completely honest, and if you continuously keep up the communication.
Setup: By the time the contract enters force, and work should get started, make sure you have set up communication channels and all the necessary accesses for the contractor. If you outsource your DevOps, make sure the external team has the necessary privileges to handle the job. If you don’t provide access to the cloud products they need to deal with, they won’t be able to provide the service you require. If they have to constantly struggle to get the proper access rights, you’re burning your money for nothing: the contractor spends time with asking for what should be already available for them, and your people spend valuable time arguing. This seems like a trivial advice, but in the past 4 years we’ve seen that it’s not at all straightforward process.
Dedicate workforce: Make sure that as your contractor starts contributing to your project, there is someone within your company who can deal with their blockers. Having contact person within the company can always speed things up when it comes to dealing with blockers. Also, make sure that the person who you’ve chosen, has dedicated time to work with the contractors.
Have one dedicated channel of communication: Different departments of your company may use different apps for communication. However, as probably more than one department will be involved in the outsourcing work, make sure to decide on one messaging service to use for inter-company communication.
Trust the outsourcing company, or don’t hire them at all: It is fine not to trust external teams, but don’t hire a company you’re not fully ready to work with. A good approach is to find some side project first that needs resources you lack at the time, but is not crucial. This way, you can assess the skills of your contractor and you can build trust towards them. Without full dedication from you and your employees, outsourcing will bring more problems than it solves. If you hire a consultant to check your architecture or infrastructure, but you deal with personal data you cannot share, make sure to create an anonymized clone of your data, so the consultant can see the structure and consistency of the data you store, so they can give you better advice. Same goes for outsourced teams: even if you cannot share your production environment with them, make sure to create an environment that matches the live one as closely as possible.
Onboard your contractors as if they were your employees: Setting up accesses and channels of communication is necessary, but it is also necessary to onboard contractors so they know the business domain you deal with and also know the infrastructure you already have in place.
Prepare documentation: Everybody knows they should have some, but unfortunately it is often overlooked because delivering features is a lot more important than documenting them. If you plan to work with contractors, however, it can help a great deal to spend some time creating the missing docs and charts that describe your system and sharing them with the outsourcing team, as this way you can reduce the time they bug you with questions regarding your architecture. You’ll see that going through this process will be helpful for you too.
Be prepared for asynchronous communication: Chances are, the best available professional services company you can hire is based overseas, and lacks any willingness to send one of their engineers to work with you onsite for an extended period of time. If you are based on the US West Coast and the contractor’s office is located in Europe, you’ll start working when regular working hours end there. Of course, some flexibility should be expected from the outsourcing company’s side as well, but in these cases you should be prepared that blockers will last at least two days: they arise during their day, you can reply in your morning, and they can get back on track when they start working again the next day. One way to resolve this is to ask the external team if they’re willing to shift their working hours a bit, so you can have at least one or two hours of overlap. This way you can at least avoid blockers that take days to resolve, just because some email roundtrips are necessary. In this case, it is best to have strict standups early in your morning when you can discuss these issues. You also have to plan ahead a lot, and prepare multiple stories or tasks, so time can be spent efficiently while waiting for the blocker to be resolved. This also prepares you for the time when your company grows so big that you need to open overseas offices and coordinate work around the globe.
If It’s So Much Work, What Can I Gain?
As you can see, professional services companies cannot be used to offload all the work from your side. They come in handy when:
- You don’t have experience with the technology you’re decided to use and
- you need someone to get you started, by creating parts of the system in addition to supervising and mentoring your engineers
- or you’ve already created the system, but you would prefer a second hand opinion before you go live with it.
- You don’t have enough experienced developers to carry out a crucial task and you need an external team so you can go forward faster.
In all these cases, if you want to get the most out of the co-operation you need to treat the external team or consultant as if they were new recruits to your team. If you take a look at the lack of experienced developers on the labour market, you might see that to keep up with the pace of the competition you need to find help from outside.
It might seem counterintuitive for an employer to invest effort in a person or team who will not stay on the long term. However, you can use these opportunities to elevate your team to the next level in their skills and expertises by learning the most from the contractors. After all, good professional services companies have worked on lots of products and gained experience in several fields and technologies, so by working with them, your people can focus on creating the best product they can.
All in all, there are times when the best way to go forward is to hire a professional services team, and if you know how to be prepared and what to expect these companies can give you the boost that you so desperately need.