Convergence of Angular features and key front-end learning priorities with Rafael Mestre

Translated transcription from Spanish of episode #10 of the Angularidades podcast

Alejandro Cuba Ruiz
Angularidades

--

Listen to the entire conversation in Spanish with Rafael Mestre on Spotify, YouTube, or other podcast platforms.

Episode #10 on YouTube

Alejandro: Hi Rafael, it’s great to have you here with us in this new episode of the podcast!

Rafael: Thank you, Alejandro, for the opportunity to have this conversation with you.

Alejandro: Thank you for accepting this invitation to answer several of the questions I have prepared for you. First, let me introduce you to those who may not know you yet. You’re from Caguas, Puerto Rico. You have over 15 years of experience in the field of software development, specifically in Angular. You are, quite literally, an expert in this framework, and you not only share your knowledge through HeroDevs but also directly with the developer community through online talks, including ng-conf, and more recently, at the Angular Community Meetup. In fact, a few weeks ago, you gave a talk in Spanish, and I look forward to your next one scheduled in November in the English branch of the meetup.

Rafael: Yes, exactly. I have a few other things I’m working on as well. Sometimes, I move a little slower than I’d like, but I have a lot of work ahead of me. I always appreciate you and all the people I’ve been able to collaborate with to advance in all these ways and share my knowledge. As you mentioned, it’s one thing to have your job within a company to move forward, but for me, it’s also essential to give back and write articles, give talks, and engage with people like you.

Alejandro: There’s no other way to gain expertise if you don’t have the opportunity to distill knowledge because in doing so, you need the whole process of initial preparation. Understanding it in a way that you wouldn’t normally when you’re programming an application, but when you’re offering that knowledge to a broader audience, whether in writing or orally, different things happen in the brain, and you have to examine deep into the official specifications to truly grasp the core concepts, to understand how something works so that you can explain it in a much more accessible and straightforward manner. I imagine you’ve often had to go through this before explaining Signals or some other programming concepts.

Rafael: Yes, definitely. That other perspective of having to convey the information you’ve learned in a way that represents what you know but is also usable by the other person or a group of people for maximum benefit leads to the need for additional research. It’s certainly a path that opens up other avenues of learning and can take your knowledge to a deeper level.

Alejandro: I remember the last time we saw each other was during the sessions at the ng-conf conference in June 2023 in Salt Lake City, Utah, in the United States. One of the most positive aspects of a conference that brings together such a large number of people who are passionate about Angular is the opportunity to socialize and create an enriching network that is relevant to our careers as developers and digital product engineers based on this specific framework. It’s also a chance to discover that we are all ultimately human beings facing a multitude of challenges in our professional and personal lives. Recently, on the Angular Plus Show podcast, you talked about minimizing distractions and working remotely in a familiar environment, as many of us have the opportunity to do today, post-pandemic. Is there anything related to this topic that you may have wanted to mention after that episode that you’d like to share here?

Rafael: Perhaps not something I forgot, as I probably mentioned this while talking with them, but I like to reiterate it, and we can discuss it today for the benefit of our listeners. In my opinion, the best way to minimize distractions is to set expectations with everyone in your life who interacts with you, be it your supervisor or boss, your colleagues, your partner, or your children. They should all have at least some understanding of how you work so they can be part of your strategy.

The way we communicate this is at our discretion. We all face different challenges or inconveniences, but open communication and letting others know are crucial. For example, in my case, I have both a partner and a child, and I like to establish clear signals or time periods during which I say to them, “Please don’t disturb me, don’t call me during this time, it’s reserved for a certain type of work.” In my case, losing focus can be quite costly in terms of time and energy, so this communication is vital to bring out the best in me.

Alejandro: At some point, you mentioned to me that you’re an introverted person. Looking back, it’s surprising to you that you’ve managed to enter this world of sharing content and public speaking. Rafael, what do you feel has supported and helped you the most during this journey to step out of your comfort zone and propel yourself in new directions?

Rafael: I definitely still can’t believe it. I remain an introverted person, and in many cases, it’s challenging for me to express what I want because I hesitate to say what’s on my mind. I hold myself back. Opening up to this world of public speaking and more has opened my eyes and developed those intangible talents, what they call soft skills, of communicating and expressing myself better.

I think what has helped me the most, that drive, is that I tend to be challenging, provocative, and competitive. It might sound like it could be offensive or something, but I try not to use it in that way. You can ask anyone who knows me well that I often look for alternative perspectives. If I learn something new or hear an opinion, I try to see it from another angle to get to know it better. Even if I’m talking to someone about a topic I’ve never discussed with anyone, something that doesn’t interest me initially, I try to gain some interest and learn a bit more.

When I say “challenging,” I don’t mean I like to contradict people or be polarizing, but I try to, in a way, also help others make sure they have complete information. I use those characteristics positively. I don’t try to judge anyone or go against anyone; instead, I combine them with my curiosity to give me that drive to learn, improve, and, as much as I can, help others.

I’m always willing to go out of my way, not just to pursue my own goals but to try to advance the goals of others. What I’m trying to convey is that sometimes we need to use our strengths, even if they’re not pleasant or slightly negative, and turn them into something positive to maximize our potential, which is what I’ve done throughout my career.

Alejandro: That’s a very good recommendation that practically everyone can apply to themselves. Now, regarding the professional development aspect, you must have encountered someone who is learning to work with Angular or returning to the framework after a long time. Where do you generally start recommending that person explore the framework from scratch or after a long period of not touching it?

Rafael: Well, I believe that Angular is currently at a somewhat confusing turning point because we’ve had some fantastic innovations that, in my opinion, are heading in the right direction for the entire ecosystem. But we’re at a point in time where you need to know multiple ways of doing the same things, like Signals and RxJS, class-based or function-based API, flow control syntax, and the existing way with structural directives.

For new users or those returning, this complicates learning a bit because, in my opinion, it’s important during this transition to be familiar with both ways of working across multiple projects or reading outdated documentation and using outdated references.

But getting back to the question, for me, dependency injection and hierarchy concepts are important to learn. Even for beginners, right? The fundamentals transfer, the concepts transfer from another framework if you have some knowledge of React or Vue, there are parallels, but I believe that dependency injection is something new users should tackle early in their learning journey.

As for the discrepancies I mentioned, we are currently at a turning point. In several months, this will be irrelevant because if we look ahead to the future, there will be a way of doing things from this point onward, and it will be extremely easy from that point onward.

Alejandro: Now, with Angular 17, considering all those trade-off decisions between option A and option B, modules are no longer the primary way to create scaffolding from scratch. Instead, standalone components are generated by default by the Angular CLI. Besides this specific functionality, do you have any suspicions about what the next feature in the realm of Angular’s upcoming visions will completely align with a specific architectural approach?

Rafael: I believe the convergence will be towards using more functions and fewer classes. Not everyone in the community — at least currently — agrees with this paradigm. And it may not be a change for everyone, meaning that one thing or the other won’t be eliminated from the framework. But we should be open to the possibility in the future. I think, in general, this improves and simplifies the framework in ways that sometimes those of us looking from the outside don’t fully understand. But everything that happens within and for the framework has some serious considerations.

The Angular team is always very careful not to make overwhelming changes; breaking changes almost never happen, and in the cases where they do, they always provide us with a migration path, usually automated, so we don’t even have to think about it. So, I understand that incremental changes in that direction will continue to occur, such as simplifying workflows to use functions, and simplifying more APIs behind the scenes, making the overall experience easier to achieve.

Alejandro: From an architectural perspective, in your view, what is the fundamental benefit of functional programming? Why are the Angular team and many developers pushing the framework in this direction?

Rafael: Composition becomes much easier. Composing functions and connecting them, whether in a pipeline or various ways of linking one functionality to another, but being able to chain functions or apply functions in a unary way, like what we do with RxJS, makes it easier, and functionality becomes more portable and extensible compared to using object-oriented programming. It limits us a bit when we want to extend. If you want to extend a class, or if you want to extend multiple times, or if the piece you need to extend functionality requires using classes, it can become a bit complicated and repetitive in terms of code. For me, the sole benefit of composition makes the functional path, in my opinion, the right one.

Alejandro: Since this conversation has led us to the typical question in an Angular interview regarding the architectural aspects and programming paradigm, what is one of those "difficult" questions you enjoy asking the most to a candidate during a technical interview for an Angular development role?

Rafael: If the primary competency is Angular and a deep understanding is required, I like to ask about the difference between observables and subjects. From there, we can delve into other complexities of RxJS that are not specific to Angular, but it’s one of the most complex features we integrate, and it’s crucial to know them. So, starting from there, if you know the difference between observables and subjects, we can discuss hot and cold, unicast and multicast. I think, for me, that represents a clear signal of deep knowledge of Angular. I wouldn’t necessarily use this immediately to disqualify a candidate if they can’t answer it, but it’s a good gauge to assess their level of expertise.

In a more general case, if the candidate is not 100% Angular-focused, I might ask about concepts like blocks, functions, closures, and the difference between an arrow function and a regular function. Details like these are generally applicable to JavaScript, which, in my opinion, is the most important tool in front-end development.

Alejandro: Indeed, it’s crucial to ask foundational questions related not just to the language itself but the way the browser interprets, processes, and follows the critical rendering path, which involves transforming what’s written in a text file — which is what we develop in a code editor like Visual Studio Code or WebStorm— and then sending it through networks to the end user who has in front of them, whether it’s on a desktop computer screen or a mobile device, a web browser with a whole array of resources to process that JavaScript file. Understanding this is key, regardless of the JavaScript framework being used later.

One of the topics you generally address is Forms in Angular, working with user input, and the reactive way the data is processed. But here is another duality in Angular: it’s not just about working with forms reactively, but there’s also the template-driven approach. What does the future hold for this duality in an environment where RxJS begins to coexist seriously and stably in Angular 17 with Signals?

Rafael: It’s a complex question, and I believe it’s still uncertain. Depending on who you ask, they might tell you that there’s a third way to handle forms, which is this kind of validation using models that have recently gained popularity. Although it’s somewhat tied to template-driven forms, it has its own unique twist, but we can skip that for now because it’s not…

Alejandro: I would appreciate more details as I have no idea about this third variant you mentioned.

Rafael: Ah, yes. We can certainly delve into that a bit. But in terms of the framework itself, I don’t think that’s something the team is considering because it’s not a first-party solution. It’s another package added, a different way of implementing it, but in the end, it still boils down to template-driven forms, which is what the framework itself provides.

The innovative template-driven method with library-based validation, by Ward Bell.

The Angular team has disclosed various points explaining the limitations of different features of both types of forms. For example, something that many people may not know is that the original intention of the FormGroup was solely to represent the root of our form. It wasn’t meant to be used to access the bits and pieces, the subsections of our form. For that purpose, you’re supposed to use the FormGroup name, FormControl name, and other directives. This was the original intention with which it was created and how it started being used within Google. This functionality evolved in the sense that users found other ways to use it, to put it redundantly. But the Angular team had to adapt and recognize that the subsequent use affects their ability to migrate, create a new API, and all those things.

The Angular team does have these considerations in mind. In this and other ways, the story of the original intention is rewritten, limiting their options when creating a new API, which I understand is the right path. It’s not necessarily that template transforms will evolve or that reactive forms will evolve, but that they converge and there is a way to represent forms in a unified manner.

Maybe in the short term, this means there will be a third way. It’s possible, as we’ve seen in the requests for comments that the Angular team has posted on GitHub, that they’ve talked about some new form APIs, although briefly, it seems that the direction is also towards functional form creation and its new APIs, but all signs point to that being more or less the direction we’re heading in.

Alejandro: In your latest article from your extensive blog of two articles :) you elaborate on a solid idea about how front-end development goes beyond simply aligning <div> elements and instead focuses on more functional aspects to create web applications, which is critical to remain relevant as a front-end developer in these modern times. What competencies do you consider that a developer on the browser side should have nowadays?

Rafael: Well, regarding the blog, I want to talk about that for a moment. I’m rewriting it, so I’ll be releasing the new version with those same two articles only, but the idea is to have a better platform and start releasing content more frequently and in different formats in addition to articles. So, I’m working on it and planning to launch it in the coming weeks.

Alejandro: Let me guess… are you rewriting it in Analog or Astro?

Rafael: Look, I started refactoring the blog in Analog, but I ended up using Astro only because I got too distracted during the implementation with Analog. I kept trying to add features and implement additional things, but there came a point where I had to start over and try to keep it simple with the intention of writing content, not adding features because it’s a platform for publishing content, and if we keep it simple, we can launch the simple product and then add functionality and more features as needed to start submitting content. So the final product will be developed in Astro.

Alejandro: Then you can transpile it in any direction depending on how the whole static site generator industry evolves :)

Rafael: Exactly, I still have options. But returning to the question about the complexity of front-end development, I say this without intending to cause a dispute, but I’ve long held the opinion that the front-end is more complex and variable than the backend.

The backend only runs in a predictable environment that the developer or someone on the team selects and always executes in the same way. On the other hand, front-end development has complexities that arise from trying to predict how the user will call, invoke, or use it. In my opinion, this is one of the complexities that make it more challenging than backend development.

In terms of competencies, we not only need to understand visual aspects, as I mentioned in one of those posts where I got a bit upset with the other person. Understanding visual aspects is a part of it, but we need to know about other details like layout, responsiveness, accessibility, inheritance, and HTML to establish hierarchy and usability, among other things. At a higher level, we need to manage state, communicate with APIs, persist data, and know about performance and compatibility.

In short, there are many details I’m leaving out, but there are many skills that need to be mastered to work in front-end development. At the end of the day, depending on the particular role, you can focus more on one of these areas, but it’s good to learn everything, and it’s quite challenging.

Alejandro: What has been occupying most of your engineering time in recent months?

Rafael: Well, personally, I have a lot of interest in how the web platform develops over time. I’m always keeping an eye on what’s happening in the world of HTML, CSS, and JavaScript. But I have a tendency towards design. I mean, I like to understand how layout works, and which properties influence each other.

There are quite advanced concepts related to these areas of CSS and HTML, but they have their own complexity, and sometimes we overlook them. For me, these competencies may not necessarily be applied professionally all the time, but they are the things I’m most interested in understanding, and I always pay a lot of attention to them and stay informed.

Alejandro: Fifteen years ago, these foundational web technologies were probably the only thing much of us knew from the front-end perspective, but today along with the JavaScript framework and advanced front-end tooling and processes, HTML and CSS continue to evolve at a fast pace. How they are interpreted in the browsers seems truly magical. The development process where you can turn visual requirements into code that can then be displayed to the end user from a visual or even aural perspective, depending on the platform, is very rewarding because the effect is immediate. You don’t have to wait for months for a hypothesis to become an experiment that you can measure. In this discipline, we are able to measure the rendered results all the time.

Rafael: Absolutely.

Alejandro: The stable version of Angular 17 is set to be released in a few weeks. Today, anyone can install one of the pre-releases that are already available. Is there something about these features that really excites you and you feel will be crucial to learn in the medium-term future?

Rafael: Yes, I have my own opinions, but in general, I believe that anything that simplifies authoring for users, both existing and new, is a win. The functional APIs they have released and continue to introduce, such as directly binding route data to inputs, eliminating NgModules to simplify the dependency mental model, and Signals that represent a real architecture, are all important.

These changes not only simplify our work but also improve performance almost automatically. They also make it more attractive for other developers. In the future, we won’t have to do double imports, which is currently a point of friction compared to other frameworks, and there are ongoing efforts to eliminate it. For me, the fact that the Angular team always provides a path to migrate and update automatically is the icing on the cake.

Alejandro: One of the things I’ve noticed from your blog, in the About Me section, is that you don’t play video games, you don’t use Facebook, and you don’t watch televised contests. You also probably don’t use Instagram or TikTok. What’s your favorite way these days to spend your leisure time, that free time we have to engage in other activities?

Rafael: Well, the reality is I don’t have much leisure time. I spend a lot of time with my family, sometimes out of obligation, and most of the time I do it by choice. We have our own set of challenges that consume a lot of our time, but I do it gladly. We do activities together like watching TV, series, and many other things without leaving the house. Sometimes we play Minecraft or similar activities. I don’t play video games, I don’t have a particular interest in them, but I do engage in short-format activities, as long as they are beneficial for the family. I also make time for that. We go on outings, visit relatives, and explore Puerto Rico island on some occasions. As for the basics, I try to read and go to the gym.

I don’t have specific hobbies because it’s hard for me to stick with something that doesn’t have a continuous novelty factor. This is related to my attention deficit, which affects me personally and professionally, but I do my best to cope with it, and it doesn’t pose a significant problem. In my free time, I also engage in extracurricular programming, but I think we all do that from time to time.

Alejandro: What’s one of the side projects that takes up your time these days?

Rafael: I’m working on launching the blog, which I hope to have up very soon. I’m also working on projects with community members like Nelson Gutierrez and Alfredo Perez; we’re working on a few things that will go public soon. I’m also contributing to open source; I’ve done some work with Analog and Astro.

Alejandro: That's awesome! And you mentioned earlier that you like to read — something that many people nowadays don’t have much time for because they spend it on TV or apps explicitly designed to engage the consumer profoundly. In the case of reading, what are you reading… fiction books, non-fiction? What’s the topic you usually try to cover?

Rafael: Usually programming topics because that stimulates my mind and keeps me engaged. If I try to read other formats, I can carry it out, but I don’t have the discipline or the mental state to complete it, and I don’t want the frustration of leaving something half-done. So I prefer to pick something I know I can finish, like books on programming, engineering, and management.

Alejandro: I’m passionate about everything related to non-fiction… topics related to science, astronomy, and engineering. Because one also invests so much time in software engineering and extracurricular programming books that I try to balance that reading activity with quite diverse topics. By the way, is there any specific topic we haven’t mentioned during this conversation that you’d like to comment on before concluding the episode?

Rafael: I always like to encourage people who listen to me to open their minds when it comes to growing professionally, personally, as a content creator, etc. Don’t be swayed by others’ experiences. There are many ways to succeed, and you should choose something where you can be consistent, productive, and see your own results.

If you surround yourself with people who support you and help you find that path, so much the better, much easier. And it’s very important to show weakness and vulnerability. I mean, you don’t have to know everything, and you shouldn’t be afraid to say you don’t know the solution to something. I always grow when I allow myself this, and I think it’s beneficial for everyone.

Asking for help, asking a question that you think is a dumb question — maybe someone else has the same question, and indirectly you’re helping and strengthening yourself through that weakness to grow as a person and in your career.

Alejandro: You couldn’t have described it better. In fact, there’s no other way to learn except by exposing oneself and having that sensitivity to ask. In the end, one doesn’t know everything, nor will one ever know everything. "The more one knows "— as Aristotle supposedly said — "the more doubts one continues to have." As one goes into a particular specialization, that knowledge gap continues to widen, and it will be impossible to fill.

It’s been really enriching to learn several things from you. I’ve gained insights into the third model of approaching forms in Angular. I've also learned a bit more about what’s coming in the next and future Angular versions down the line, dealing with those forks that have occurred throughout the Angular history and how possible convergences will align them into a simpler experience for front-end developers. So thank you again for being here, and I hope we can meet again soon.

Rafael: Gracias Alejandro, ¡un placer compartir esto contigo!

Alejandro: ¡Muchísimas gracias! ¡Chao, chao!

Check out who is getting interviewed for future episode releases at https://twitter.com/angularidades.

Screenshot of Episode #10

--

--

Alejandro Cuba Ruiz
Angularidades

<front-end web engineer />, Angular GDE, traveler, reader, writer, human being.