Thursday, January 3, 2019

Tipping Over the Full Stack

Are there good full-stack developers?

For the past several months, I have been posing as a traditional full-stack developer when I come from a background of software testing, interpreted scripting, and winning hackathons with proof of concept and prototype work.  I suppose "full stack" could also mean twiddling bits of firmware to interface with a BLE stack and then writing software to allow a PC or phone to control an embedded device (which is my kind of full-stack), but here I'm referring to traditional back-end and front-end application development.

It used to look easy back when I entered this world roughly four years ago.  You can bang out some pieces in Node, others in Angular, and some deep plumbing in Java, interface with your database of choice, and then call it a day.  I was still usually involved with testing, though, and spent time flipping back and forth between API and UI testing (specifically API contract (such as Pact) type of testing, and regression testing).  Sometimes I would make contributions to the application code, which seemed to really impress folks that I could play on both sides, just as long as I didn't test what I had written for myself.

However, in a land of deep Java Spring and deep Angular, which has evolved substantially since last time I looked at it (I usually prefer Polymer for personal projects), it just seems like my head is spinning.  Not because the material is necessarily difficult (despite that it has nothing to do with machine learning or IoT, which is really the stuff that is up my alley), but because there are so many levels and layers of things to keep track of.  Orchestration layers and other APIs it calls upon comprise the back-end, and then intertwined repositories of Web components and Angular code make up the front-end.  It can become very time-consuming for someone who is OCD and who can get fixated on details to build up a feature involving front-end and back-end changes, plus testing as well, if the team is too small for dedicated testers.

It's necessary to be a full-stack developer if you are an independent contractor -- or even then, wouldn't you just bill for enough money that you can hire someone else to do the parts you don't want to?

If there are good full-stack developers, do they really like it?

Another thing I've observed is that those in my organization calling themselves full-stack developers often tend to focus, specialize, or gravitate toward doing either front-end or back-end work, but not an even split of both.  This way, they can hone in on and become an expert at their passion, but still be fluent enough in the other side of the application so as to keep pushing forward when someone else is on vacation or there's way more of one type of work from sprint to sprint.

But, beyond the time sunk into making sure each of your repositories has the correct dependency version on each other, and checking all your Git commits for errors (let alone the time required to make POJOs and very boilerplate unit tests...there should be tools for this), it is mentally draining and does not leave much energy left over for learning about what is coming around the corner.  Despite my recently-attained qualifications (such as becoming a Google Developer Expert in Tensorflow), I've been less inclined to play with emerging technologies after work.  It seems that most GDEs actually work in their field of interest, so I anticipate swiftly moving to make the same true for myself.

Anyway, this business of full-stack development is not for me, unless I'm doing it for myself at my own pace.  It is fruitless to try to keep up with two different sides of the same coin, since there are too many details to shore up that you can't better yourself in the process.  And despite the call to become an expert in a field (which a lot of people aspire to), frankly I'm wondering if it would not be more interesting to simply try and fail at a lot of things, and then come away with a bunch of interesting stories and insights from those experiences.  That being said, I have been deemed by Google as an "expert" at machine learning (not full stack app development), which is all well and good, but it doesn't mean anything until you can either apply it to a problem or teach it.  Naturally, I have my own set of ideas (not likely to pay the bills though).  However, in the spirit of trying a lot of things, failing fast, and learning for myself, I'm interested in situations where the tech is not the forefront.  There's some other goal like winning an election, valuing a real estate loan portfolio, or wading through monotonous legal documents to find precedent or stake a claim; tech is instead solving a problem to free up human capital for more meaningful things.

And yes, that's a nice way of saying I want to usher in the robot era and replace tons of jobs!  But it's my belief that we can aspire to be a society that prevents people from doing things that trained monkeys can do.  We should have the freedom and flexibility to be creative and expressive, and to be able to spend the majority of our days in pursuits that play well to our strengths and unique abilities as a species.  And while some people may find that full-stack development fulfills them, I'd rather stay in a specific niche than try to do all of that.