Lately, I’ve seen lots of people that want to become ”full stack” developers. So, I wanted to do a quick post just to clarify what it means to be ”full stack”. And, to be honest, the term ”full stack” is sometimes confusing for me as well; because it can mean something different depending who you are talking to. I will be also explaining other roles such as DevOps and even talk a little about the difference between full stack and“Unicorn” developers.

Frontend Developer

A Frontend Developer is a developer who can proficiently perform development for the client side. This is basically working with the look and feel of a website or application. Additionally, it could have interactions with APIs that provide information to display on the UI. Being a Frontend developer is, sometimes, considered being one of the “cool guys”; because, in the end, this is what the clients would see and really appreciate at a first glance. It is really cool when you can create something beautiful that people really like and value what you create.

When working on web applications, a Frontend Developer should know how to use HTML, CSS and Javascript languages efficiently. Although its not required, they could also have experience using other frameworks. Examples of frameworks such as Bootstrap, Foundation, Materialize, AngularJS, ReactJS or Vue. Ideally, they should also know how to make “responsive” websites that can adapt to the device’s screen size and orientation.

If you can create a website using HTML, CSS and Javascript; you are considered to be a frontend developer. Frontend development is not only about creating web applications. I have been mentioning web development as frontend since its the easiest example. But, a frontend developer is about creating UI applications regardless of the language. Examples of other languages where frontend applications can be created are C++, Swift, Objective C, even Delphi, amongst many others.

Backend Developer

Backend Developers are not the fancy shinny job that clients always appreciate; but, its a very important role. They basically create the business logic of our applications and store the information, if needed, into a database. Backend Development might not be as exciting as creating beautiful designs; but, it does rely on designing smart solutions that help process business logic and to be both performant and secure. It is for this reason that a backend development role has its own challenges.

Backend development is not only about coding the business logic. This role also requires knowledge of database design when storing persistent information, which tends to be most of the time. Database design is important because affects the performance of certain queries between tables when using relational databases; or designing the right structures when working with non-relational databases.

Backend development is completely agnostic of the client side language or framework being used. In fact, you can create your business logic any server side language/framework you prefer and have different client side languages. For example; you could create a server side code using Ruby on Rails and have a web application built with React, a native app built on Swift for iOS, and another app made in Java for Android devices.

Full Stack Developer

Going by the book definition, this role is for a developer than can jump seamlessly between working on both Frontend and Backend. By this definition, being able to create a website does NOT make you a Full Stack developer. The reason being that there is no involvement of a server side at all.

It is important to know this difference; especially when applying for a full stack role. If you apply to a full stack position you’ll be expected to answer questions and exercises for both creating a beautiful UI and doing exercises of server side code. So, be careful about advertising yourself as a full stack developer if you are not.

The intention of me mentioning such important definition is not to discourage you for not being a full stack developer; but just describing the meaning of it. It is perfectly fine to only be a frontend or backend engineer and specialize on it. In fact, that is one of the disadvantages of having a full stack developer; it is really hard, sometimes impossible, for them to always be up to date in both stacks.

DevOps

The DevOps role is where person whose main job is to shorten systems development life cycle and provide continuous delivery with high quality. It is essentially a combination of software development and IT operations to ensure applications are running smoothly. DevOps is not about developing the application itself, but instead supporting the developers building an application.

This role is interesting, given that its main “clients” are the developers working on an application. Such “clients” are very demanding and want to be able to have properly tested code and releasing it in a timely manner. DevOps engineers reduce developers heavy lifting by creating workflows to simplify testing and release. Such workflows usually involve executing test runs and deploying on success to internal environments. Workflows could be created for deploying code that has been tested out to production with the press of a button. This role uses tools such as Kubernetes, Docker, Spinnaker, Jenkins, Code Pipeline, Selenium and many others to be able to streamline such complicated workflows. The role also requires knowledge on server management and, ideally, the basics on network management.

Quality (Testing)

The quality (a.k.a. testing) role is about testing the application. And, don’t get me wrong, it is not just openning and application or website and clicking around until something fails. This role is about designing case scenarios of workflows that should work and workflows that should not. It is also about testing edge cases and gracefully handling errors. This role is somewhat different to unit tests. My personal opinion is that unit tests should be written by the developers of the application code; although its not always the case. The quality role’s test cases are more about usability cases on the application itself.

Ideally, the quality role should be done by someone who knows coding. This is so that it would be posible for such role to automatize those test case scenarios. Automatizing test cases helps to improve and simplify development workflows. Alternatively, test case runs could automatically triggered by the workflows defined by the DevOps team. Examples of frameworks that are used for testing are WebDriverIO, Selenium, Capybara, Cucumber, amongst many others in many different languages.

“Unicorn” Developer

In the past, a Full Stack Developer was considered to be the same as a “unicorn”. This is not true anymore. This used to be because full stack developers where able to create an whole application on their own. With the development of new strategies for Operations, improving workflows, betters way of testing, network architectures, amongst many other things; the definition had to change.

Nowadays, a “Unicorn” developer is someone that can jump in between all the different roles. Not everyone might agree to this definition, but personally this is what I consider to be a “unicorn”. Unicorns are hard to find and usually the salaries are high. This type of developers have a lot of knowledge and training that acquired over the years of experience. The good thing about having a “unicorn” on the team is that they understand the challenges of every role and can help manage a project efficiently.

Becoming a unicorn involves lots of continuous improvement and self learning. They usually have invested learning things, on their spare time, outside of what their current role assignment might be.

Conclusion

There are many different roles you can take when working on software development. Each one of those roles have their own set of challenges. Regardless of what you hear people say you should do or what the pay scale is; you should go and learn whatever you enjoy the most. You should go and become proficient on it. Once you can work on that role effectively, then you can look into learning a bit on different roles to increase your knowledge. With practice, patience and a hunger of always learning; you will someday become a Unicorn yourself whenever you least expect it.

Related Links