Seriously, who would not want to be here?
Year: 2025
Contractor vs Employee?
Consultants/Contractors vs Employee – A side by side comparison
Which one? Or both?
A seemingly never-ending and long-standing dilemma for many decision-makers and businesses is whether to use employees or consultants/contractors (hereafter, contractors).
When choosing between contractors and employees, it’s a common perception that contractors are for short-term and employees are for long-term commitments, and contractors are very expensive, but this does not generally hold true as of today.
In either case, one needs to consider real factors like flexibility, cost-effectiveness, and specialized expertise. Contractors offer targeted skills ideal for equally short-term specific projects without long-term commitments, or general long-term commitments and continuity, if properly managed by the provider, while employees has the ability to bring continuity and deeper integration into your organization’s culture. It is all down to what your priorities and goals are.
Shifting preferences.
Also, in today’s world, the sentiment of many highly skilled and professional workers have shifted a lot as of recent years, with them becoming contractors rather than employeers, and being a contractor have become a new common form of employment, offering a greater flexibility as seen to the business side of things, and one that can equally come to become a longer term part of the business with an equal level of commitment, if done right.
The longevity of commitment claim is especially at stake here, as it is today common for employees to change jobs in the range of every two to four years, sometimes more often, negating the long-term engagement claim, and price-wise, there is not much of a realistic difference between the two anymore.
The net result of this, speaks in favor of the contractor, not just purely from the business perspective.
Side by side:
Take a look at these two quick summaries, side-by-side examples on comparable levels:
Contractor/Consultant Contractor: 550/day over 44 weeks. No additional costs of:
Benefits (their selling points)
|
Employee Permanent employee: 75K salary over 44 weeks. Additional costs to consider:
Other types of common costs (benefits) include (estimates per year):
Office space average cost across EU p/a and employee: €7500 (range: 3.9-15k/y) |
Total: 550/day for 44 weeks – €121K | Total Year 1: €121 – €148K (€134.5k) Total Year 2+: €108 – €135k (€121.5k) |
Today, and so far in this comparison, it is pretty much like-for-like, cost-wise, but with added benefits for both parties, but it does not stop there.
The contractor, in greater self-governance, albeit at somewhat greater risks and contractual committments, and for the business, it’s a more well-defined commitment with a known entity and lesser set of risks in cases of non-performance and similar issues.
The hidden costs:
Additionally, there are likely considerable company overheads in HR, Legal, and compliance due to the costs required to maintain employee records, manage disputes management, conduct reviews, provide training, and many other functions. These are commonly not required for contractors, due to their contractual self-governance.
It doesn’t stop there, as for the staff, the business usually has other overheads not covered in the above, such as parking, office space, heating, energy, office supplies and additional factors that needs to be added to the costs of the employee, which for the contractor is mainly or wholly covered by themselves at their own expense. The cost of this has been summarized above as a range, and is based on 15sqm/employee and year, as an average across EU, for both cowork and outright rented spaces.
As for the longevity and company culture, the relatively small cost of including contractors to company events, parties, etc, will be greatly outweighed by the benefits, and still be a tax-deductible, as it is now supplier entertainment. One just needs to be careful about the anti-bribery regulations.
As you can see, after the first year, contractors and employees are on par or cheaper, without the loss of productivity or protection for your business, and in the end, with all things considered, it is a win-win situation for both parties, business and contractor, offering the greater flexibility.
Summary:
If you take all of the hidden business overheads as listed above into account, you will likely soon see that the contractor is actually the cheaper option overall, with the same or greater business benefits.
The primary question now comes down to:
- Are you willing to have consultants and allow them to work remotely?
- Are you willing to trust the people you hired to work for you, to do their job?
If the answer is yes, then, you have just widened your recruitment basis and access to qualified staff.
CICD – passwords and settings to config?
… and keeping them out of the code in GIT?
Let’s say you have a larger config file with a pile of items that you want to fill in while deploying, but don’t want to keep in git, such as settings or credentials?
At the same time, you want to test things while developing, without having to set up credentials etc all the time, copying files in and out, or quickly configure things for deploying / testing against different targets..
This obviously does not take away from the use of live secret management,
such as aws secrets manager and others, but is suitable for more “static” solutions,
or fundamental configurations required for base setups.
For the local shell, add the following to your .bashrc or similar:
alias 1passlogin="eval \$(op signin)"
Pre-requisites;
- 1Password command line CLI agent. ( https://1password.com/downloads/command-line )
- jq (the json parser)
Steps:
- Create a new vault in the 1Password, like “CICD”
- Create the item, and name it as you please, no spaces in the name, like.. “app-config”.
- In the item, say a secure note called ‘general-creds’ , create a field and name it “json”.
- In this json field, store the json as an array of key/value sets, like this:
{ "cred": [ { "key_1": "value 1" }, { "key_2": "value 2" }, .... and so on. } }
- and this shellscript;
#!/usr/bin/env bash ROOT="$(dirname "$(realpath "$0")")" # Check if the required arguments are provided if [ "$#" -ne 2 ]; then echo "Usage: $0 <1pass vault/item> <template_file>" exit 1 fi # Read the JSON file and template file path="$1" template_file="$2" # Get the credentials from the 1Password op read "op://${path}/json" > 1p-credfile.json # Validate that the JSON file exists if [ ! -f "1p-credfile.json" ]; then echo "Error: JSON file '1p-credfile.json' does not exist." exit 1 fi # Validate that the template file exists if [ ! -f "$template_file" ]; then echo "Error: Template file '$template_file' does not exist." exit 1 fi # Read the JSON content and template content from the files json="$(cat "1p-credfile.json")" template="$(cat "$ROOT/$template_file")" # Use jq to traverse the JSON array and replace placeholders result=$(echo "$json" | jq -r --arg template "$template" ' reduce .cred[] as $item ($template; reduce ($item | to_entries[]) as $kv (.; gsub("\\[\\[" + $kv.key + "\\]\\]"; $kv.value)) ) ') # Output the replaced string echo "$result" # Clean up after ourselves. if [ -e 1p-credfile.json ] ; then rm -f 1p-credfile.json ; fi
- .. and a config template file (or other file), like this, inserting the key names in double hard brackets, such as [[keyname]]
{ "configValue1": "[[key_1]]", "configValue2": "[[key_2]]" }
Putting it all to work…
In your Makefile or similar, use the script as:
./MapCreds-onepass.sh “<vault>/<item>” “<source_file>” > “<target_file>”
Example:
./MapCreds-onepass.sh CICD/app-config config-template.json > config.json
and the output – config.json, would become ;
{
"configValue1": "value 1",
"configValue2": "value 2"
}
… just don’t forget to mark the resulting “config.json” as an exluded file in git!
(and obviously, this would work on other text files as well, including source code for replacing values / settings having the source in 1pass.)
Njoy!