Outsourcing companies and agencies
As an employer
This is a type of engagement where you or even a whole team of people work to produce something of value for an external company. Client made an arrangement with your employer for a specified time frame or for a specified project. Each client has different needs and different goals to achieve.
Roles and type of work
You could be assigned to any development role and your team can be responsible for myriad of things, from bringing the whole product to life from scratch or to improve some feature. Your company might take care only of software engineering part or it can combine multiple people or teams to fully support the product development. You can end up working with a whole range of different projects across different kinds of industries. This can be great when you are just starting out because you can experience projects from multiple aspects and develop better understanding of your role and scenarios in which you're able to thrive and grow the most. Working with clients across a range of industries will give you a more rounded experience as the beginner, which can also look good on your CV. Depending on the agreement between your employer and the client you might have strict deadlines and goals to meet. It's unlikely that you'll have much say in any kind of strategical decisions regarding the product development. The hours can be longer in agencies, based purely on matching the client's timezones and having emergency calls from time to time about project stuff you can't 100% control since part of the work is done outside of your company and away from your team. If the agency focuses on one particular aspect of project development or technology you might have many people that are doing the same job as you do and that are able to help when you get stuck. But, this depends greatly on what's the target market/audience and focus of your agency. Projects usually have quicker turnarounds at agencies and it's a bit more exciting to jump to a completely new project or client, or maybe even start to work within a different team. You could become responsible for working and communicating even with multiple clients, at moments in the same time.
Why to join an agency?
Why have a company as a middle man you might ask. It's because they take care of all the overhead regarding obligations to the state, they take on the risk of client not being able to pay or bailing out and having you on a permanent salary. Another overhead is communication and planning with multiple project stakeholders. Some agencies solve it by employing their own project and product managers, that handle communication between clients and their development team. This can alleviate developers from taking care of non development work. Agencies often juggle with multiple clients and contracts on a table to make sure there is no downtime between projects. They often also provide you with a working environment and equipment you need to work. Place of work can theoretically be form anywhere, but I think that most employers prefer to have everyone onsite for a bit faster communication and sync between teammates, client and your management, knowledge sharing(especially if they have their proven ways of doing things) etc. If you like changes and adapt fast, agency work might be for you. You’ll develop a range of skills, gain a variety of insights and build up an interesting and diverse portfolio.
Why not to join an agency?
It can be more stressful and sometimes you'll feel the pressure coming from the clients. There are deadlines and clients that depend on you getting the product or feature out in time and in a good shape. Not everything always goes according to a plan so sometimes you might receive a direct criticism from clients that are in contact with you. Or they might ask and force a last minute changes or updates which were not mentioned in initial planning or weren't signed of by the product development lead.
If you compete with other employees for a bonus or recognition/advancement in the company, especially if there are many people that do the same type of job, this can get quite competitive. That kind of environment is not for everyone, but it's also present at the big and well-known product companies.
Jack of all trades, master of none. As it was already mentioned, you might work on a variety of projects in many different industries. This means you'll know a little about everything, but sometimes you won't be able to specialise and focus on a specific sector/technology/industry or technology. You might never get to know or be immersed in one industry in a whole lot of depth. Sometimes and for someone this can be seen as a good thing. It also depends on what you plan to do in your life long-term.
Sometimes you won't like the project or the client but you won't be able to choose another one. This is part of every job, but more so of a job at the agency. When you apply for an in-house team you often know in advance the projects and products you'll be working on in foreseeable future. Your clients will ultimately, be your boss. You can advise them on something but they are the ones making a final decision. There is no such pride and happiness as with in-house project when they are finished because you are not so connected to the product. You are just handing over all of your work to some external company to profit from.
Who you'll work with?
This option often means you'll be in a contact with people from outside of your company. Either to discuss and plan work that needs to be done, or to communicate with you client's team and split up the work, ask them for help, support or guidance. You and/or your team might constantly work for a single larger client, building his products, or jump between multiple clients and projects as you finish with development.
Technology wise, it really depends if you often switch between clients and projects, what type of projects you get assigned and similar. Also your mother company might specialise in a certain set of technologies only, or focus on a specific industry/problem. But, from the other side, some clients don't care about technology choices at all, as long as the project ends up being reliable, maintainable and not over the price limit. That might lead you to a position where you get to pick and learn new technology stack per engagement basis.
- company taking care of you, offloaded administrative, bureaucratic and project management work
- getting to know and work with many different clients and experience different industries and teams
- variety of products and ideas, if you get bored quickly this might be a plus for you
- variety of technologies — depending on projects and clients your work with
- usually having less say in how something should be built from the product development perspective
- constant communication and work with people external to your company(more so than with in-house product development)
- adjusting to new working environments and teams for every other project(might also be PRO for some people)
Choose an agency if you are good at time management and want to switch projects often. You might be working with multiple clients at once, and you will need to on top of them in different capacities, depending on your job. You’ve got to be able to juggle the demands of your clients. Agency work often proves as the best first option for a job because it enables you to quickly go over multiple products/industries/clients and people you work with. That way it can quickly bring you up to speed and train you for your future software development work.