- [Leo] Welcome to another episode, Empower Apps. I'm your host, Leo Dion. Today we have with us Jeroen Leenarts. Hey, Jeroen or app voice, I should say, how are you doing? - [Jeroen] I'm great, thank you. And quite a nice pronunciation on my name there, Leo. - [Leo] So you're my third Dutch guest. So I feel like, even though let's be honest, Antoine and like Donny are not exactly her names to say for an American like myself, but still, you know, I'm getting better at it.
- [Jeroen] Yeah, it's the thing with my name is, and also I notice that online, it's not a very marketable name outside of the Netherlands, just for clarity Jeroen Leenarts, it basically means Jeroen it's the holy degrades. It's the same as Jerome and my last name, it's the, root of it is that I'm the son of a doctor. So that's when in the- - [Leo] Nice. - Napoleonic, in the Napoleonic age, they had to like give out last names to people- - [Leo] Okay. - [Jeroen] And somebody came up with that.
- Really, that's super interesting. That's so funny. That's like people coming to Ellis Island, and like the guy not knowing how to pronounce it and going, ah, you're Smith, you know? - [Jeroen] Yeah, stuff like that. - [Leo] Yeah, do you ever get called Jerry by any chance? - [Jeroen] Yes, a lot. And, they call me Jerry, Jerome, Jay. That's also very convenient for people. (chuckles) - [Leo] Yeah, even though the J is silent, ironically. - [Jeroen] Yes, mostly.
Yeah, a Dutch person would feel that they're pronouncing the J- - [Leo] As a Y, right. - [Jeroen] Yep, yeah, - [Leo] Yeah, yeah. Well, I'm so glad I was able to pronounce your name today. So we're doing a little experiment today. I was on your episode yesterday talking about my year interview. And now I'm having you on to talk about year in review, and how launching this new podcast has gone. And how has development gone as far as 2020 is concerned.
So, first I'll let you introduce yourself, and your podcast of course. - [Jeroen] So, yeah, my name is Jeroen. My podcast is AppForce1. In my episodes, I try to give people a short overview of this week's news in iOS land. And on top of that I do more topical episodes where are focused right now on a specific person. So that's an interview with someone. So currently I release two episodes each week, one shorter and one a bit longer. And yeah, I'm still trying to find my voice.
But what I do notice is that people have sort of an appreciation for the short format because of the content that they're getting. And for the long format, it basically involves the persona that you're interviewing. That's, they bring a group of people that are enthusiastic about this specific per and then, well, as a podcast, I hope that some of those listeners will actually stick on my feet and start listening on my podcast.
- [Leo] How did you decide to just go ahead, and start a podcast this year? - [Jeroen] I mentioned that in my interview with you I think. I did a conference type talk for the Dutch CocoaHeads. That's a meetup organization that I also run. And I was doing that online, and we were pre-recording it. So I was, for my sense, I was talking to a wall and it was driving me crazy.
It was so hard for me to focus on my content, and to be able to have a decent, so to have a decent flow in my talk, because I'm one of those people if I'm presenting, I really take the energy from the room, and I really look into the room to see if there's any adjustment that I need to make in my presentation, and in my content, and in my delivery, and I couldn't do that. So I was getting crazy and I was thinking, okay, so this is something I need to deal with.
And somebody told me, "You're taking the Dutch approach Jeroen." So what I did was, do it more, and do it quite a lot more often. So the idea was, let's start a podcast cuz then I'm just talking to a wall a lot more with an imaginary audience. Of course, you hope that the audience is actually real, but that's actually the process that I went through. - [Leo] So you still run a CocoaHeads group, correct? - [Jeroen] Yeah, I've been running the Dutch CocoaHeads for over seven years now.
I sort of rolled into it, and we've been doing in-person meetups. And sometime, I think over two years ago, we started live streaming the events because hey, why wouldn't we, just for fun? Cuz we always had people that were not able to attend, and we wanted to record the presentations anyway. So why not live stream them because all the gear there we only need a wifi connection. Then COVID rared its ugly heart. And then we were like in this situation, okay, what do we do?
We can stop like a lot of meetup organizations have done over the year or we can try to adjust, and see what we can do now, and we ended up with a online format that we're trying to develop to get the more social interactions in there as well. But right now it's a monthly live stream on YouTube. And then the videos are then edited afterwards, and then published on YouTube as well. So that you have like a nice, sweet, good video presentation of the person presenting.
And the biggest benefit of our speakers is actually that they now have a video available of them presenting a topic that they can actually bring to a coffee paper on any conference that you want to subscribe to. - [Leo] Yeah, I've tried launching a CocoaHeads group. I tried last year, last year or two years ago. It just, it was way too difficult. So I said, I actually hosted it at an Apple Store. We do have an Apple Store in town. We're small, but we're not that small.
And that was just a really interesting experience. But yeah, I actually spoke at a CocoaHeads this year, CocoaHeads, Hamburg. When I wanted to practice a talk, I find like public speaking at a meetup, especially CocoaHeads is a great way to practice. - [Jeroen] Yeah. - [Leo] How has it been like organizing, and maintaining a meetup group this year? - [Jeroen] Well, surprisingly easy actually, cuz it involved a lot less traveling for me because I live at the other side of the country.
So if you're in the us, you say, other side of the country. Well, the Netherlands it's like- - [Leo] Right. - 120 kilometers then you're- - [Leo] Right. - [Jeroen] At the other side. (Leo chuckles) - [Jeroen] But still it's a one hour to two hour drive depending on traffic. - [Leo] Yep, yep. - [Jeroen] So for me personally, it's been a lot easier once we made the decision, and the benefit that we already had was that we were already having sponsorship agreements in place- - [Leo] Nice.
- [Jeroen] Because the format that we have had with the in-person meetups is that, we would be onsite at a company, and then this company would host us so that it involves food and drinks, and then providing one speaker, and we would be providing the other speaker. Of course, that whole format fell away, but we had sponsor agreements in place.
And we had like, well, we have a, it's not a big bank account, but enough to be able to spend some money strategically, to be able to continue, just buy some services and buy some hardware, actually be able to execute correctly in the online format because it did take some getting used to for us. But the end result for us was actually less effort than the in person meetups.
(suspicious music) - [Leo] I wanted to let you know about the great experience I've had with this host hosted on transistor.fm. It's been absolutely fantastic and really reliable. If you are thinking about starting a new podcast, I highly recommend taking a look at Transistor. Now I know there's a lot of free services around, but their rules about how long it takes to publish a show or doing any sort of like ad insertion, things like that are gonna affect the quality of your show.
But if you wanna do something serious for your business, I would definitely take a look at Transistor, and spend a few bucks there. You can actually try Transistor for free for 14 days. Give it a shot, try that new podcast you wanna do. It's definitely gonna be something worth your trouble.
Transistor is fantastic when it comes to building up something for your business or something you really want to grow long term, I think Transistor is gonna be the host for you that really hands off about the content and what they do. And they have a really great guide. I'm gonna share to you about how to start a podcast. You may be thinking to yourself, well, 2020 might not be a great year to start a podcast, but in fact, that's not true.
There's been a lot of recent reports and I know personally for myself that my podcast has grown this year, even though folks aren't exactly commuting. So take some time, go to transistor.fm, and use the code, Empower Apps, just go transistor.fm? via equals Empower Apps, link's in the show notes, and give Transistor a shot for 14 days. And let me know what you think. I think Justin and John have done a great job, and they continue to do a great job building that platform.
And they have a lot of great hosts, folks like Cards Against Humanity and Kickstarter Games, folks like that who really know what they're doing with their podcast. That's where they go to. They go to Transistor FM. Thanks Transistor for helping host this show, and use the link below to give it a try for 14 days. (suspicious music) How about like getting speakers? Did that work out for you?
- [Jeroen] Yeah, it's easier because we can now source speakers from the entire world instead of only the Netherlands. And with that mostly speakers from the Netherlands in the Amsterdam area because getting somebody from the other side of the country into Amsterdam is again the traffic thing. - [Leo] Right. - [Jeroen] But now with the online, there's yeah, we only need to do a shout out on Twitter, and we have like tons of speakers willing to have a go at it.
And one of the challenges that we do have is that we want to make sure that new, aspiring speakers get a chance. - [Leo] Yeah, that makes a lot of sense. - [Jeroen] But you don't wanna have a series of five, fresh new speakers without any experience about doing a series of bad presentations is bad for your listenership because of or bad for our audience cuz they won't stick anymore.
And that's been the biggest battle for us over this year that we've seen that the number of live viewers have been dropping, but the of views on the videos once they're edited, they've been rising significantly. So people are watching the content on their own time or on their own terms instead of being engaged in the community.
And that's actually also a big part of what we want to facilitate people networking because people that get in touch with each other, they can create new things, help each other and make sure that everybody ends up in a better place at the end of the evening. - [Leo] Do you have like a slack group, I would assume for CocoaHeadsNL? - [Jeroen] Yeah. - [Leo] Okay.
- [Jeroen] Yeah, one of the benefits that we have as CocoaHeadsNL that we've been incorporated as a nonprofit, and because we're an efficient nonprofit in the Netherlands, we were able to get on the free tier with slack actually. - [Leo] Nice. - [Jeroen] So slack is slack is sponsoring us with a slack account, and I think we have about 300 active people on there.
- [Leo] Nice. - And yeah, you do notice that it's a big Core group of attendees with the meetups that help us keeping the community going. But I do miss the in-person meetups a lot. - [Leo] I agree with you completely. Well, I missed conferences actually, I mean, that's really what it is. Like it's really hard to network at a conference. I think a lot of people don't feel familiar with it.
I've become savvy with slack over the last few years, but like a lot of people aren't comfortable with it as far as networking is concerned. And also there's like, I don't know what platforms you you were using, but there is quite a variety of different platforms- - Yeah. - This year that have sprouted up for doing remote conferences. And they all have their different idiosyncrasy in order to like really network. And it's doesn't, to a lot of people it's it's feels uncomfortable.
- [Jeroen] Yeah. - [Leo] In a lot of ways. - [Jeroen] With CocoaHeads right now it's a live stream, and we invite people to join us on slack cuz we have unlimited availability there for people to join. But we are still looking for ways to create more interaction between our attendees because on slack people are just posting the questions, and then once the event is over, the event is over. And the biggest feedback that we're getting from the core group of attendees.
So that's the people that's been with us for a long time is that they actually they actually miss seeing the familiar faces mixed in with the new faces. And, with CocoaHeads now what's always been the case is that it's always been a very welcoming group.
So if there's somebody new in the evening, it's not that they would like be like harassed by the other attendees, but there was always somebody that would step up to this person and say like, hey, it seems like you're new here and how's it going? Where do you work? What are you doing? Just getting like the interaction going, and making people actually feel comfortable within a new group of people.
- [Leo] Yeah, like I've noticed with some of the conference platforms, they have some sort of way to just like take a random group of people like zoom does this right. Where you can take a random group of people, and be like group 'em up, and they can start talking to each other. So I don't know if like you've looked into that or even just doing zoom, and then posting the recorded video. - [Jeroen] Not really, but I did have some experience with iOS Dev Happy Hour.
So that's the- - [Leo] Yes - [Jeroen] That's the thing Alan has been doing with like - [Leo] Yep, yeah, I saw you there, that's right. - [Jeroen] Yeah, it's like they had like over 300 people at the last edition. - [Leo] Yep. - [Jeroen] And it was so awkward for me the first time that you just drop in a room with basically eight random other people that you don't know in way or form. And then just getting a meaningful discussion going, it's so awkward.
- [Leo] It's really awkward, and it takes a while for you to get that comfort level that by the time you get it, it like becomes really difficult to like. Okay go, we got five minutes left, finish, finish the conversation. Yeah, I know what you mean.
- [Jeroen] Yeah, so yeah, but we're looking into that and slowly experimenting, but I must say that in this regard we've been more in observe thing role instead of like taking action because we were hoping that this whole thing was over by summer last year, but then (chuckles) stuff went downhill (chuckles) from there and we are at the situation that we're right now. And, but fortunately there are some vaccines being rolled out across the world.
- [Leo] Yes. - [Jeroen] So maybe next summer we'll be able to do more in-person things again. - [Leo] So speaking of next summer, what is your plans for this year as far as 2021 is concerned? Like or how are you gonna deal with, you know, cause we like, even with these vaccines out, like it's a little tough to say, oh yeah, like by summer everything is gonna be great. Like we don't, who knows, right. There's no guarantee.
So that's, I think like the biggest challenges, how are you gonna deal with that in this year? - [Jeroen] Yeah, well, I divide my time across three main areas of responsibility, work wise of course. I have a day job and I work with Ahmire that's a big Dutch insurance company. And we've been working remotely with, I think 15,000 people from March, 2020, and most likely will keep on doing that into the next year for quite a long time.
And they also actually announced that working from home three days a week is the new normal regardless of what the new situation will be once the coronavirus has been dealt with. - [Leo] Are you happy about that? - [Jeroen] Yes (chuckles) - [Leo] Okay, okay. - [Jeroen] Because my previous job has been working remotely most of my time.
And the hardest part that I find with going into an office five days a week is just dealing with family life alongside that because I was used to being able to go downstairs, and help my wife and help my kids when needed and to be available at those busy hours in the home life. - [Leo] Yep. - [Jeroen] And I've been able to do that a lot more is a whole Corona crisis again, and I'm happy that they're making a shift towards more remote work actually.
Then next to that, there's the CocoaHeadsNL which is, it's not a big effort, it's once a month, a meetup and then some organizing. The meetups are in-person, but everything else around that has always been remote. So that's not a big change really. And then there's the AppForce1 thing that I'm doing, which is a little bit of contract work, a little bit of podcasting and hopefully a little bit of product work.
And product work is going to be the biggest development next year cuz I'm actually writing a book on being a lead software developer. And that's something that is based in my experiences at my day job, cuz at my day job, I've actually been put in a place that I'm now the lead iOS developer on the team of about nine iOS developers. And over 2020, I really had to move into the role. So instead of being just a senior developer, I now had the lead role on top of that.
And I've been struggling with it because your day looks a lot different if you have to tag lead on your forehead, and I'm now finding ways to actually deal with the onslaught of responsibilities that you have as a lead developer. Cuz you have to look out for your team, you have to coach your team members, you have to be available to make decisions. You have to actually consult and coach your business sponsor and all these different responsibilities. I'm learning on that.
And my lessons on that, I'm trying to put in my book. - [Leo] Do you have a blog by any chance? - No, I tried that filled that and (both chuckle) didn't try that again. I've noticed that the shorter form writing is not something that I, I dunno it's not something I have the patience for. - [Leo] Yeah. I tried it, but it's very hard for me with blogging to get on a rhythm like Antoine has been doing so wonderfully over the years cuz he's very successful with his blog.
And, if I just see what he's doing, it just makes me nervous to have to write 800 words every week and have it in a decent quality and then publish it. That's, I dunno for me it looks like a task, and it's not something that I'm very passionate about, and that I feel like it would give me energy. - [Leo] Well, I'm just curious, transitioning, like jumping right into writing a book without any writing being done.
Like, are you planning on just like writing a book from scratch and going that route or are you thinking like, oh I'm gonna test some blog posts and then go ahead and post. like, okay then turn those into a book. - [Jeroen] No, it's really, the premise of the book is really, I'm writing the book that I wish I had like a year ago. - [Leo] Okay. - [Jeroen] So that's my guiding principle really.
I have an outline basically available that gives me some, it gives me some roadmap on what I should be working on, and what I should write and how it should look. And I'm now in the process of working with a few people that are willing to review the manuscript every once in a while. - [Leo] Nice. So to make sure that it's, it makes sense in some way. And of course I'm not publishing through a publisher, I'm doing it through, I'm writing on LeanPub, and I'm probably gonna publish on Gumroad.
- [Leo] Yeah. - [Jeroen] And once that's done, I'm probably gonna be going into Kindle direct publishing as well. - [Leo] Well, good luck with that - [Jeroen] Yeah. - [Jeroen] We'll definitely, hopefully when you have a link, we can share that. - [Jeroen] Yeah. - [Leo] 'Cause I think that would be very interesting to our audience.
- [Jeroen] Yeah, I'm still, I actually had a phone call this evening with a friend of my wife who's really good with graphics and I'm trying to create a partnership with her to get like really nice graphics into the book as well. So that's 'cause right now the front cover is like a big picture of my face. (Leo chuckles) - [Jeroen] It's like, yeah, it's again my face, okay.
A bit self-centered so I need to change that cuz I want people to to buy the book because of the content and not because they think I'm a nice guy. So that's something and that I'm working on as well. And my goal is to have it finished by mid-March of 2021, and then work on the improving of content.
So if there's any feedback picking that up and also the marketing aspects, because already heard and read from various authors that they said like, yeah, writing the book is like 20% of the book - [Leo] Yeah. - [Jeroen] And then marketing it is like the rest, that's the 80%. - [Leo] Yep, yep. Then I think that's true with any product it's like the marketing- - [Jeroen] Yeah. - [Leo] Is a big part of that, so.
- [Jeroen] And that's also a big part of the fun really because the podcasting is relatively new to me, the writing of a book is relatively new. The marketing, I'm learning all kinds of new things. And what I'm noticing is just the acquiring of new knowledge and new skills is really what lifts me up as a person. So that really makes me wanna move forward.
And it really, I don't know, it release some kind of energy within me that I'm like, okay, let's go into this full force, head first and just (chuckles) dive in and see where I end up. - [Leo] Yeah, yeah, totally, I'm on the same page. It's the learning, oh, that really keeps me going, and keeps me passionate. And I think too, it's interesting, you know, running any sort of business venture, like whether you wanna be a cooker, a baker, it's not running, being new cook and a baker.
That's a bulk of the work with that business. It's the business and that's a big part of that. Like you said, with like the marketing, and finding somebody to do graphics. So, I don't even know how much like code you're doing or even writing you're doing with the book, but I bet a vast majority of your time I was gonna end up being the marketing, and like managing and all that stuff. - [Jeroen] Yeah, the book itself, it's focused at software developers, but it's not a code related book.
So it's more about the people skills and the self management skills that you need as a software developer that's transitioning into a somewhat of a lead role. Basically, I'm trying to also to fill in the gap that I felt when I was reading the book by Camille Fournier, "The Manager's Path." Because she wrote a book about forms of leadership that you present in a software tech company. And, one of the aspects of one of the chapters in the book was also the lead software developer role.
And I really agreed with her thinking about it because being a lead software developer has nothing to do with you being a junior media or a senior developer, but it's about an additional set of tasks that you get as a software developer. But, I wish she would've dived into that topic a lot more within her book.
So I'm really trying to fill that gap or basically expand on that area on that chapter of her book, not by taking her work, but that was also one of the trigger points for me to actually start writing this book. Because now what I mentioned, the book that I wish I had like a year ago. And for everybody doing software development and considering doing new things, it's one of those books that you should put on your reading list, if you ask me.
(suspicious music) - [Leo] Hey folks, I wanted to talk to you again about Appfigures. You probably already know them about their analytics, and their app store optimization. Appfigures really is about giving app makers the tools they need to get more downloads and revenue. Well, now ad figures can help you track competitors for how many downloads they're getting and how much money they're making to their audience demographics and which SDKs they use.
The competitor intelligence really gives you great context, say a competitor ads like a new feature, or was mentioned in the news recent, with Appfigures you can see if that brought in more downloads right away. Got a great idea for an app or a game, well, with Appfigures, you can figure out how big that market is and how much money you could be making with it.
And that's just scratching the service, whether you're growing your app or building a new one, Appfigures has the tools you need that will reduce the risk, but also get you more downloads. You don't need a large budget or a data science degree to do this kind of thing. Appfigures has made it affordable and simple.
On top of tools, Appfigures also provides a lot of great guides and tutorials to take you step by step through gaining more visibility with ASO and increasing your revenue by learning from your competitors. They just released a free guide on that actually. So go ahead, head to the link in the show notes and try Appfigures for free. If you like it, use our special code Empower 3030 to get 30% off for the next three months. Thank you, Appfigures for sponsoring our show.
(suspicious music) - Very cool. Well, it sounds like you've learned a lot as far as being a Lead Software Developer and it seems like a big part of that is dealing with scaling and security. That seems like the big bulk of what you've had to deal with as a lead software developer. Why do you think those two things are so important being a lead? - [Jeroen] Well, when I started working at the place of work that I work right now, I was hired there as strictly a Senior Software Developer.
And when I started working there, I noticed that there was a lot of room for improvement in the code base. And then things shifted around a bit within the team. And then I was offered to take the lead role cuz it was an external contractor that was doing that role. And I had some opinions on his way of working. And the end result was that this contractor was let go and I was moved into his position. And then really, we started working.
And I had a lot of ideas cause the code base that we're working on is big, it's old. It had a lot of object to see, fortunately now a lot less. And one of the aspects that's important for this code base is because it's insurance, including life insurance, health information. There's a lot of privacy sensitive information in the app, and also a lot of privacy sensitive information that's being communicated in this product.
So basically you can see some aspects of your medical history, any ailments that you might have had or stuff like that. It's not something you wanna have like flying around on the street that people can actually see that you've had some sort of condition or whatever. And that's the premise of the app that everything that's in the app needs to be secure. And because of the way the app is built up, that's basically the entire product portfolio. Often insurance company is in there.
And I might say in the Netherlands, it's a big insurance company. And that means that there's products in there in the range of basically health insurance, ensuring the house that you're living in, insuring the stuff that's in your house. And basically anything you can come up can come up with. And on top of that, they also have like a banking section in their app. So it suffice to say it's big, and we need to deal with this complexity.
And while we were deal dealing with the complexity, we needed to make sure that everything was secure as well. Because one of the things that we've started noticing is that over the years, a lot of stuff has been added to the app. And let's say some developers stepped into a few pitfalls that were quite concerning in regards to security. So we needed to come up with ways to take out these issues, but being able to migrate the existing app with an update to a new, better situation.
So not only did we have to deal with, making it secure, but also making sure that what we have can be moved into the new secure situation. How would that look? One of the things that I noticed, was that there was like a, sort of a big fault embedded within the app that a lot of data was stored into. And the fault itself was really secure, but the key to unlock the default was not really secure.
So there were some ways available that you could get a hand on the actual key if you were like a, what's the term for that? If you were a- - [Leo] Taker. - [Jeroen] Yeah, if you were a male intent end user. And stuff like that would really had to deal with. And what was interesting in it as well is that we, at the start of 2020, we were like a really big team.
So there was, I mentioned eight iOS developers, I have number nine, but there was also team in the same team, Nine Android Developers and the design engineers, test engineers and all the overhead that's also involved with a project. So you're dealing with a team in the size of like 30 to 35 people. And that doesn't really work. If you have a team of this big and you wanna be agile, you have to do something.
And one of the most obvious things that you can do is to split up the team in several smaller teams that have a smaller, dedicated focus on what we're working on. But the architecture of the app was not supporting this new team structure. So what we were seeing when we made it switch to this new team structure at the start of 2020, was that we were getting a lot more merge conflicts, a lot more discussion really about code level stuff.
And one of the things is with code, you shouldn't be having these discussions on code level stuff. You should be able to just work within the agreements and architecture that you set out amongst the developers, and then just be able to merge your stuff without too much hassle really. And we noticed that we were getting increasing problems in that area and I had an idea what this might be.
So we started looking and then the end result was that our agreement was that the code base was pretty much a big bowl of spaghetti and we needed to untangle a lot of things. And what we tried doing initially was to just re-architecture certain things, but that this just wasn't moving quick enough for us. But fortunately we were seeing the end of 2020 that we quite likely would be able to drop Iris 12 as a release target.
And not only do you get swift UI and combine available in Iris 13 and onwards, but also the dynamic loading of frameworks is a lot quicker in Iris 30 cuz in Iris 12 and lower, if you have a lot of dynamic frameworks, then the launch time of your app can increase significantly, actually to levels that are unacceptable. And with Iris 13 that's no problem at all anymore. Of course there is some overhead, but it's not increasing by that large margin anymore.
So what we decided to do was to actually create sort of a framework architecture that was in line with how the teams were divided and what responsibilities were actually assigned to each team. So that if a team was working on some framework, if somebody else was doing work on the repository as well, if you're not touching the framework that somebody's working on, most likely you won't be hitting each other's coach. You won't have any discussions and you can just move forward.
And because tool choice that we made, we also don't have ExCode , project files or ExCode workspaces committed to source code anymore. So you can't have conflicts on stuff that you don't commit. So that also was a big reduction in the complexity that we were having with the coming to an agreement between teams. And yeah, so we basically on during 2020, we switched to a new team structure and we switched to, what I call a micro framework architecture.
And the core functionality of the app is now composed out of 25 frameworks at the moment. And then the app itself is an iOS app. I've forgot to mention that. - [Leo] How are you, just briefly, How are you not committing projects and workspaces to source code control? - [Jeroen] Yeah, when we were looking into untangling our mass really 'cause the big bowl of spaghetti, we looked into ways to actually do that, and one of the decisions that we made was that we wanted to do small frameworks.
I dunno if you ever tried creating a framework by hand in ExCode, it's a lot of work and a lot of stuff can go wrong. So we started looking a tooling that would actually support this and also tooling that would help us build all this stuff. And for one of the first things that we came up with was the was basil, and buck and the rip architecture of Uber. But to us that was like way too many.
And also the hurdle of on getting into these tools, it pretty much demands a dedicated person doing the development of your build architecture. And since we're still a reasonably small team that wasn't available to us, but fortunately at SoundCloud, they did something interesting as well with two ways.io, which is now our open source product.
And basically I started investigating that during the summer and over a period of, I think three weeks, I came to the conclusion that this was the way to go for us. And then another four or five weeks to actually create a make file that would transition the existing structure into the new tools that the based structure with one execution. The reason that I did that was that, with this make file, all the development of the teams could proceed in the way that they were already familiar with.
- [Leo] Ah, yes. - [Jeroen] And I could develop the new structure piece by piece as I learned and understood the tool to a higher level. And when the day came that the script was good enough, we executed. And then I had did like, I think a week of explaining, and educating the other team members. And I must say that the transition went really well, and everybody has been a lot happier ever since.
And now in 2021, the road is open to us to actually make sure that we can actually do, we already have a composed architecture with micro frameworks, but now we want to make sure that the composing of the architecture is done in a more pluggable way so that as a software developer on our project, I can now choose to say, okay, I just wanna like work on this subsection of all the functionalities so that if I'm working on this subsection, all the other stuff I don't have to compile.
And if I don't have to compile it, my build time is way lower because we are on a project that currently has a build time on Intel Max, I must say of about five minutes on a clean. - [Leo] That's not bad. - [Jeroen] And, but it's still too bad- - [Leo] Yeah, great. (Jeroen chuckles) - [Leo] Yeah, it's a long time to wait.
- [Jeroen] Yeah, so, and especially if, since we are doing a sort of an agile process, we are constantly switching branches and every time that you switch a branch and you do that within the same context with ExCode and ExCode says, whoop, all the catches are invalid, so let's do a clean build again. (both chuckle) - [Leo] Yeah.
- [Jeroen] And, since we're working at home, we don't have the luxury of just pressing build, getting up and grabbing coffee cuz that usually took around four to five minutes. - [Leo] Right, right. So one of the things you talk about is security issues. What are some examples of security issues you see a lot of developers running into commonly?
- [Jeroen] When you look at iOS developments, the most of the things that you run into is basically ignorance of the actual developer of what is available on the platform. What I mean by that is that a lot of software developers are not using the key chain to the level that you should. And a lot of software developers are not checking their network connections to a level that you should.
Actually, you see a lot of app transport security exceptions appearing in PList files, if you see some source codes around. And I'd say the biggest problem in security wise it's just storing stuff on the device, in the wrong storage format. So just dumping it in the documents folder of the app, instead of storing the secure elements in the key chain. And if you're storing it in the key chain and biometrics are available, why not making it more secure by involving the secure enclave as well?
- [Leo] Yeah, I've run into that with like the key chain, one of the issues just being like how it definitely has a much more Objective-C flavor to it as far as the API is concerned, I think to a lot of swift developers, that can be a big challenge. Now I know there's like some Cocoa pots or swift packages that try to abstract that way, but still I know it's like hard to wrap my head around a lot of that stuff.
- [Jeroen] Yeah, it's and also because of the security stuff that we're dealing with as an insurance company, we also have to make sure that the transport layers, so that's the network traffic that that's also secure, and there's a lot of details involved if you do O off type of flows in your app. And there's also a lot of stuff that you can do wrong there.
And then on top of that, we're dealing with third party offenders that parties like Broadcom that have a big enterprise presence, but their SDKs are not always completely up to date with the current practices or the current norm because it's just not updated too frequently. And then you also, yeah, yeah, you often run into the situation, okay. I can use the vendor SDK or we can do it better by just doing stuff directly.
And that's always a trade off that we're looking at really cuz for one third party vendor, we just decided not to use their SDK and for the other, we are just using it because yeah, more control is in this case, more important to us than having a convenience with an SDK really. - [Leo] So you mentioned ATS, like what do you think, what are some things besides just allowing any old domain (chuckles) to work?
What are some tips that you have that developers should be doing when they're implementing ATS in their PList file? - [Jeroen] Well, the thing with ATS is that it's, you're always creating exceptions to the norm that Apple has set out.
And most of the things that you can put in an exception into the PList for are exceptions that allow older encryption formats or older protocols and using these older protocols, they just increase the risk of a man in the middle being successful at intercepting your traffic and changing your content or observing your content. And it really depends a bit on your product, but you can imagine that somebody inspecting your network, traffic can be bad, but somebody changing it can be even worse.
Cuz if you're a banking app, imagine your transaction being intercepted mid-flight and adjusted and then forwarded again.
Of course there are things that any decent banking app would do on the client and the server end to put some sort of hashing or validation on the me payload, but still you wanna make sure that the secure pipe that you're trying to create between your client and your server that nobody can get into your channel really because even the observing of certain transactions or certain network traffic can be a bad thing, depending on the use case that you're dealing with.
And these ATS exceptions, they just decreased the security of the channel. - [Leo] Yeah, I think it's a really great point that a lot of developers don't don't realize and especially in your industry, I think it's incredibly important to keep those in mind.
I remember actually a really good talk that I went to a Triswift a couple of years ago by Felix Krause of Fast Lane just talking about all the different man in the middle stuff that people can get away with on iOS, and I'm really glad developers are becoming more and more aware of that stuff right now. - [Jeroen] Yeah, it's also, Apple has a great piece of documentation available in regards to security on the iOS platform. And it's a somewhat overview document.
So for an iOS developer, it's great starting jumping off points to get into the security really related content that is available within iOS and also for people not directly involved with software development, it gives a good overview of what high level mechanisms are actually available within iOS.
So that as a manager, you can actually ask of your developers, hey, can we focus on these areas of security which is available within iOS so that we are actually secure with our solution that we're trying to build. - [Leo] So you talked about scalability being really important with the app that you're developing.
What were some like code smells that you realized, yeah, this is a mess that needs to be pulled apart, or what are some things that you think developer should look out for when they're developing code? - [Jeroen] Well, the thing is that usually, if you develop an iOS app, quite often, you just put it in one target. So everything is in one target, and everything can see each other.
And it's quite easy to just, if you need something done and you know that it is done some in some class to just directly call into that and then getting your results. So it really works out today, but tomorrow if you need to adjust some piece of functionality, for instance, you're dealing with some code that is related to banking and you're actually using some code that is related some insurance policy.
Then at some point a developer starts changing the codes, which is in the scope of the insurance policy. And then all of a sudden stuff sort of breaks at the other end of the room, so to speak.
So basically if you're like compared to a real world example, if you're like adjusting your door and you're just adjusting some screw and then all of a sudden, like a small picture frame drops off the wall because you just screwed out screw that's keeping up that thing, that's kind of an indication that something is attached to each other in a way that it shouldn't really be.
Cuz if you're working with a bigger code base, you wanna be sure that if you're working on some area of the app, that you don't break stuff at the other end of the app as an unintended side effects of your changes. And we were seeing that quite a lot actually within our code base. And another really typical thing that you see in larger code base that is a smell is there's one way to actually do something. And there's a second and there's a third and maybe there's even a fourth way.
And all four basically do the same thing except in one or two small details. But if you take it down to the essence, then all code paths that you're looking at do the same thing.
And that's a maintenance nightmare because if at some point, in this case it was networking related code, something had to change on the server end and we needed to deal with that, instead of just changing that on basically one line, we needed to look up four locations in the source code to see what we needed to do there. And because you know, there's four who can actually guarantee me that has not five or six or maybe 10 of these same situations as well in the code base.
So not only is isolation important for you, not breaking stuff, but unintendedly, but it's also important to keep an overview of what you are actually trying to accomplish within your code without being unsure, whether or not you changed everything that you needed to change.
- [Leo] Yeah, I've become like a big fan of using swift packages to like separate my code bases and doing that rather than just frameworks and like that's been fantastic cuz I can easily unit test, I can easily do CI stuff with it, I don't have to worry about a lot of the maintenance and the cost of just having a major code base in one target, which sounds like was a big issue with you guys. - [Jeroen] Yeah, yeah. That's definitely, it's been a big issue.
And also we had a legacy of five years of software development with us cuz we had like Objective-C swift and we're now transitioning into swift UI. Fortunately over the year of 2020, we've been able to really reduce the number of lines of Objective-C. But we did notice that if you have a mixed source project in Excode, the bridging between Objective-C and swift, it really it eats up a lot of time within the compiling of your project.
And what we've noticed that is that the more Objective-C we were able to throw out of our source per three, the quicker are compilation was actually getting- - [Leo] Well, that's awesome. - [Jeroen] I already mentioned that we had a compile time clean build about five minutes, but it was double that at the beginning of the year. - [Leo] Yeah, that's crazy. Wow, that's awesome.
So before we close out, do you have any other tips for developers and managers out there for keeping their app scalable and easy to maintain over the long run? - [Jeroen] Best thing that I can come up with is to make sure that, as a manager, you facilitate the software developers to be good craftsmanships.
So craftmanship for software developer means that they know what unit testing is, they can do unit testing, there a lot of time to actually do the automated testing, but also to allow your software developers to do more exploratory things so that they can actually come up with solutions for the issues that they're facing. Because if you ask any random software developer in a team, so, hey, so what's the biggest issues that you're dealing with?
Most likely they can come up with a list of like three or five things. And quite often, if you ask 'em, hey, so do you any ideas on how you can solve this? They might have some idea, but they didn't spend the time to actually explore what these solutions could be. So that's on the managerial side and as a software developer, I'd really make sure that you request time to work on your own development as a software developer so that you get better at your craft.
And also to make sure that you spend some thought on why you wanna do certain things in your code base so that you can actually explain it to the people who control the money so to speak. (both chuckle) Because what I noticed is that if you can explain to your manager or your business sponsor to why it is important to do thing within the code base and what the value might be. And of course you cannot express the value in direct hard currency.
But if you can give some indication of value, then you'll probably have a much better time in having these discussions with your business sponsors. Because in the end, I think as a software developer, as a tech guy, and a manager guy, you all have the same goal. You wanna be successful as a company because having a successful company means that both of you will have a paycheck at the end of the month, and next month and next year. And it all leads to the same result really.
So what I notice is that software developers and the people trying to manage them is that they feel they have very different goals, but if you dig a little deeper then their goals are quite often in line, and if they're not, then that's something that needs to be worked on. - [Leo] Could have insight any better. Thank you so much for coming on the show. Where could people find you online? - [Jeroen] That's appforce1.net.
And that's basically my website and there's also all the other content that we discussed is quite likely available there through some links. So that's the podcast, the book, CocoaHeadsNL, it's cocoaheads.nl. That's the landing page of the community that I'm running. I think those are the two most important ones. For my podcast, look for AppForce1 in your player of choice, and you shouldn't have a hard time finding me. So that's AppForce1.
- [Leo] And we'll have links to that in our show notes, as well as two, his interview of me and talking about my year review will also be a link in the show notes there. Thank you so much for coming on Jeroen. - [Jeroen] Yeah, it was a pleasure. Thanks for your time. - [Leo] People can find me on Twitter at Leo G. Dion, my company is BrightDigit. Please take some time to post a review to Apple podcast, Google podcast, Spotify, or wherever you listen.
Thank you so much for joining us for this very special first episode of 2021. And I hope you have a happy new year. - [Jeroen] Happy new year, everybody. (suspicious music)