A few months back I went to the SpringOne 2GX conference to learn about the latest and greatest for Spring and Grails. The talks I focused on were mainly on server-side Grails and system architectures (like microservices, which I’ve been playing around with quite a bit lately). The last talk I attended, however, was called Modern Frontend Engineering and focused on frontend development. I consider myself a full-stack dev, so frontend development is just part of the job. I went into the talk expecting to learn a few things, but instead I got a wakeup call.
The talk, which has slides here dove into everything from frontend dependency management (Bower) and task running (Gulp and Grunt) to CSS frameworks (Bootstrap and Semantic UI) and MVC frameworks (AngularJS, Ember, and a dozen others). This doesn’t even begin to consider everyone is using Node to run all of the above tools and to serve up their single-page applications. Apparently nobody writes heavy, coupled web applications anymore.
That was news to me.
I’ll admit I came out of that talk a bit scared. I thought that if I just found enough cool tools and put in a few hours outside of work to focus on frontend development and that “User Experience” thing I’d be OK. That talk was a wakeup call that I can’t truly compete with frontend devs as a full-stack dev. It might have been at one point, but those days are definitely over.
Since the conference in September I’ve had to come to terms with a few things:
That last one can be generalized to:
As a full-stack dev, I will never be on the cutting edge of anything
That’s a bit grim (and a bit of an exaggeration), but I’m beginning to believe it’s more true than not. There is too much ground to cover today and being a full-stack dev means not being an expert in anything.
Over the past couple months I’ve taken a hard look at my toolstack. It generally was:
The stack above is, besides a little old-fashioned, not scaleable. It’s great for smaller apps and scripts, but those are fewer and further between. It’s also very manual. Web app frontends become a mess very quickly when everything is wired with jQuery.
Now compare the above with my new stack below:
You could say I’ve jumped on the bandwagon.
The move to learn AngularJS was caused by many reasons, but one big one was the announcement that Grails 3.1 would have an AngularJS profile. Learning AngularJS has been great so far, especially when AngularJS Resources is combined with Grails REST Web Services. Those alone have saved me a ton of time writing CRUD functions for REST services.
And if you’re going to learn anything like Bower or AngularJS you’ll have to learn Node.js. One thing lead to another and I’ve started using Node.js for just about everything.
Finally, Docker has been a necessity for a few projects and it works really well with the above tools (though I would have learned it just for the amount of time it’s saved me when trying to run other people’s projects).
The moral of this story is that these days in web development you do have to specialize, even if that specialty is being good, but not great in everything. I’ve only got so much time, so I look for the minimum tool stack that can do the most for me so I’m not spending all my time keeping up with the updates to my stack. I’ve also come to terms with not making the most beautiful, most interactive applications by myself, there just isn’t time for it all.
There’s a lot of great frontend devs out there making a lot better stuff than I can. I can’t wait to start using it on my apps.