Originally published at deepu.tech.
Hello friends, the second edition of my book "Full Stack Development with JHipster", co-authored with Sendil Kumar N, is published this week and I thought of dedicating it to all the Full Stack Developers out there.
Disclaimer: This article contains excerpts from my book "Full Stack Development with JHipster β Second Edition" published by Packt.
According to the Stack Overflow developer survey 2019, full stack developer is the most popular developer title. The software industry defines a full stack developer as someone who can work on different areas of an application stack. The term stack refers to the different components and tools that make up an application.
In terms of web application development, the stack can be broadly classified into two areasβfrontend and backend stack, also known as the client-side and server-side stack. The term frontend generally refers to the part of the code that is responsible for rendering the user interface, and the term backend refers to the part that is responsible for the business logic, database interactions, user authentication, server configuration, and so on. There is also the DevOps part of the application, which includes continuous integration, production deployment, and so on. A full-stack Java web application developer is expected to work on both frontend and backend technologies, ranging from writing HTML/JavaScript for the user interface to writing Java class files for business logic and SQL queries for database operations. They are also expected to work on DevOps, ranging from production deployments to setting up continuous integration and continuous delivery (CI/CD) as required.
With an ever-evolving software architecture landscape, the scope of technologies that a full stack web developer is expected to work with has increased dramatically. It is no longer enough that we can write HTML and JavaScript to build a user interface β we are expected to know client-side frameworks, such as Angular, React, and Vue.js. It is also not enough that we are proficient in enterprise Java and SQL β we are expected to know server-side frameworks, such as Spring, Hibernate, Play, and Quarkus.
Modern full-stack web development
The life of a full stack developer would be worthy of a whole book by itself, so let's leave that topic for another day.
Instead, let's look at a user story from a full-stack Java web application and see what is involved.
What a day looks like
Let's use an example of developing a user management module for a typical Java web application. Let's assume that you would be writing unit test cases for all of the code, and so we won't look at it in detail here:
- You would start by designing the architecture for the feature. You would decide on the plugins and frameworks to use, patterns to follow, and so on.
- You will be modeling the domain model for the feature depending on the database technology used.
- Then, you would create server-side code and database queries to persist and fetch data from the database.
- Once the data is ready, you would implement the server-side code for any business logic.
- Then, you would implement an API that can be used to provide data for the presentation over an HTTP connection.
- You would write integration tests for the API.
- Since the backend is ready, you would start writing frontend code in JavaScript or similar technology.
- You would write client-side services to fetch data from the backend API.
- You would write client-side components to display the data on a web page.
- You would build the page and style it as per the design provided.
- You would write some automated end-to-end tests for the web page.
- You are not done yet. Once you have tested whether everything works locally, you would create pull requests or check the code into the version control system used.
- You would wait for the continuous integration process to verify everything and fix anything that is broken.
- Once everything is green and the code is accepted, you would typically start the deployment of this feature to a staging or acceptance environment, either on-premises or to a cloud provider using technologies like Docker and Kubernetes. If you choose the latter, you would be expected to be familiar with the cloud technologies used as well. You would also be upgrading the database schema as necessary and writing migration scripts when required.
- Once the feature is accepted, you might be responsible for deploying it into the production environment in a similar way, troubleshooting issues where necessary. In some teams, you might swap the steps with other team members so that you would be deploying a feature developed by your coworker while they deploy yours.
- You might also be responsible, along with your coworkers, for making sure that the production environment is up and running, including the database, virtual machines, and so on.
As you can see, it is no easy task. The range of responsibilities spans from making stylesheet updates on the client-side to running database migration scripts on a virtual machine in the production cloud service. If you are not familiar enough with the setup, then this would be a herculean task, and you would soon be lost in the vast ocean of frameworks, technologies, and design patterns out there.
Challenges
Full-stack development is not for the faint-hearted. It takes a lot of time and effort to keep yourself up to date with the various technologies and patterns in multiple disciplines of software development. The following are some of the common problems you might face as a full stack Java developer:
- Client-side development is not just about writing plain HTML and JavaScript anymore. It is becoming as complex as server-side development, with build tools, transpilers, frameworks, and patterns.
- There is a new framework almost every week in the JavaScript world, and if you are coming from outside a Java background, it could be very overwhelming for you.
- Container technologies such as Docker & Kubernetes revolutionized the software industry, but they also introduced a lot of new stuff to learn and keep track of, such as orchestration tools and container management tools.
- Cloud services are growing day by day. To stay on track, you would have to familiarize yourself with their APIs and related orchestration tools.
- Java server-side technologies have also undergone a major shift in recent times with the introduction of JVM languages, such as Scala, Groovy, and Kotlin, forcing you to keep yourself up to date with them. On the other side, server-side frameworks are becoming more feature-rich, and therefore more complex.
The most important thing of all is to make sure that all of these work well together when required. This task will need a lot of configuration, some glue code, and endless cups of coffee.
Conclusion
It's very easy to get lost here, and this is where technologies such as JHipster and Spring Boot step in to help. They help by providing the wiring between moving parts so that you only need to concentrate on writing business code. JHipster also helps by providing the abstractions to deploy and manage the application to various cloud providers.
A full-stack developer is one of the toughest roles in our industry these days and I think it is one that is under-appreciated a lot. If you are a full stack developer be proud as it takes some courage to be one. You may not be an expert in a single technology or framework but you are a magician of sorts. You can juggle between so many technologies and frameworks without breaking a sweat. You are the real 10x developer, what the heck, you are a 100x developer, not because you use specific keys on your keyboard more than others, its because your job used to be something that required at least four people to work together. You may not get enough credits, though you deserve it just for the effort that is required to keep up, you are awesome.
Though the satisfaction of being able to work on all aspects of application development is rewarding, It is still a shame that we are not getting the salary that is the sum paid to four people who were needed to do this work π
So if you are a proud full stack developer let me know in the comments and tell us how your day looks like.
If you liked this article you might like my book as well. You can get it from Packt and Amazon.
If you like this article, please leave a like or a comment.
You can follow me on Twitter and LinkedIn.
Cover image credit: Photo by Arian Darvishi on Unsplash
Top comments (20)
I'm fairly new to software development as profession compared to many people, and it fascinates me how room-dividing the term "full stack" seems to be.
Am I the only one who's majority experience with development is similar to what is described as "full stack development" in this article; have always thought that's just what development is; and interpret terms like "frontend developer," "Java developer," and "infrastructure engineer" as mere literary devices used to highlight different aspects of the software development process and reduce the scope of conversation? π€
Well this wasn't the scope of developers some time ago. Even now there are companies where you have frontend developers and backend developers.
I guess I wouldn't want to be a specialist to that extreme π€ it would feel to restrictive to me.
The more I think about it, though, the more it feels similar to painting. Some painters mix their own paints and then simply take canvases other people have made and make their master marks; others focus on making really good canvases and spend very little time using them. Some focus solely on making marks with paints and canvases others have made, and others make their marks with paints they've mixed on canvases they've made.
Whatever floats your boat, I guess! π I'm not sure why there's animosity between the different types of painters, though.
Yes absolutely
Also, I don't think there is any animosity. Atleast not that I know of
Yeah, I don't think 'animosity' is the right word.
I was thinking about the attitude I've seen where "X developers" look down on "Y developers" because Y developers don't understand the problems that X developers have to deal with, etc. But I think that's probably just a simple case of superiority complex or elitism, and I know that's not widespread, thankfully π
Well, my intention here was never to look down upon anyone. It was just to convey what full stack development means. I have been full stack developer. Backend dev, frontend dev, PM, sales and so on. So I know the challenges in those and there are challenges in every role for that matter.
Oh, I didn't mean to give the impression that I felt that attitude from you! π I quite liked the way you presented this. Your use of the term "full stack" just reminded me of so many times I've seen it spark off a tiny flamewar (sparkwar? π€ ) and of how I've never seemed to be on the same page as the folks in those discussions.
Oh cool, sorry for misunderstanding.
I think full stack as a role is more of a could you do it. Not so much, you by yourself have to fulfill all these duties on your own every day. You also specialize within that role. I am a full stack developer that specializes in backend and Ops. Some specialize in design, or user experience.
On a typical day I code in just one area and might review a PR in the other.
Additionally, once you understand the basics most tools vary only on syntax and method names that are one Google search or auto complete away.
People get too caught up in react vs angular and forget they are both MV* frameworks.
Object oriented design patterns and functional programming will get you way farther than react or spring boot tutorials, in my opinion.
Well, there is no clear formula here. Write up is based on what I have experienced and what you do is absolutely valid as well
Thanks for sharing! I'm a junior fullstack JavaScript dev and I've been looking for a really in depth and clear guide to fullstack development for a while now and, if this book wasn't Java specific it might be just the thing I'm looking for! Would you say its worth a read even if you don't use Java? I guess the principles of fullstack development are the same regardless of the language? Thank you!
There are many aspects in the book that is quite generic, but the framework used, JHipster, itself is Java-specific. Hence if you are looking for NodeJS specific content then this might not be the ideal choice. But if you just want to learn about the full stack life cycle of a project including microservices then it could be helpful.
I'm actually a long-time desktop full-stack Java developer - meaning I end up doing both the GUI work for the desktop app, and starting up any behind the scenes local / remote services it needs. Despite web development being by far the more common "full-stack" mode, this resonates well with me, as I find myself doing equivalents to these things anyway.
I feel you brother. Doesn't matter if the front end is web or desktop, you are a full stack developer.
Your list of developer's daily activities looks like a decent checklist for learning web technologies these days π
Unfortunately yes, people do expect a lot from developers these days.
...and you are surely satisfying these expectations :-)
Thank you for your book and for moving development forward with JHipster!
It's not only a generator for getting jobs done, but also for learning how to do it right with incredible power from really skilled craftsmen. Big work! ("The amount of work for which a scale is no longer necessary or practical." - urbandictionary.com/define.php?ter...)
Thank you for the kind words