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
Advertisements

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