I've had a few instances where people have asked as to what I do and what my role means, and writing a post just for that one thing will short and useless so we're going to go around a few things that are common among the dev / engineers and I'll try to explain them for you in the simplest language that I can.
I'll give you an overview of what I do and I'll get to the remaining details.
As of writing this post I'm a Principal Developer at a startup called Fountane, I take care of deciding architechture, tech stack (No we don't have the same stack for every project), toolchains and process pipelines, automations, CI/CD that are then used by the devs to write/build apps based on the client requirements.
Software and Software Engineers
Now these are really common terms and most people understand the gist, I won't really go into the depth of everything that a software engineer does.
Software : Packaged set of digital instructions that run on various platforms
a.k.a , it's just an App, the platforms might vary from desktop(PC, Mac), embedded (Chipsets, Microwave, fridge, etc), mobile (Android, iOS) so on. I say
packaged since it is a combination of a lot of instructions that are given to the underlying platform and sometimes on a layer that's talking to the underlying platform.
Software Engineers : These are the amazing humans that take the responsibility of writing these instructions and often also work on ways to find optimal ways to make those set of instructions make the best use of the hardware.
Software Engineers can be divided into a lot of roles based on a lot of variables, the most common one that you can find almost always is the classification based on the platform the engineer works for.
So examples would be
- Embedded Systems Software Engineer
- iOS Developer
- Android Developer
- Web Developer
- IOT Developer (Sometimes, comes in Embedded development)
After this, there's another variable that makes these role a little more specific, where people start adding details of what they really want. A general start or add-on to the above would be the language that the person works with.
For Example the iOS Developer and Android Developer can be split into
- iOS Swift Developer
- iOS ObjectiveC Developer
- Android Java Devloper
- Android Kotlin Developer
A lot of times the same person might have both languages in his/her skillset but these are specified by the hiring company when the codebase already exists and they are looking for a language specific role, the actual engineer on the other hand might just mention "iOS Developer" in his resume/profile.
As I pointed out language in the previous point. I'll explain what languages are.
These are basically how the instructions are written for the software to be created.
Developers specialise in these languages and take pride in it. Technical term for this is
Going further we can classify some of these into even smaller parts where we start adding which side of the work do they do, a general classification would be whether the developer works on "Business Logic" or BLOC , or on User Interface or UI.
A BLOC developer works on Server Sided Code, Shared Logical code between various systems and similar things. These are the guys who work and use the algorithms a lot, also called the backend/back-office developer
A UI Developer is works on making sure what the user sees is functional and in certain cases uses the shared code developed by the BLOC Dev into the interface to make sure the app follows the requirement generally called the UI Developer or in certain cases Frontend Developer.
In a very ideal case these 2 should be enough to handle or get an App out in the market (this can vary a lot based on a lot of things)
Oh, and examples of these will be of the fashion
Platform - BLOC(Backend/Back-office) | UI(Frontend) - Framework / Language
Web Developer - Backend - Express / Node
Web Developer - Backend - Buffalo / Golang
iOS Developer - Frontend - SwiftUI / Swift
iOS Developer - Frontend
Now obviously there's people who enjoy doing both BLOC and UI and these people are called Full Stack Developers, though a full stack developer is never limited to just those 2 things. More often than not he/she is to have knowledge of how the architecture of the app works and how he can improve it.
While today a Full Stack Dev is limited to a single language and people are proud of that , I remember mentioning in the previous post, don't limit your skillset! , so if I were to be a full stack dev I'd be learning every language there is and work on projects handling both frontend and backend and understanding architecture for dev.
Since we're done with the classification part, let's get to the general roles that are assigned to someone in a company.
- Junior Dev / The Trainee
- Senior Dev / The Guide
- Lead Dev / The Mentor
- Principal Dev / The Overlord
- CTO / The Elder
The name beside the role are just something that I've come up with, I'll try explaining why and what they are.
This guy is here to learn, you can have junior devs who've been in the industry for over 10 years and prefer having mentors and keep learning (a very good thing to do!) but yeah, these are the trainee, they keeps learning ,These people like having a mentor on top of them almost always, they enjoy the part where they keep learning new things and growing.
A developer should always keep this mentality no matter what role they actually get in a company. I've made quite a few attempts to stay at this role but i don't know , get pushed up always....
This guy has made enough fuck ups in his dev life to understand what and where to look for solutions and can guide you on how to approach a problem, again these can be people who just started development and also people that have been doing it for 10+ years, there's no limit to good you get at a skill, it's different for everyone.
This person's role is to make sure the other two are able to find resources, docs around well enough and acts as the person who gets rid of the road blocks. His/her work is to manage your work, review your work and 90% of the time acts as an indirect quality check engineer and the person both junior and senior go to when trying to understand the architectural decisions that were made and how the code should/could be structured to perform better , 8/10 this is where the Full Stack Developer ends up being after he's learned how to handle both people and code fuck ups.
He/she are there to be with the development from start to finish, they take care of architecture, development toolchain, dev processes, automations, programming standard / principles and overlooks and plans stuff.
An interested Developer grows towards this mentality everyday without even knowing but at this point you are the person who researches a lot more than he implements, unless you are in a startup then you might have more than one role anyway but this guy has plans for plans that act as backup for the backup of a backup while being a backup.
Tagged him as The Overlord , because he's just that, plan everything, has people acting on those plans and doesn't get into the field unless it's absolutely necessary.
I'm no where close to a Good Principal Dev yet but we're getting there.
CTO - Chief Technology Officer
The Elder, aka the know it all , That's all I'm going to put here, there's nothing more you can talk about the CTO.
This is one huge post....
I've probably missed a few specifications in terms of roles and thus it's not to be considered a hard limit on what you can/cannot do and a passionate developer can never be limited to a single role anyway.
You can be a junior working towards becoming a senior, you can be a junior who has moments where you help out a principal developer make decisions, it's always possible, not everyone knows everything, even if I just said that the CTO is supposed to be the know it all.
That's it for now,