Simplifying Dev for the rest of the world

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

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

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.

Languages

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 Programming Languages and Python, Javascript, GoLang, Rust, C,
C++, Objective C, Fortran, LISP, Crystal, D lang, are all a few examples,
there's over 300 (maybe more) such programming languages (and still none were
built specifically for Desktop UI development...)

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

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.

The name beside the role are just something that I've come up with, I'll try
explaining why and what they are.

Junior Dev

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....

Senior Dev

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.

Lead Dev

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.

Principal Dev

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,

Adios!