Before Flutter Warsaw #15, we interviewed our speakers and asked them about their development path in Flutter, what was the most challenging for them while using this technology, and who is their biggest Flutter inspiration.
💙 Thomas is the Flutter and Dart GDE. He could be seen almost as a legacy system. Being almost 30 years in this industry led him to a lot of different technologies, like C++ with MFC, C#, microcontrollers in C, and currently mobile App development with Flutter and Dart. What only a few people know is that he was also a professional magician and bakes his own bread.
[Mateusz Wojtczak] What is your background as a developer? I’ve been seeing you in the community since Xamarin times :) Tell us about your most bizarre/interesting experience as a developer you’ve ever got, and your developer story?
[Thomas Burkhart] They often joke that I am a legacy system in the Community because I am now almost 30 years in IT with some "interruptions". I started really early with Commodore 64. I started writing programs on the Commodore Amiga. From there on I did different things: I did C++ programming at this time on Windows with the MFC Framework. I did some embedded programming microcontrollers in C and C ++, which was quite fun, and also I tried Xamarin with C# for about 2 years.
I did some projects there and finally, actually, I had some long time out after the Xamarin part. When I got back I wanted to continue on a Xamarin project and optimistically I updated Visual Studio and updated all packages and after this nothing worked anymore. 2 hours later I was still not able to build anything – I was really pissed off and it was exactly the same time.
The same day when Flutter announced the open Beta. And so I downloaded SDK and had my first app running in about 15 minutes. And I thought "Hmm.. This looks interesting" (laughs). And from there on there was no way back. It’s just too much fun and it does what I want to do. I like Dart as a language. I never did any web stuff. I have to say it because I despise Javascript. I need typed language. I never got into the web stuff. That’s the story.
So what about this most bizarre developer experience you had?
The most bizarre one? Ugh…(thinks) I just think if I have something that could count under this description. It’s maybe not so bizarre but also a very interesting experience that in one of our last projects for an American startup – which I did with 2 other developers. The startup at the beginning said: "OK, I want the idea to take off so fast and our solution has to be scalable." With this in mind, we said "OK, let’s go for what was in fashion at this time." We go full microservices on Microsoft Azure, Cosmos DB and connect gRPC to our App. Which actually worked, but the problem was that we took way too much time.
The whole communication infrastructure between the microservices was too much and in the end, the startup ran out of money. So since then when somebody asks me what I would recommend for the backend – I would always say go unless you’re like Netflix with a really big team and a lot of budgets. Start with a monolithic web application on the backend. It can be added up to the cloud or some cheap virtual server.
Because if your idea really takes off then you still have time. You can see how fast your user base grows and spend more money on faster virtual machines. You can cover quite some time between it. If you really come to a million concurrent users then it's time to rebuild your architecture. That was really interesting because interestingly in the meantime if you follow blogs and social media – the trend goes away from microservices again. A lot of people say "No, don’t do it" (laughs). So that was quite interesting.
You chose RVMS as a topic for the meetup. Why this and not some of your libraries, e.g. get_it? I think get_it is the most popular thing that you could be known of. Why not?
Actually, you will get your part of get_it in this talk (laughs). But to be honest, I am very happy to have possibilities to talk about this, because if I look at conferences at the last time, and applications I only see Provider or Riverpod. I really love Remi – he is a really great guy but I just think that people should also see alternatives to what you can do.
That’s why I say RVMS. One of the things I want to show people is how they structure the whole app because state management packages only address a small part of the thing. And then I want to show people what they can do with a combination of flutter_command and get_it. What can the app look like?
About get_it: why service locator? Isn’t it widely considered an anti-pattern? Why did you do this? I also saw the conversation on Reddit on r/FlutterDev one day. I think that were early times of get_it, and already there was a bit of flamewar about "to use or not to use service locator". So why did you decide on that?
OK. First of all in my opinion this whole discussion that sees the locator as anti-pattern is a purely academic discussion. Because in the end what counts is shipping an app and service locators do their job very very well, they are easy to understand and Martin Fowler has a very interesting article blogpost on service locator and he makes clear the point that it's not an anti-pattern.
And so the reason why I wrote a get_it in the first place, was that when I started with Flutter and I tried to get InheritedWidgets to work I wasn’t able to do it, and actually, I wasn’t the only one at this time. Brian Egan also said he didn’t really manage to get it working in a way that it updated the UI tree automatically. As coming from Xamarin I was using Reactive UI - RxUI - and I knew the service locator Splat and also Dart has streams, I know streams from reactive UI, so let’s create a service locator and I’m done, yeah? (laughs)
And I can go from there, so it was pretty easy and also what would we try if not the service locator? We have things that are bound to the build context in a way. They are all almost also service locators, yeah? It’s not much different, and because we don’t have reflection, real IoC containers are not easy to implement and in my opinion. IOC containers have too much black magic, especially if you try to explore the codebase, and you want to know – oh, where does this come from? It’s easier with the service locator. I know some people still think it’s a bad pattern, but it works! (laughs)
Another question is from another domain I was thinking about the meaning of your nickname and recently have found it. Could you elaborate on that? :)
You mean Escamoteur? The thing is I worked for about 4 years as a professional magician. And Escamoteur is a very very old word for a magician. In Germany, in the 1890’s it was totally normal to say: "An Escamoteur is coming!"
I thought it was a French word because I actually searched for it.
It has a French origin, that’s why. But even there it’s not totally clear where it really comes from. But it was said in Germany and Austria it was a totally normal word at this time for a magician. And actually, I had a business card that had only written "Escamoteur" on the front side with my name and nothing else, and on the backside - the address. So it’s a little bit like the card from "Men in Black." And it really worked well because I got the question almost every time: "What’s this Escamoteur?". People could remember it really well after this.
You are a great contributor on Github, with 306 contributions in the last year, a lot of libraries, and create issues, and I have a question. Do you also contribute to the Flutter repository? If so, why, if not, why not?
Actually, I did so in the past already. I made an extension to the dropdown widget, a dropdown box for example, that makes it much easier to handle and two or three other things. In recent times I haven’t done much in this area because my own packages have gotten way over my head in the meantime. And, um, luckily I’ve got some co-maintainers now for some of them. And to be honest, one of the things that I really don’t like about contributing to the Flutter repository is the number of tests that you have to write for everything. And Hixie is extremely nit-picky with every wrong space or comma (laughs) and so I didn't do much at the moment here.
What are your plans for the future regarding Flutter? Any ideas for libraries you can uncover for us? :)
Actually more ideas than I have time. I have an unfinished package for creating Forms and one that will allow you to show dialogs from non UI layers although for the latter one I still have to have a closer look at if Navigator 2.0 might make this easier. Also, I want to start a video channel to show how to use my packages.
What’s the best library you’ve discovered lately? :)
I found several packages interesting. There is sa_liquid which creates awesome Lava lamp-like images. Also, device_preview is amazing.
One feature you crave the most in Flutter or Dart is…?
Unions are Dart to make Null safety really usable.
If you want to take part in Flutter Warsaw as a speaker just fill the form below: