As the new year approaches, the time to job hunt seems to be upon us. Whether moving away from a company you are unhappy at, or just looking forward your career after outgrowing your current place. A new year is a great time to have that fresh start you’ve been looking for. However, remember to take your time and pick your move carefully. In aid of this, I have compiled a list of red flags to look out for when on the job hunt

Vague Job spec

During the job hunt process, be wary of being unable to pin down exactly what you will be doing upon starting. An employer can come across great, but they will either omit or gloss over the less glamorous parts of the job. This isn’t completely unexpected behaviour on their part. They know it has been the cause of leavers or driven away potential candidates before, and they want to hire you. You really need to know what language you will be writing, what projects you will be working on, and what the development environment is like; from day one.

The company could be moving from a legacy product written in some old in-house or niche language, to a popular language written from the ground up to follow all the latest best practices. If the job spec is unclear and the interviewer is vague, for all you know you could end up on the legacy project. You won’t even be able to turn around and say “You lied to me”.

The promise of new technology

Lots of places with legacy solutions have plans to modernise. When speaking with your interviewer make sure you ask them how far along they are. You may find they are still, prototyping, exploring options or undecided. In my experience, this means they will be prototyping, investigating and undecided forever. It’s different if you’re being hired to directly influence this and move them along, but mostly I see this used as a lure for developers.

Lack of proper technical test

If you don’t do any form of technical tests for a job, none of the people you work with did either. This makes your colleagues a lottery. They could be as good as you, better, or completely terrible. The more hoops you jump through, the more of a pain it is, but the higher quality the people you will be working with will be. If they do not at least ask to see some code or ask logic questions, treat this as a huge red flag.

Amazing benefits package

This isn’t a red flag, but I would ask why. Is it the industry generally well paid, like financial tech? Is the company a large company that has the financial clout to pay well? Or are the benefits what’s needed to attract new talent, offering “compensation” for the terrible work environment?

Summary

I know the feeling when you are in a Job you dislike, but you don’t want to jump ship to any job you can. Take your time, feel out the opportunities and make sure you make the right decision. The extra few months it will take will feel totally worth it when you’re not looking for a job this time next year.

The software world is the only industry I can think of where so many excuses float around as to why something was not done. Anyone reading this probably knows the kind of thing I am talking about. Probably experiencing it yourselves at some time or another.

“We don’t have time” This is probably the most popular excuse used in the industry. You would have heard, or will hear, this reasoning given for a multitude of things. Sometimes it can be valid, but often it just means you’re going to cut corners and produce something sub-par to what you know you can do.

This comes up regularly when developing a new feature. When for whatever reason, deadlines are tight. Even though you may not be happy about the deadline, you’re a good employee so you will do your best to make it happen. To do so though, you will inevitably cut corners. Unit tests? forget them. Those nice to have features? Nope MVP only. Smooth UI? Something basic will do. Code standards? We’ll sort that later.

See where you are now? You have just released a poorly tested, incomplete, ugly, un-futureproof feature… That you will be bug fixing forever and will probably be rewritten again down the line. Well done. What should you have done? Worked a load of unpaid overtime to get it right? Hell no. The answer is to say push back and say no.

This can be awkward I know, especially for people starting their careers. But it is by far the best thing you can do in that situation. You do not want the black mark against you as “The person who wrote that buggy feature”. Hold yourself to a higher standard, even if you’re being told directly to cut a particular corner. Once they make you do it once, it will become expected. Push back, communicate, and reach a solution. Rome wasn’t built in a day, and neither is software.

This may mean they offer you over time, and explain why the deadline is so tight. Possibly they’ll have to go back to the reason the deadline is so tight and find a new solution. They may even hand it to someone who will just do it (If that is the case, I’d start wondering if that is really the place you want to work). Many places take the easiest option of working the developers harder and need to be taught that it cannot work like that for a software company to be successful. It’s a lazy solution and is usually money driven; a payday for the company and a migraine for you.

As another example let’s take JavaScript frameworks (or any other technologies new to your company). Plenty of businesses that have taken the plunge with them will come back wishing they did it sooner. After the teething period, they rave about how much time it saves them now and how quick and easy it is to develop with. But other companies see that teething period and run for the hills.

Where there is an undeniable benefit down the line, out-weighing the initial investment times over, but you can’t invest your time because the opportunity cost is too high. So you must ask, why? In my experience, it is an indication of a poorly run, short-sighted, company. Usually unable to see beyond the dollar signs in their eyes.

What I am trying to say is, keep an eye out for this behaviour. We as a community need to squash companies doing this to their development teams. I hear about and have worked in so many development teams that are constantly driven at full tilt. Used as the answer to any problem. It is a huge red flag, in my opinion, of an employer you should consider parting ways with.

I would love to hear thoughts on this, as I know it can be a contentious topic.

As I mentioned in a previous post, professionalism in software development means a lot of self-improvement and some time out of work to learn new things. Sometimes an employer will give you a few hours a week, or perhaps a day a month, to be used for learning. Which is great and is a sign of a good employer. These opportunities in work hours provide ample time to learn new things, as the time investment isn’t as steep as people think.

To start, a good measure is providing you with an information flow of the things you want to keep up-to-date with. Finding these springs of information can be a pain, however. Distinguishing from a mindless spam can be tricky. You need to find the nice middle ground between information bombardment and drought, based on how much time you spend browsing the web normally.

Try to weave them into your usual web browsing. Whichever your social media of choice is, use that. It will automatically build into your daily routine. If you’re on Reddit, subscribe to subreddits and make sure they appear on your front page. It’s all about making the transition from looking at dog gifs and cat pictures, to looking at dog gifs cat pictures as well something productive.

Integrating these information feeds into your current feeds is just a start though. The best way to keep on top in the industry is to do greenfield projects. Something new and fresh, which isn’t constrained by legacy patterns or technologies. However, as you probably know, they can be hard to come by, particularly if you’re starting out in your career. You need to create your own opportunities through home projects. Outside the work environment, all projects are greenfield, with the added benefit of no deadline and no expectations.

Choose something that interests you and just start coding. If you’re aiming to design a new feature, just start writing and see if you can make it work (You can tidy it up later). If you want to learn a new design pattern, start small and build a small and simple program that gives you the feel for it.

If you’ve had that idea for a potential SaaS solution, just go make it. Use a new technology, use a new design pattern, and even use a new language. Build up your arsenal of tools to use in your day to day work. It doesn’t have to be the next multi-million dollar product to make the effort worth it. The experience gained will set you apart, making you first in line for future opportunities.

Remember. Time spent thinking about doing something is the time you could have spent doing it. This isn’t to say don’t plan what you want to do. It means you don’t need a detailed plan before you start. Questions like “What if I want to monetise it?”, “What if AWS pricing shoots up?”, “How could I market my SaaS idea?” are all secondary. You can cross the bridges when you get to them (and I hope you do). Use them as learning opportunities. Start simple, and build from there. (“I am going to make an exercise routine app using Xamarin” or “I’m going to make a simple website using the MEAN stack”, even “I’m going to keep up to date with the latest c# news”)

When I start a new project I like to swap out only one of the layers for something I haven’t tried before (SQL to NoSQL, Razor to Angular/React, Repo pattern to Clean). Keep it simple and don’t bite off more than you can chew. Starting out I just made sure I stuck to SOLID principles, which in itself gave me the largest gain for understanding what makes a good and bad codebase. To summarise, get started and see where it leads.

The 3 main web services today offer an array of free stuff to entice you into using them, hoping that once you’re with them you won’t leave. This is split into 2 tiers, the free forever tier and the free for 12 months tier. Below is a table comparing what each offers on each tier. (Note Google does not offer any specific products for free over a 12 month period, but will instead give you $300 towards whatever product you fancy for that 12 months.)

In the tables below I have grouped similar offerings into categories that make sense to me. Similar products are on the same row, as close as I can get to comparing apples to apples.

Always Free

Storage

AWS

Limit

Azure

Limit

GCP

Limit

Object Archive

Glacier

10GB

Cloud Storage

Storage Gateway

100GB

Warehouse

BigQuery

1TB Queries per Month, 10GB Storage

Database

AWS

Limit

Azure

Limit

GCP

Limit

Migration

AWS Database Migration Service

750 Hours (limited by instance size)

NoSQL Database

Cloud Datastore

1GB

Object

DynamoDB

25GB

SQL

Cloud Storage

5gb-months per month

Compute and Containers

AWS

Limit

Azure

Limit

GCP

Limit

Funtions

Lambda

1 Million requests per month

Functions

1 Million

Cloud functions

2 Million

PaaS

App Service

10 apps

App Engine

28 Instance hours per day & 5GB cloud storage

VMs

Compute Engine

micro instance & 30GB-months

Container Orchestration

Container Service

Free

Container Engine

5 nodes or fewer

Container Builder

Container Builder

120 build minutes per day

Security and Identity

AWS

Limit

Azure

Limit

GCP

Limit

Mobile User Identity

Cognito

50000 MAU’s per month

Data Protection

Macie

1GB

Security Center

Free

Encyption

KMS

20,000 requests per month

Identity

Active Directory

500,000 Objects

B2c Identity

Active Directory B2c

50,000

Dev Tools

AWS

Limit

Azure

Limit

GCP

Limit

Communications

Chime (Basic)

unlimited

Code builder

CodeBuild

100 Build Minutes

Source Control

CodeCommit

5 active users per month

Visual Studio Team Services

5 Users

Source Repositories

1GB private hosting

Continuous delivery

CodePipeline

1 pipeline per month

Testing

Device Farm (Mobile devices)

250 device minutes

DevTest Labs

Free

Debug

X-Ray

100,000 traces per month

Quick Start

Cloud Launcher

1 micro instance, 30GB-months HDD

in browser CLI

Cloud Shell

5GB persistent disk

Virtual Networks

Virtual Network

50 virtual networks Inbound data transfer only

Monitoring, Management and Analytics

AWS

Limit

Azure

Limit

GCP

Limit

Monitoring

CloudWatch

10 custom metrics, 10 alarms

Application Insights

Unlimited nodes

StackDriver (also works for AWS)

50GB 7 day retention

Environment Monitoring

Log Analytics

500MB per day

Usage Analytics

Mobile Analytics

100 Million events per month

ETL

Glue

1 Million objects stored in catalog

Data Factory

5 activities at low frequency

Application Services

AWS

Limit

Azure

Limit

GCP

Limit

Email

SES

62000 per month

push notification

SNS (Mobile)

1 Million

Notification Hubs

1 Million

Queue Store

SQS

1 Million

Workflow

SWS

10,000 tasks

Batch

Free

Service Workflow

Step Functions

4000 state transitions

Service Fabric

Free

Automation

Automation

500 minutes of job time run

Meta Data

Data Catalog

unlimited

Image analysis

Face API

30,000 Transactions per month

Vision API

1000 units per month

Speech to Text

Bing Speech API

5000 transactions per month

Speech API

60 Minutes per month

Text Analysis

Translator Text API

2 Million characters

Natural Language API

5000 Units per month

Pub Sub

Cloud Pub/Sub

10GB messages per month

Machine Learning

Machine Learning Studio

100 modules per experiment

Load Balancer

Load Balancer

Free

Search

Search

10,000 Documents

IoT

Microsoft IoT hub

8000 messages per day

Free for 12 Months

Storage

AWS

Limit

Azure

Limit

GCP

Limit

File Storage

EFS

5GB of storage

File Storage

5GB

Storage

Elastic block Storage

30GB

Disk Storage

2x 64GB

Cache

Elasticache

750 hours

Object Store

S3

5GB

Blob Storage

5GB

Database

AWS

Limit

Azure

Limit

GCP

Limit

SQL

RDS

750 hours per month

SQL Database

250GB

Object

CosmoDB

Compute and Containers

AWS

Limit

Azure

Limit

GCP

Limit

VMs

EC2

750 Hours per month

Windows VM and Linux VM

750 Hours

Container Engine

Container Orchestration

EC2 Container Registry

500MB storage per month

Games

GameLift

125 hours per month & 50GB storage

Security and Identity

AWS

Limit

Azure

Limit

GCP

Limit

Dev Tools

AWS

Limit

Azure

Limit

GCP

Limit

IoT

Greengrass

3 devices

Workflow Automation

OpsWorks

10 nodes per month

Advise

Trusted Advisor

4 checks

Monitoring, Management and Analytics

AWS

Limit

Azure

Limit

GCP

Limit

Data manipulation

Data Pipeline

3 low frequency preconditions

Application Services

AWS

Limit

Azure

Limit

GCP

Limit

API

API Gateway

1 Million calls per month

Directory

Cloud Directory

1GB storage per month

Content Delivery

Cloud Front

50GB of storage

Customer Services

Connect

90 minutes per month

Transcoder

Elastic Transcoder

20 minutes of audio transcoding

AI Chat

Lex

10,000 text requests per month

Push notifications

Pinpoint (mobile)

5,000 targetted users per month

Text to Speech

Polly

5 Milion characters per month

AI Image

Rekognition

5000 images per month

Load Balancer

Elastic Load Balancing

750 Hours per month

IoT

AWS IoT

250,000 MSg per month

Which provider you go for really depends on what you want to use. Without a doubt, AWS and Azure offer the widest variety having over 100 products each to meet any requirement you could possibly think of. But how many of those products would you actually use? And will use of vendor-specific products come back to bite you after you graduate from the free tier?

Over the first year, for any provider, you will be able to host a small website with a small database of some kind and manage the traffic. You can even use some of the really cool tools and features, but I’d be careful considering the cost of these may not be worth it once the free 12 months runs out.

Whereas Google offers the most in terms of compute, alongside some nice AI products, they lack in terms of tools. AWS and Azure offer a lot of services and dev tools, which do make life easier, being able to easily set up deployment, monitoring and analysis within their environments are great, but their compute is only free for the 12 month period.

Moving from one provider to another gets harder and harder the more entangled in their ecosystem you become. The payoff you get for this is being the productivity boost and cross-compatibility of the services, so you have to calculate if it is worth it for your own particular case. The competition between the 3 providers should prevent any monopoly taking advantage of users, but it is worth considering how flexible you want to be. You may want to set yourself up on GCP as they have free forever compute, but move over to AWS to scale up as you want to make use of the free 62,000 emails or over to Azure to use the free load balancer.

Going into this, I anticipated AWS and Azure to be a close competition, with AWS just winning out. I expected GCP coming in a distant last, as their platform offers less than the others. However, all the main services you could want from a web service provider are there, and it is a fair closer competitor than I gave it credit for.

In terms of my own needs for my personal projects, I think Google will serve me perfectly on the free forever tier, as they are the only provider to offer a free compute tier forever. Their approach to the “free for 12 months” is also something I can really get onboard with. The $300 provides a lot of flexibility being used to bolster your compute and scale up, or on any of their other products. That being said, a move over to AWS or Azure isn’t completely out of the question if I need to scale up and make use of other products. (Also another 12 months free)

Many career paths involve continual self-improvement. Through learning and keeping up to date with the latest trends and discoveries, people in these professions stay at the top of their field, and sometimes just stay employed. Anyone in the medical profession or teaching profession (and I’m sure there are many others) have to modernise and re-equip themselves as time passes. You wouldn’t trust a doctor who hasn’t learnt anything since graduating 30 years ago, and you’d rather not have a teacher for your children who still teaches as if it’s the 90s. So why would someone hire a developer who’s knowledge is outdated?

This is a fast-moving industry, and yet there are plenty of developers out there who are content to never better themselves. This is more noticeable, in my opinion, for web-based technologies, particularly in the JavaScript world. However, this applies across nearly all platforms and languages.

You should be as qualified for your position now, as you were when you got the job. Familiarise yourself with what the industry is asking of new hires at your level, and make sure you know it. This isn’t as time-consuming as people think and can be achieved with just a couple of hours a week.

I understand that anyone reading this will fall into the camp of what I call professionalism, so congrats to you. People who don’t bother following the latest trends in their profession won’t be bothering to read blogs. So it’s up to you to either try and point them in the right direction, or just to leave them in the dust as you start implementing better technologies and design patterns.

To those already doing the work, keep it up. For those starting off in their careers, it’s best to start now. You may not be in a position now where it pays off, but you will soon rise above others. As technologies move, and you along with it, you will find yourself outpacing and outperforming your colleagues. This is a very competitive industry, where the best will get the fun projects I.e. greenfield of large features. The developers whose knowledge is legacy will be left supporting legacy solutions.

Since starting my career in software years ago, I have learnt so much more than could ever be taught in school. From picking up things from colleagues to learning things myself from blogs and search terms like “Best way to do X”. It’s amazing how fast you can distinguish yourself from others, even if you’re trying to drag them along with you.

I’ll be covering ways to do this and sources I use for my job (Full-stack specialising in C#) in later posts