It seems as though that there is a growing infatuation in the tech world today with the full-stack web developer. I mean, having one can be very beneficial to your team especially for those companies building a lean and agile one. Good developers who are efficient in each layer of the stack can help the team ship a better product almost every time. These developers, who may or may not be experts across different layers of modern stack, understand Server and Hosting Environment to Business Logic and User Experience. Being a full-stack web developer gives you a competitive edge from one who specializes only on the front end or back end — you could run circles around teams of programmers creating the same project.
However, as technologies evolved so did the web development stack. New operating systems like nginx came out, dozens of post-relational databases, like MongoDB and MariaDB are out there and of course, mobile-first web design and development was introduced. This, I would say, broadened the scope of work for the full-stack web developer. Overall user experience in your website or web application became the primary concern in the process of design and development. And to make things much more complicated, there has been a rising demand in web interactivity. Those who considered themselves full stack web developers in the LAMP stack period now faces a big challenge — keeping up with the advancements of each programming interface.
But how do we define the modern stack so as to better understand what specific skill sets one would need to keep up with the advancements of web technologies?
One of my personal favorites is from Laurence Gellert’s blog post, What is a Full Stack developer? In his article, he outlined the layers of the full stack and for each layer identified the different responsibilities accompanying each layer. From this, I was able to tell myself that being a full-stack developer in the modern stack is not entirely impossible. Of course, extra work and effort will be badly needed.
As I was reading the bullets in his outline, I quickly realized how frameworks and tools will be extremely helpful in performing the responsibilities in each layer of the modern stack. Some of the tools and frameworks that came into my mind were AWS, Doctrine Object Relational Mapper for Data Modeling, Symfony2 or Laravel5 for MVC, Twitter Bootstrap or Zurb Foundation for front end interfacing.
Let me guide you on how to start working on each of these layers using the different frameworks available — and along the way, proving that the full-stack web developer isn’t just a myth.
Server, Network, and Hosting Environment Layer
In this layer, you will be involved in (1) making sure that the infrastructure of your application will not break — taking every resource into account and (2) knowing how far the application can scale given the hardware resources that you have.
Taking care of the infrastructure is a full-time job in itself. But as a full-stack web developer, will we be able to cover all the bases of this layer of the stack?
I believe we can. With the continuous improvements of cloud hosting services and increased performance, scalability and stability of an application’s infrastructure can be easily realized. Testing and deploying applications has never been easy with the features of cloud hosting platforms which includes but not limited to, version control, capacity provisioning, load balancing, scaling, and application health monitoring. Developers need not worry as there are platforms such as Amazon Elastic Beanstalk that automatically handles these details to reduce infrastructure management complexity without restricting user control.
This diagram I’ve lifted from the documentation site of Amazon Elastic Beanstalk demonstrates how simple the process of developing, testing, updating and deploying an application is in its platform.
Getting started with this platform is fairly easy. Just sign up for an AWS Free Tier account, fill out the necessary information, and start exploring the AWS Management Console.
One of the most interesting responsibilities in the modern stack is data modeling. In this layer, one must be able to draw a good image of how data will be stored, used and then stored again in the database. Having a flawed data model might result in re-coding or worse, the creation of uber-ugly code just to accommodate some business logic that cannot be handled by your data model.
Some key points to remember during the data modeling phase are (1) drawing up a normalized relational model; (2) non-relational over relational data stores, and (3) choosing the right ORM (Object-Relational Mapper) for your preferred programming language.
It is hard enough to draw up a good, normalized relational data model, so in our quest to understanding this layer of the stack, it will be extremely helpful to use an ORM to transform your data models into machine-readable code. There are different ORMs for different programming languages and for this article, we’ll be looking at Doctrine and Propel — two of the most frequently used ORMs for PHP.
Here are two of my favorite comparison between the two:
“Until last year (2009) the Propel documentation was one of the major problem for them, and it’s true they are improving it [but] there still are work to do. On the other hand, the Doctrine documentation is great and the community is continuously improving it. So, about documentation concern, Doctrine is clearly the winner.” – emiviada, hasheado.com on Propel vs Doctrine in terms of Documentation.
“Rough benchmarks imply that for simple operations, Propel is faster. Although, for complex operations, Propel is notorious for using more queries than Doctrine, so Doctrine comes out on top.” – http://trac.symfony-project.org on Propel vs Doctrine in terms of operations performed during queries.
Personally, my choice of ORM is Doctrine. With their DQL (Doctrine Query Language), which is customized SQL, I feel very familiar creating querying operations for my applications. One more reason why I prefer Doctrine over Propel is the efficiency in queries performed, especially on medium to high complex operations.
This is where the true value of your application will be determined. Mapping out the impact of your application to the overall business goals is the primary concern when working on this layer of the stack. Again, the responsibility tied in business logic analysis is a completely separate job in most companies. In most cases, there exists an intermediary layer — the system analyst between the IT and Business Departments in medium to large organizations. The absence of the system analyst results in a dysfunctional relationship between business guys and programmers and ultimately in project delays and/or shortcomings in specs.
If this is the case, how then do we expect web developers to map out business processes / logic in the design and architecture of applications?
This might be the hardest challenge in our quest to find the truth about being a full-stack web developer. But here are my two cents on this matter:
It all boils down to structuring and organizing business logic. If we can come up with a way to reduce the complexity of business processes to simple truths and rules, we have a good chance of coming up with a diagram that can be used as a basis for coding. Instead of coming up with long “if… then” statements to express business processes, it is recommended to focus on what we know is true. Look at the following expressions:
- The store issues refund only for purchases above $1000.
- The inventory of the store can only be replenished by the Purchasing Manager.
By reducing the complexity of business processes to these simple truths, programmers can focus on the creation of a model that gives a decision when these truths are applied. This model will be used in the next layer of the stack — the action layer.
API layer / Action Layer / MVC
Simply put, this is where the backbone of your application is created. In this layer, we separate the application’s logic from the display. The most popular concept in this layer of the modern stack is the MVC (Model-View-Controller) architecture. Separating the logic from the display is not a new approach in application development, but the MVC architecture made the separation look nice — cleaner code, easier to maintain and scalable.
As for how to start working on this layer with MVC, there are many frameworks available for the different programming languages out there. However, to keep things short, let’s look at Frameworks available for PHP as listed by Mashable. From the frameworks listed here, two of my personal favorites is Laravel and Symfony. Each has its own unique features: both are built to realize the MVC architecture into machine-readable code. For code elegance and simplicity however, I would prefer Laravel — one command and you’re good to go. Also one thing that I like about Laravel is their impressive documentation and help videos.
No matter which programming language you are using, I strongly recommend the use of frameworks that utilize that MVC architecture. Not only is the development time faster, but the readability of your code improves, thus making it easier to maintain. Leave the hardcore code components that powers the backbone of your application to the framework and focus on making sure that your application implements the business rules you’ve drawn up. At the end of the day, an application’s value is not how complex its codes are but the value it provides to the business.
One of my favorite topics to talk about is the usage of different front-end frameworks such as Twitter Bootstrap and Zurb Foundation. These are two of the most popular, if not the only options, when creating the presentation layer of an application. Both frameworks have a good grid system for the user interface’s structure, customizable style sheets and good documentation. I have used both in different projects and can attest that these two frameworks have proven that front-end coding has never been easy.
Bootstrap and Foundation has helped abstracting the complexity in coding, especially during the rise in the demand for interactivity in different applications. They have successfully maintained the progress of their components to keep up with these demands. Lightboxes, carousel sliders, tooltips, popovers, etc can easily be integrated in your application using their built-in classes and plugins — just head over to their websites to get started.
On the modern-day Full Stack Web Developer:
- Usage of Frameworks helps execution of responsibilities in each layer of the stack be more efficient.
- Being a full-stack developer isn’t about doing everything in each layer of the stack. It is about understanding the core processes and how to integrate everything during the application development process.
- The full-stack web developer isn’t a mythical creature like a unicorn. The availability of frameworks makes it easier to understand and perform responsibilities in each layer of the stack.
Now it’s time for me to hear your take on the full stack web developer. Hit the comment box below.