There are many things that can be said of Front End Software Engineering, many things have and many things will be said to the effect of “FE devs aren’t real devs anyway”. But I stand firmly by the statement that Front End Engineers are no less or no more intelligent or capable than another group, for example, backend, mobile or data engineers. That being said the culture and technologies commonly used today are not adequately delivering scalability or sophistication, in either technical or human velocity, in nearly the way that I believe they could be, and need to be.
I’m sorry if this story is something you relate to or have seen happen at your company. I’m not sorry because I’m about to offend you, I’m sorry because you had to go through this. For what it’s worth, I’ve been the subject or the perpetrator of all sides of this story, at some point in my career.
What is the best way to make Lemonade?
Well my answer is simple, which is that I would like to use a citrus juicer. Sensible right. It’s the one where you cut the lemon in half and then place it in the big cranky thing which you pull down on, to violently squish the life out of little fruit, producing magical juices, and discarding the unwanted bits. This is then mixed with water and sugar becomes wonderfully refreshing lemonade.
But, there are a few problematic things about this system.
1.) I have to cut the lemon, which means that I have to use a knife, and those things scare me. I could cut myself. I could cut someone else. I could forget to wash it and then have to clean one before I can to use it. There are
so many considerations before I wield this medieval device which brings up so many risks which I hate explaining to my non-technical boss. It would be so much nicer if I could just throw the thing in here, whole.
2.) If I get a device to make lemonade, I can’t use it to make anything else.
Citrus juicers don’t do anything else really. I mean you could make orange
juice, or lime juice, or maybe grapefruit juice. But most citrus juicers are not even flexible on the size of input they accept. Some don’t even fit all lemons? some are so specific that you could buy a juicy lemon at the store. And be like “Yeah I’m gonna make a delicious glass of lemonade”, and then get back and realize that because there was a larger amount of sunlight, in the are the lemon was grown and shipped from, this monstrosity of a delicious (possibly genetic engineered) natural marvel doesn’t even fit in your juicer! No good, I need something flexible.
And then it hits me, I could use… a meat grinder. Yes that’s it, it solves both
problems brilliantly. Firstly, I would not have to touch any culinary
instrument that doesn’t need any more handling than pressing a button.
Brilliant, no effort on my part. No trips to the ER from my lack of knowledge on how to avoid opening up my arteries from misjudging the angle of a sharp metallic instrument. And it can handle anything. We can use this system for all of our beverage, and even food needs. Every hour we invest in using a meat grinder will pay off big time because those hours will go into a system that has, many many uses.
But, there is one problem with this. The lemonade tastes like ass.
But that’s ok, because we are engineers. We build things right, we solve the
hard problems. And this is a hard problem. So I write up a jira ticket and add it to the sprint. I know it’s not good to add things mid-sprint but this one is worth it. The ticket reads “Build system to extract rind from meat grinder output”. Simple, write a filter, I love filters, ever since they were added in ES 6 I use them all the time.
So I got the filter working and the good part is that it takes out, well, most of the rind, the bad part is that it takes out almost all the output and we now have to use 10 times as many lemons. The other consequence is that to get it to taste somewhat drinkable we had to use 5 times as much sugar. But that’s ok because what we spend on extra lemons and sugar is nothing compared to how much we save by letting me pop lemons in a meat grinder. And going forward. The flexibility in this system will let us do anything.
There is only one problem I am still concerned about though. The lemonade still tastes like ass.
But before bringing the product of our system up to a level where it can fulfil its actual purpose, which is drinkable lemonade, which, even though we don’t have that right now, we have some really good ideas about how to get there. Our boss had an investor meeting about the growth potential of our company’s intellectual property. So we have to make good on our claim that this system can do anything. So, let’s make… meatballs! It’s what a meat grinder does best right.
But our investors feel like a well established traditional recipes which has a
consistent consumption rate and has been a part, in some form or another, of almost every meat eating culture since the beginning of time, is not really a growth market, and doesn’t sell well as an idea worth the attention of a unicorn like us.
So instead, let’s make something similar to lemonade, say… apple juice. So we put the apples in the meat grinder and come out with something kinda like pulp. Which tastes good. Because from good ingredients you can’t go wrong… right. But that’s ok, because we are engineers, we build things. So
now we have another hard problem, we are good at solving hard problems. So I write up another jira ticket, “Make pupilified apples less solid”.
So it occurs to me that there is a little bit of juice in the pan after we
grind them up. And it tastes so good. This is going to be great. So I think well what if we, just like, add another thing to run over the pulp that would squish out like a little bit more of that juicy stuff. So I add another part to the system that takes the pulp and smashes it some more. And now we have apple juice. The investors are going to love what we can do with this system.
I open a Pull Request with my amazing system and get a strange comment from another engineer, he’s a backend engineer so he doesn’t really understand user experience. “Why are you adding another framework to process the pulp after your first framework didn’t really get the job done”, he’s also been writing code since 2009 so he isn’t really in touch with how software development has evolved and how many tools we have available to us now. “Well… modifying the meat grinder is really hard.” I responded, “And I know this great framework called printing press, that can smash anything, so we are going to go with that.” He responds with something that floors me, absolutely floors me. “Why not just use this printing-press alone if it’s so wonderful”.
Speculation and perspective
In the fictional, though inspired by true events, example above, neither engineer is acting with professionalism or composure. There have clearly been mentorship opportunies missed to guide the front end engineer to use the passion and intelligence they clearly have to build quality software.
When the character says “We are engineers, we solve hard problems,” I believe that is true of even this character. In this case however the choice of frameworks are causing more challanges than they are solving, and the effort exerted and ability of the engineer is not having the impact it could with a more targeted approach.