Interview with Tomas Trajan, GDE and Angular content creator: It’s all about choosing the best tool for the job

Tomas Trajan Angular interview cover
Community Angular

Agiledrop is highlighting active members of different open-source communities through interviews focusing on their projects and initiatives, as well as trends and innovations in the digital sphere.

Meet Tomas Trajan, GDE for Angular, active Angular community member and co-organizer of the Angular Zürich meetups.

1. Please tell us a little about yourself. What’s your role in the Angular community and what do you do professionally?

My name is Tomas Trajan, I’ve been a GDE for Angular for a couple of years. I’ve been very active in terms of creating written content; my blog on Medium had about 3 million views in total, for example, with many articles which people enjoyed, so this is how it started.

I’ve worked on a lot of open-source projects, the most popular one being the Angular NgRx Material Starter with more than 2000 stars on GitHub.

Besides that, a couple of other open-source libraries, like Angular Extension Model or more lately Angular Extensions Elements, which enables you to lazy load Angular elements and any other web component in an Angular application.

I’m also one of the co-organizers of the Angular Meetup here in Zürich, which started as AngularJS Meetup by Carlos Morales and Gion Kunz. It had many events, then there was a bit of a pause and we rebooted it as an Angular meetup about a year and a half ago.

We’ve had quite some cool guests and content, but then unfortunately with the Corona situation it’s not so easy. But I hope that once this is resolved in one way or another we can come back and do this again as an in-person event, because it’s really nice to bring the community together.

That’s what I would say for the community. Professionally, I’ve been based in Switzerland for the past 6 years where I am helping various enterprises on their projects, usually with Angular.

So, I’m contracting with various enterprises, but lately I’ve also started doing workshops, so there are multiple workshops offered, some more basic where I get into Angular and front-end stuff, and some have more advanced topics like state management with NgRx, reactive forms and stuff like that.


2. How and when did you first get started with software development, and more specifically with Angular?

After high school, I went to university which I dropped from after a bit over a year, after attending a functional programming class where they were just showing us, like, Haskell on a blackboard without much commentary and I thought, ok, this is not really working out.

So then I left and started doing web and graphic design, then by learning I slowly started getting more and more complicated things done, going from basic websites to simple web applications with PHP, then slowly into Java and then back to web development.
In terms of AngularJS, I remember it was around 2013 and I was working on a project for a company in Slovakia where they wanted to create an application and use this fancy new thing called AngularJS.

And I remember checking the documentation website, where there was this example for internationalization, like “one beer, two beers” - “jedno pivo, dve piva”, and I thought, ok, maybe it’s because of the IP address, but it caught my eye and I’ve basically been working with Angular since version 1.0 or even 0.9. Also as it turned out, that beer thing was hard coded as far as I understand, so maybe cheers Misko?!


3. How has working with Angular and being a part of the community affected your life?

I would say it has changed my life completely, it opened so many doors, like being able to go to those events and meet all these people which I would never have met otherwise, and broaden my horizon, meet different kinds of people from different places, see how they think and what they do, learn about them and their cultures.

For example, I was at a conference in Malaysia, in Kuala Lumpur, that was totally something different. It was very nice to get these kinds of opportunities to visit different places; it’s totally different experiencing them as a guest of someone who’s from there than as being there as a tourist.


4. How did you see the software development industry, in particular Angular and other FE frameworks, evolve through the years?

Back in the day, before front-end frameworks, you just had vanilla JavaScript, which wasn’t anything like today’s version, it was a weaker version of JavaScript, probably not even ECMAScript 5.

And you had all these browsers which were not compliant with each other, so it was jQuery everything, you had jQuery plugins and some animations, and you were really happy if your dropdown moved smoothly and that was amazing. But that’s a different world, right?

Then slowly people started taking front-end development more seriously because they wanted to provide a richer experience for the users and also reflect the growth of the internet and more serious applications. 

And then there was this wild period - there were these jokes that every two weeks there was like a new front-end framework or library, and it was kind of true, so many names and flavors and everything.

But as it turned out, AngularJS, React and Vue, they kind of stayed and the others kind of fell behind. Maybe Ember is still alive and kicking, with this small niche where people just do Ember because it’s very stable and, why not, I mean, it’s great.

But one could say that in the end it was Angular, React and Vue. And the way they started was actually not that serious, but that also changed over the years as they tried to adopt TypeScript more and more, and with roadmaps, release cycles, long-term support, versioning, none of this existed in the early days.

And now it’s kind of expected, like, if you’re using something in an enterprise organization, you want to know what you can expect from the technology, so it’s not just this special side thing, but the whole organization actually using these technologies to achieve so many things, which is great.

Maybe a critique of that could be that there’s less experimentation because it’s more stable, but then again there is still a lot of stuff going on, such as Svelte for example, which has no runtime which is nice for the bundle size.

And one could also say that these things kind of converge - so, all of these big players, they have the concept of a component, which is some template, some styles, some concept of change detection or rerendering. 

So they converge on these best practices, and maybe, okay, it’s done a little bit different in React than in Angular, but in the end, is it that much different?

For example, I was checking the tutorial for Vue and, yeah, on the first page it’s just ok, include a script, then create a new Vue app, mount it to a node and it works. But then if you go deep enough, it’s suddenly, ok, let’s use TypeScript and component decorators, and now basically it looks exactly like Angular.

There’s always the question of, like, what is the size of your project, what are you building. Is it small? Or do you have an organization with 20 teams that are going to build 100 applications and you want them to look similar so you can switch people from one project to another? It depends.

But I typically work for big enterprises, so I like Angular; you can use it for anything, of course, but where it really shines is for big organizations. 

Applications can be written and structured in the same way, there’s so much convention, there’s so much help from the Angular CLI from schematics. It can always look the same, so you can easily feel at home when you switch from one application to another.

Our team is currently taking care of more than 120 SPAs and 30 libs, and if everything had a different stack and use different libs it would just not work, right. So, it’s all about choosing the best tool for the job.


5. What are some of your favorite projects and initiatives in Angular?

Recently, like spring/summer this year, Angular had a crisis of public opinion, or whatever you may call it. There were some articles calling stuff out, which was valid of course, and it turned out that it was probably for the good, because then the Angular team released an official roadmap for the first time.

I really think that the community’s looking forward to better typings for the reactive forms module. Because reactive forms are amazing, but it’s true that it’s not so straightforward to have type safety with them, this is not really in sync with the rest of the ecosystem, so that’s something many people are looking forward to.

There was of course also this huge migration to Ivy. First we had AngularJS, then Angular 2, and Ivy’s essentially Angular 3 as it’s basically a rewrite of the rendering engine, but in a backwards compatible way.

Of course it’s a smaller change than from AngularJS to Angular, but it’s still a rewrite, it’s a fully new rendering engine. I’m really glad they did it in such a non-breaking way that it’s really possible to evolve the codebases and just move on with all the better performance and smaller bundles, that’s pretty amazing.

What I also really like is the Angular CLI, which for me is the most epic thing provided by Angular, the other frameworks definitely don’t have it so streamlined.

I very often use schematics to scaffold stuff like the lazy features of components and services or even something third-party, so this is a huge thing for me, a huge timesaver and a huge win for consistency.

You also get stuff like free out-of-the-box differential loading, this is another huge thing which we actually use because we have internal use cases and external ones for the public. 

So, internally we know that we only use Chrome, so we have shorter build times and we ship less code. And externally, of course, we support many many browsers; this is something which we didn’t have to solve as it was just solved out of the box.

I also really like how they focus on performance. Another great feature of the CLI is Budgets, which is basically a test for the bundle size built right into the CLI. So, if you import something by mistake and your bundle size suddenly gets bigger, you’ll get a build error, so really great tooling out of the box if you ask me.

These kinds of things help you deliver really good value to users - we all know that they want to work with fast applications, right, and you just don’t want too much load time. I really like all these small things coming together to help you develop epic stuff with less effort.


6. Finally, what’s the number one big thing for you this year in the sphere of front-end development?

I’m really looking forward to Webpack 5 because it should bring this new feature called module federation. Most likely we won’t really use it as application developers, but the people who create the tooling like Angular CLI or Create React App or some Vue CLI can use that to further improve the tooling.

So it’s something which should enable to basically share rendered code between various sub applications, for example for microfrontends. 

If you have multiple applications on your page it looks like one application but it’s actually many, for example a couple of Angular applications that could in theory share Angular core, common forms and stuff. So, the more you decouple your development, the more flexible you are.

Also, the more applications you have, the more copies of Angular or whatever library you’re using you would also have on your page, and module federation is something which can solve this.

But even in the context of a single application, let’s say with Angular for lazy loading, the tooling is not perfect. It cannot really always figure out what should go to lazy and what to eager bundles, so maybe this will lead to even more savings.

And another thing that’s important to point out is that whenever we speak about there being less code for the users, it’s also less for the developers. Because, if you think about it, developers have to rebuild their applications like a hundred times per day when they make changes, and the less code there is, the faster the builds and tests.

So, any kind of feature which can promote this and make this even smaller and even faster and requiring even less code - it’s these kinds of things I’m really looking forward to.