- [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)