Warning signs when on the job hunt

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.

 

Advertisements

The most bull excuse in the industry

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.

Getting ahead of the game

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.

My Sources of information (As a primarily dot net developer)
Twitter:
CSharpStack
FrontendDaily
aspnet
Podcasts:
dotnetrocks

Web Service Free Tier Smackdown

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)

Professionalism in Software Development

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