May/2022 has been a CRAZY month for me, kids and wife were sick for the major part of the month (luckily I haven't got anything... yet), deadline from the government to fill and submit my income tax forms consuming the majority of my free/non-working hours for multiple days, lots of demand at work and the question floating in my head I knew at one point would come: Should I break the commitment I had on writing at least once a month in this blog? I got all the perfect excuses lined up! No way! I'll try my best to deliver something today (last day of the month!) even if this is not as polished/reviewed or as long as as the other posts. After all, as Lincoln Chafee said “Trust is built with consistency” and I don't want to lose your trust! I know that it is already early June but I ALMOST finished this post on time! Even more stuff happened in the last week of the month that shifted my focus (I sense another blog post coming when the turmoil passes) so... may I beg your pardon please? please read this with British accent
In the previous two posts (Features and KISS and COD) there was a topic that I wanted to cover around "Don't fall in love with the technology" but it didn't fit any of those narratives so we are going to cover here: You are only going to understand the problem and make better decisions if you are not afraid of asking questions. Sometimes it will feel more like an interrogation or people will think you are the dumbest person in the room but that is ok! There is even a methodology to get you to the root cause of incidents that is based on asking Five Whys and several articles talk about the importance of asking questions to create clarity (even if they sound like dumb questions).
Several times during my career I got approached to help with a decision or to give some advice and this is yet another story that happened when I was talking to a friend/mentor/mentee and asking a lot of questions (even if you know the answer) is important because it makes people think. Regarding mentorship, for me it is a weird relationship when I get the opportunity to mentor people, I treat this as a two way thing as I learn a lot during the meetings so it is very unfair in my view to just call them mentees. Also, after several mentorship meetings with a person, I guess we just become friends: I try to help them with a specific problem they are facing or a skill they want to improve, I start cheering for them and I do want them to succeed, I start running some of my issues as well with them to get a different perspective and always get new insights, it usually involves drinking coffee (or having lunch or beer) so in my view it is a true friendship!
Going back to the story, during one of those lunches with a friend who happens to work as a Solution Architect, I got the following question: Which front-end framework should be the recommendation to start a new project, React.js, Angular or Vue.js?
Well, front-end development is not my specialty, I could probably say "I know people that have strong experience in the field, I'll ask them for a technical response and will get back to you" but I also want the person to start thinking on the overall problem and of course technology is a important factor but not the only one to consider. This is the moment! Let the interrogation begin! Isn't that amazing? the person asks a simple question and in response I ask a thousand more!
I tend to start asking questions that will help me with context so that I can understand the history and how they are now stuck this specific question. Asked a few whys (I don't think I reached the 5 limit) and the background I got was something like this: "Our team of four people got a new cloud project and we decided to move away from the monolithic Model-View-Controller (MVC) architecture we are used to build stuff with and we want to use modern techniques/frameworks/technologies. We settled on creating back-end APIs using .NET Core in a container environment that will be in front of our Microsoft SQL database (both hosted in the cloud)". I wanted so bad to derail the conversation and focus on the point that starting with a monolith makes sense in the majority of the cases but I shut down those internal voices and didn't talk about that (for now!). What I got out of those whys is a start but not the full picture.
More investigation to understand why they were able to settle the back-end technology but were struggling with the front-end and the details I got were: "The majority of the team prefer back-end development and there is no one focused on front-end development. In fact, we are looking for a front-end developer to join us! We are with this question in our minds because during the last team architecture meeting one team member that is more enthusiastic about front-end suggested React, another one worked with Angular in the past and finally another person suggested Vue because it is newer. As we did not reach consensus, they basically asked the Solution Architect (in this case: ta-dã it's me!) to make a decision". Do you see where this is going? I now have more questions! When you say Vue is newer is this a case of falling in love with a technology? If you are looking for a front-end person wouldn't be better to wait a little more to bring his/her perspective to the table? Please someone help me stop! I think we got enough for now so time to move on and ask questions that hopefully will make they think and start moving to a conclusion.
Let's start by looking this purely from the "framework knowledge" standpoint. If you think about the company this team is part of, imagine that project will change scope and they will need to bring more front-end developers (not from the industry but from other teams in the company) to work on this project, if you look around at those other teams, which of the three is more likely to find people with some level of proficiency? I understand not all companies have a good grasp of this type of information but there is always some creative ways to try to find it: Slack developers group search, individual development plans, projects in production from the company that use the framework, stack overflow questions made by the company, personal GitHub projects... so many different ways!
Now if you expand this view to the industry, if you go to the market to hire a new front-end developer to join the team (and look, they are facing this scenario right now!) which of the 3 would you more likely find good candidates with the skill or with the passion to develop this skill? Not a simple question but I suggested that we open the last Stack Overflow survey. The results? React takes the lead here both in most wanted web framework and most used. Angular comes second as the most used but Vue is second as the most wanted 🤔. Another aspect to take in consideration here is who create/owns/maintain those open source frameworks? Are they backed up by big communities? How frequently are they updated? Any big security flaw happened in the past years? I told you I have many questions...
We talked about company, industry and we got a glimpse on the team skills and perspective but it is very important to stress and get more details with the them to get to a better decision. The person who worked with Angular, we need more details on that experience. The other one who is more inclined to work on Front-End stuff, why he suggests React? Same for the one who wants to try out Vue! From the three options which one is the easiest to learn? Finally, if a decision needs to be taken before bringing someone to fulfill the front-end position from the market, the team needs to be comfortable with continuos learning.
Time to put some technology in this equation as well! I'm sure the frameworks have differences in architecture, how you build components and how they are designed that will impact: booting, rendering and functions handling. Always good to understand the pros and cons and try to understand if any answer you find brings some red flags to the project use case (here a quick comparison in case you are interested that we found while discussing on the topic). But that is not enough, of course I have more questions! OMG MORE QUESTIONS! Which of those are better for browsing on a phone/tablet? What about easier to create/maintain a Responsive Design? Can we build Progressive Web Apps (PWA) with them? If needed in the future, which of them would be easier/faster to extend to a mobile application?
"It was a simple question and you ruined it!"Ex-friend
This could be the quote from now an ex-friend but hopefully we saw that there are several aspects that can help this team with making a better decision and this decision is heavily tied with the team context! For other teams answering the same set of questions will most likely bring different results! Isn't that amazing?
Also, not being afraid of asking questions is crucial and this "process" should not be done in isolation (e.g.: the Solution Architect goes around and come back with a decision to the team). The team must be part of answering all those questions together and they should also bring more questions!
Finally, the hardest part: the team needs to have the maturity to disagree and commit! Bringing multiple perspectives to the table has the side effect of people disagreeing on what is the right answer and once more that is completely fine! Mature teams that participate on the decision taking process since its early stages understand that sometimes there is not a single answer to a problem and they should not be "sad" or "mad" if they preferred technology wasn't chosen, they just move on and do the best to learn and contribute!