AppForce1: news and info for iOS app developers

Jon Reid, book author and iOS Unit Testing Champion

February 10, 2022 Jeroen Leenarts
AppForce1: news and info for iOS app developers
Jon Reid, book author and iOS Unit Testing Champion
Show Notes Transcript Chapter Markers

Jon and I share some memories before we dive into his history. Jon is one of those mellow friendly persons who will just wait for you to start asking questions. And once you do, be ready for the wealth of knowledge and detail you will get as a response.Jon also wrote a book on iOS unit testing. Nowadays Jon works at Industrial Logic and by how he describes it, Jon has found his tribe.

Dev Interrupted
What the smartest minds in engineering are thinking about, working on and investing in.

Listen on: Apple Podcasts   Spotify

Runway
Put your mobile releases on autopilot and keep the whole team in sync throughout. More info on runway.team

Lead Software Developer 
Learn best practices for being a great lead software developer.

Support the show

Please rate me on Apple Podcasts.

Send me feedback on SpeakPipe
Or contact me through twitter or Mastodon: @appforce1@mastodon.cloud

Buy me a Coffee or become a member of my podcast.

My book: Being a Lead Software Developer

Jeroen Leenarts:

Hi, and welcome to another special edition of my podcast. I'm sitting here with John Reed, you might have heard of him online under the acronym cue coding, because he has a website quality coding. And he does a lot of stuff for iOS developers, and also Mac developers in relation to unit testing. So if you look for unit testing online, there, you're bound to end up on his website. So John, Hi, how you doing today? Hey, Jeroen,

Jon Reid:

good to see you. Good to be with you. Again.

Jeroen Leenarts:

It's been a while.

Jon Reid:

It's been a very strange two years since we were together. Because

Jeroen Leenarts:

John and I actually met each other in person. It's close to two years ago, or so not entirely in 2020, I think it was. And well, we decided to do a workshop in Amsterdam. And John had some other engagement in the area. So and then, hey, let's do it. Let's sell tickets and see what happens. And pretty much that was right at the beginning of the very first lockdown we had in the in the Netherlands. And actually, John was very lucky to afterwards be able to get home to the US afterwards, because it was a bit tense. In hindsight,

Jon Reid:

it was it was a little dicey there as well. Yeah.

Jeroen Leenarts:

So but fortunately, yeah, we're both of us are still in one piece. We're almost two years later. And this is actually the first time that we're speaking again, face to face. So has been too long, because I really was. So looking forward to interviewing you for my podcast. But to put the focus back on your job, quality coding, you're known, at least in my book for unit testing. How did that happen?

Jon Reid:

How did that happen? Oh, you got some time, I've got a story to tell. Yeah, um, you know, when I first started coding, I, for the longest time, I would be like the only programmer on a project. So I wasn't working for any software companies, I was working for any place that needed a coder. And I was the coder on a project, which means meant I could do whatever I wanted. And that was fine. And it wasn't until I moved to Silicon Valley that I joined a real software company and understood that it was a very different game, very different, to have so many people in a code base, and quality issues and bug tracking and all that kind of thing that you don't normally have to worry about as a solo developer. So that was, that was a sort of a rude introduction for me into how things really work. And along the way, I became very interested in very passionate about working better about having a better sort of coding home as it were making your code a good place to live, making it a happy place and not a painful place. And I saw one of my managers saw that I was not very engaged with the actual work. And to his credit, and I still thank him, instead of firing me. He said, You know, why don't you start writing? Internally, like, put up some best practices, make a wiki, wiki use Word, we're new then. And so I started exploring what that was like and started writing, just for our group of developers try to document what what our practices should be in that environment. And that was the start of me being trying to write and trying to shift a group into better practices. Eventually, then that will that sort of kept going. And then eventually, I thought, You know what, I've been doing all this internally. Nobody outside in the outside world knows what it is. I wonder what if I set up a blog, what would happen? And that was the start of quality coding.

Jeroen Leenarts:

So that's a very concise and condensed version of, of history, because how long have you actually been been coding by now? Oh, gosh,

Jon Reid:

I know.

Jeroen Leenarts:

I am I even at liberty to ask so.

Jon Reid:

I mean, it's been a long time since I first started as a junior high kid. Working in basic Well, I did a little Fortran before basic on punch cards, believe it or not there that dates me. I have punch card experience,

Jeroen Leenarts:

I know what computer where you're working on. Or, of course, you had to bring your bucket of punch cards to the operating room, and then they would like load them up. And then you got your results. And there was a buck in there.

Jon Reid:

Yes, that was that was part of the painful sort of introduction to feeling the how long of a loop you have, how long does it take to get feedback on whether what you did is correct or incorrect. And in high school, actually. So I grew up in Japan, in Tokyo, going to an American school there. And the way it worked, I wasn't even part of the programming class, I sort of begged the teacher can I do some things? I'm very interested in this. And what teacher turns that down. So the teacher let me submit programs along with the other students. And they would package up the cards on Friday and send them to downtown Tokyo over the weekend, where a company had donated time on their mainframe to run over the weekend. And then we would get the results back on Monday. Think of that as far as like a loop goes in a if you do all that. And then you find out you have a syntax error.

Jeroen Leenarts:

Yeah, on your first card, right.

Jon Reid:

It's, it's terrible. It's terrible. So I think my journey has been a lot of it has been about making that loop smaller and smaller. And certainly IDs have helped with that. We used to be that you had to compile to see if you had a syntax error. Now the IDE sort of picks it up and puts a red squiggly line, or something underneath anything it detects, and gives you gives you some good clues there. But IDE s can only know about the programming language and about any types you define. But not about the behavior, not about the logic. They won't really help you with that. And so that's where for me, unit tests have come in as as the strong way to say how do I how do I validate that the behavior I want is still good. And the cool thing that cool, cool, cool thing about working in tight feedback loops is that when that feedback loop, as that feedback loop gets faster, and faster and smaller and smaller, something changes, you're no longer saying run tests and then going to get a cup of coffee. In fact, you're no longer running tests and then having your mind go off somewhere. I'll check Twitter for a little bit. While I'm waiting for the results. You're if with fast running tests, you get the results immediately. And this means you can be free to fool around and have fun again, and say well, what happens if I try this? Does this work? Yes or no? I did work. Hooray.

Jeroen Leenarts:

So what it means to showcase is that you are have the ceh for high passion for like helping other developers reach those same goals. We'd like short feedback loops. But I wanted to dive into you as a person a little bit first job, because you're you're from Japan originally, but at what age did you well basically skip over the pond and became somebody who was situated in the US.

Jon Reid:

That was to go to university.

Jeroen Leenarts:

Yeah. So it was education that brought you to, to the United States. Yeah.

Jon Reid:

I was, as they say, made in Japan.

Jeroen Leenarts:

And you have your full Japanese parents, right?

Jon Reid:

I'm half Japanese, half German. My mother was Japanese and my father was American. Okay.

Jeroen Leenarts:

And and your family lived back then. In Japan, I guess. Yeah. So what year was it that you started your education?

Jon Reid:

Started going to Purdue University in 19 8019. Now, now you can date me.

Jeroen Leenarts:

Hold on, let me get my carbon data here.

Jon Reid:

No. And honestly, that year that freshman year at college, they were still using punch cards. I was disappointed because I had moved beyond punch cards by that point. Okay. But I went to university and that was the last year that they were using punch cards.

Jeroen Leenarts:

So that There was like a. Well, a bit of a setback maybe. But what came after punchcard? Was it like immediately floppy disk? Or was tape or what was it back then?

Jon Reid:

It was? No, it was CRTs plugged into a mini computer. Yeah. Yeah.

Jeroen Leenarts:

So yeah, the terminal in the true sense of the word. It was just a screen and a keyboard and a very long cable into the server room. And that's all it was. Okay, cool. Because what's very funny, actually, is that the year that you started your studies is actually the year I turned one, so I can't remember anymore. What's going on then? But I know by the time it was 1986, I think, I think I was I think I got my hands on like my, the first bits of computer actually, my dad, he was really into this set expectrum space by seeing things like a bit of a Commodore 64 type thing. Yeah, yeah. And but did you? What was the time that you got your own computer at home then? Was it also around that time or a little bit later?

Jon Reid:

Oh, I didn't get a computer. Actually, it was around that time that I got my first computer, but it was a big, heavy. So called portable, compact, portable, which was basically running. It was called compact, but it was basically running an IBM System. It was like a sewing machine.

Jeroen Leenarts:

Yeah, huge battery and like, tiny, tiny screen and then you if you're just getting the train thing around, it required a wheelbarrow, right? Oh, yeah.

Jon Reid:

It was heavy.

Jeroen Leenarts:

Okay.

Jon Reid:

I don't use it very much.

Jeroen Leenarts:

Yeah, those terminals were way better. Right. So but um, you did your studies. And then you were already I think in San Francisco by the upper universities in San Francisco.

Jon Reid:

No, Purdue is right. In. I was going to say the middle but that's not true. It's in the Midwest. It's in Indiana. Okay. So under the under the Great Lakes. In the towards the center right of Northern USA. There are a whole bunch of lakes, big giant lakes there. And under that,

Jeroen Leenarts:

it does show that I should have paid more attention during geography class. Back in the day. So yeah, I know where it is right now. But then why Purdue University then back.

Jon Reid:

I was close to where my family? My father grew up. And I wanted to be around his family.

Jeroen Leenarts:

Okay. Yeah. Because then you have some social network around you. That's something different than Facebook. Oh, by the way. So but you got started at your first job? What was it like back in the day? Because for me, it's just, you know, PC computers and stuff that you were working on? But I don't think that was the case back then. Right.

Jon Reid:

Actually, no, I, my first job was working on a PC. Literally an IBM PC.

Jeroen Leenarts:

Okay, so the couldn't get any blue or a PC compressor that then so but what what was your first job then

Jon Reid:

a company that made a radical idea at the time that was to have a full powerful database running on a PC. And so this is a company started from probably from a professor at Purdue University because it was in the area. And they had a nice relational database, full relational database running on on PCs, and then a lighter version. and, oddly enough, I didn't work on either. Instead, I worked for the finance department to help them with their bookkeeping, they not wanted somebody to code up ways to keep track of their business.

Jeroen Leenarts:

Okay, and this database is it's something that's still around today or now No, it's long gone now because I know sometimes you have like this, this this piece of software that are around today and that have like this whole backstory that goes well, in computer science, it goes back to the Stone Age, so to say, some of you were working on like financial software then was it like, what you were expecting back then? Or you just what was your path then? Because

Jon Reid:

I just went along and wasn't very creative or inspired. I enjoyed programming and that was programming. So that was good enough.

Jeroen Leenarts:

Okay. And when did you meet that manager that told you To start writing some stuff down, and that they're the, the the seed was planted for you to well, at some point, create your own business in consulting and, and coaching and teaching other developers.

Jon Reid:

Yeah, well, that wasn't until much later when I moved to California. And I started work. When I first moved to California, I worked for Clarus, which was Apple's software company. It's still exists, oddly enough. But I lost my job within two years, because Steve Jobs came back and said that he didn't like this company that was making Mac and Windows software. And thought most of it was waste. So that was my first time losing my job. Yeah, I went from there to Adobe. And it was at Adobe, that the manager, I had my that my good manager, Evan Robinson, who spotted something, something in me that what, what a great manager to see something inside of you that isn't expressing itself yet and say, Why don't you try this?

Jeroen Leenarts:

Out? But that's always the case, right? Let people experiment and discover what they're good at what they're passionate about. And also what drives them. Right?

Jon Reid:

That's if things go well, yes. Yeah, things have gone. Well, things have gone well

Jeroen Leenarts:

sometimes says things that drive you crazy. That's true. But so you worked at Claire's in California. And then by circumstance, she had to switch over to Adobe, because I imagined Claire's had to downsize? Because pretty much they couldn't do a big part of their business anymore. Yeah. And then at Adobe, how long have you worked for Adobe?

Jon Reid:

Adobe, I was there for five years. And that was also the time that I felt the most pain with software. The group I was part of, had, we were working on basically a cross platform UI framework, so that Adobe, programmers could write to our framework, and it would work on Mac or Windows. And none of us had written this. It was inherited software. It had grown. Over time, as a big ball of mud. I'd had no automated testing whatsoever. There were sections of the code that we were afraid to touch. And that got worse and worse. And and then we started to assert ourselves started to say, you know, we're under such pressure that this isn't right. And so when, when we would get requests, essentially, our clients were the other development teams inside of Adobe. And they would say, we want this and we want this by by this date. And that and they were also competing with our for our attention. And we started to say, hey, no, we can't deliver that at that date. Because we knew that the code was a mess. Well, it turns out, that wasn't a very politically wise decision to say no to Photoshop, and say, you know, we're not going to obey your commands. And we ended up losing our jobs, because the code was such in such a state that we were afraid of it.

Jeroen Leenarts:

Okay. And do you have any clue? What happened with this chunk of code? After the whole incidents happened?

Jon Reid:

They rewrote from ground zero. They scrapped it

Jeroen Leenarts:

basically what the entire team was saying, right?

Jon Reid:

Yeah, we had wanted to rewrite it. And normally, I would not advocate for rewriting. Yeah, right. Normally, that's a bad idea. You want to take your existing system, which is serving you and, and reshape it slowly. And we had some ideas about how to how to do that. But we had shot ourselves politically. And we're too naive about the consequences of that. Yeah. So we were all let go.

Jeroen Leenarts:

Yeah, that's usually a one way street if you're in that area. So then Adobe, you did a lot of work and probably learned a big lesson there that if there's like, a big ball of hairy code, that's not something that you that you enjoy working on. Then you need to find ways to make it enjoyable, I guess. So after Adobe what, what was your next venture then?

Jon Reid:

Where did I go? I'm trying to remember I think I went back to Apple. At that point. I also had some time unemployed. I thought I would hold out for an apple job. I worked sort of as an Apple employee, but not really inside of Apple proper. Yeah. Clarus had its own culture. And I thought this is the dream. I want to work for Apple. I got in. And in my case, it didn't work out. Yeah, it was, it was not a good fit. It was actually my first time being a remote worker. Now that I think about it. Because I got the job. I was so excited. I went to Cupertino. And the rest of the team was not there. They were in Washington state up north. That's a bit of a way. And I didn't know how to be a remote worker. And they didn't know how to have a remote worker. Yeah. So it was unfortunate. circumstance. And so that Job didn't last either.

Jeroen Leenarts:

So what what are some things then? Because if you if you look where we are at now 2022. You had your stint at Apple? And and what is the process in between? Because how many jobs did you have? Since then?

Jon Reid:

us so many, like, my, my time at Adobe for five years, that was the longest job I have ever had. Most of my jobs would last a couple of years. And then something would happen. Yeah. After after at the two year mark. He usually it started well, and then it ended sour, something would change.

Jeroen Leenarts:

So that or the company would change or what kinds of things. Are you referring? Yeah.

Jon Reid:

Like? At one point I was working. Much later, I was working at Skype and on their iOS app. And then they said that they wanted to switch everything to common code base based, essentially react, although I don't know if it was react, and scrap, native development. And I wasn't interested. Yeah. I wanted to continue to grow as as a native iOS developer. So I at that point, I started looking strongly elsewhere.

Jeroen Leenarts:

So but would you say that? Yeah, you had different jobs over the years? And, of course, there's always reasons that you either have to move on, because of the day job isn't there anymore, or you decide to move on? Because there's greener pastures elsewhere? Yeah. But what's the common thread that you think that's been going through all these years of software development for you, then? Hmm.

Jon Reid:

common thread? Wow, that's a big question. I think it's that. Everywhere I went, I, I started to give like, internal talks, start really trying to teach and promote unit testing and test driven development and refactoring. And a lot of places weren't interested. They just didn't think that was valuable. In fact, at one company, I was told to stop writing unit tests for view controllers, that that was a bad idea. And I said, no, it's actually a very helpful idea. And then I was given permission to write the tests as long as they were not run as part of the build system. Which it's like, well, what is that? What's the point? What's the point? Um, so. So there were times I guess, when when my message as it were, wasn't received. I feel like I have continued to have a dream. I have this, this desire for the way I wanted to work. And in some places, it worked. In some places it didn't. One of the better places that I experienced, oddly enough, was Microsoft. I had a short contract I work, I started to experiment with contract programming, not just full time employment, found out that that can work also. And that I worked for Microsoft, as a Mac developer, that was a pretty cool experience. Because they had all these think different posters up in the, in the Microsoft campus, it felt like going into secret territory, it was a lot of fun. And so there were some places that that having a strong test, essentially a test driven mentality was received in other places where it wasn't. But I kept on keeping on, kept on getting better kept on trying to influence the people around me.

Jeroen Leenarts:

But could you say that over the years this, this stance on efforts has changed?

Jon Reid:

Yes, there has been a definite shift. Now most places are still not keen on test driven development, but they recognize the value of unit testing. Yeah, I think there's been a real shift there. So that's good, then then the next step is to say, Wow, that's great. But you're doing things the hard way, writing tests to exist, of existing code, that's hard. It's not as much fun. And it's not as effective.

Jeroen Leenarts:

Throughout all these years, you've been advocating, promoting, and basically, trying to convince people that test driven development is, is the smart thing to do. But at what point in your career? Did you make this revelation to yourself really, that test driven development? is a thing that people do? Or is it something that's that that that grew into you gradually?

Jon Reid:

Now, that was, during my time at Adobe with, with that manager who encouraged me to, to start writing and promoting good practices, we started to, oh, well, I found this book that was pretty new at the time called design patterns. You know, that's the now classic Gang of Four, design pattern book, and I started to share it with my teammates. And, and it's like, here are some tools we can use. Like, there. It was like, these are idea tools, which was an interesting new thought, to me, most of the tooling until then had been, you know, very literal, tooling. Design patterns were like a tooling for the mind as it were, you don't have to sweat so much. Here are some things that work for these circumstances. And so I started to consume books start to look for where else can I get information about design patterns like this is really good stuff. And went out on to the very young worldwideweb and did a search and found a site. This was a site that was a turning point, for me, it was called C two.com. It's still there. It was the site of the original wiki, created by Ward Cunningham. And he wanted a place that was more in line with it, as it were the original vision of the world wide web, which was basically that things would be very dynamic. And you could go in and edit something. Or you could have a half an idea for a link and not have a link destination, it would just show as a question mark to say here is a an idea that maybe you maybe somebody else can fill in what the details of this idea is, but it left a question mark there and you hit the question mark, and it would pop you into an authoring page. It was radical. There was a section on this wiki that was devoted to design patterns. There was another audience that was very active in there. And this was the Extreme Programming group. And I was very curious about this because I was desperate to to make my life better and my teammates lives better. And I started reading about extreme programming. And test driven development is one of the practices that was born out of out of extreme programming. So I started to apply what I could, even if it was just me solo. Because Extreme Programming is really it's a team thing. It's it's, it was agile before agile,

Jeroen Leenarts:

primordial, agile, really

Jon Reid:

primordial, agile pre, sort of a more pure engineering focused agile before? Well, it became whatever it is today.

Jeroen Leenarts:

Yeah. Basically before the Agile Manifesto, right? It was before the Agile Manifesto. Yeah, for those listeners who don't know what the Agile Manifesto is, I don't know the names anymore who were on that. But it was a couple of influential thought leaders back in the day that pretty much wrote down some guiding principles on what Agile software development is supposed to be, according to their views. And it basically is the start of all the agile practices that we well know and use nowadays. So it's very interesting to to look it up and just see what is agile manifesto is, and also all the mean versions of it. But yeah, I'll make sure to link that from the show notes.

Jon Reid:

So is that especially because that's something I think that a lot of people aren't familiar with the principles and the practices that on a second page that it it describes are so fundamental, but if all you know, about Agile is basically, you know, Scrum ceremonies, and you've never seen the Agile Manifesto, you're missing out? You're missing out?

Jeroen Leenarts:

Yeah. Yeah. Because that's, that's a reason to all the madness, really, with, with a proper execution of an agile project? That, yeah, sometimes you do notice that, that people miss some context, and they really don't know why they're doing what they're doing. And I've noticed that it's really helpful to just sit them down. Explain a little bit, why are we doing this? What's the purpose? What's the goal, and it's has these specific goals because it fits into a grander scheme of things that's ongoing, and that you as a single person are a part of, and and once people start understanding what their role is, and what influence they actually have, by their day to day actions, then yeah, quite often, you see something click, and then they basically start doing what, what they are well, called marks they are supposed to do so. And it makes everybody's life a lot easier. But yeah, so you started experimenting, really, with extreme programming. That's the XP methodology that that you're talking about? Yep. And what did it bring to you? Because it's, it's, I've read the XP book, years and years ago, go it was like this, this white book with like, extreme programming. And I remember some big X being displayed on the cover art.

Jon Reid:

I confess, I have never read the book. Your everything I've I learned was was from this wiki. Discussing, because I

Jeroen Leenarts:

think indeed, that everybody that was in the book was also on the wiki. Yes, I discovered that after I bought the book, of course. But um, so you learned a lot of things there. And and what do you do with it? Because I know that you've been thus far that you've been doing well improving your day to day life as a software developer since your time at Adobe, some hits or misses along the way, because yeah, sometimes the environment doesn't support it. But you did bring this experience to the table at every engagement that you have since then, and you've never stopped pushing for Agile methodology methodologies, agile ways of working unit testing, getting the feedback cycle is shorter and shorter. So but what kept you going despite all the people saying, we don't have time for this, and it's not worthwhile, and why are we why are we even considering doing this? In the first place?

Jon Reid:

Why indeed, you know, at at one company when they when, when when I joined, I think this might have been at eBay. You get to choose not some symbol that like a cartoon character of your choice to go on your company batch. And I chose Don Quixote, because I felt like I was the dreamer of the impossible dream. Chasing the, the monsters with little hope of success. But what what kept me going was a strange faith. Oddly enough, um, one of the, one of my core strengths. I know from taking a, a survey on, like, what are my strengths so that I can continue to reinforce those strengths? And curiously, one of my strengths was this notion that things work out that the universe is here and and everything is going to be fine. And that we're all connected. Yeah, um, it's not what you would expect, and certainly not what I expected to come out of like a business experience of like, let's find out what your strengths are. And that was one of my top ones. And I just every little bit of, of experimenting I had done had been so valuable for me. And I, I wanted others to have those good experiences also. And some did. And even in places where I left I, I think I was able to leave a good mark.

Jeroen Leenarts:

Okay, yeah. Because what's very funny is, every time that I talked with you, and we'll be we talked extensively, like, two years ago, close to two years, it's that you're like, you're just in a conversation with you. And it's like, and then you start, okay, you start making a list. Okay, so he works at Claire's, he worked at Apple, he worked at eBay, he worked at Adobe. Is there any place big brands in Silicon Valley that that you haven't worked? Actually? Because I think you've seen a lot of these companies that are nowadays considered like, well, big tech, and large tech in Silicon Valley. And, yeah, pretty much you've seen them all, it seems you've seen them actually start and grow into these huge companies that they are nowadays, in part as well. So would you say that having these experiences on all these different companies, does that make you like, is that part of why you are such a good coach in software development, and and especially the niche that you're in with unit testing?

Jon Reid:

One thing that it taught me is that the big companies don't necessarily have good practices, that they may be successful in spite of themselves, in fact that this then, is the story that I've come to believe about most companies. Yeah, is is that, wow, they're successful. They're making money. The programmers seem to be mostly happy. But it could be so much better. They have no idea how much money time and joy they're leaving on the floor. Hmm. That that, that's one thing I get from having been in, in a number of big places and famous places is that when you're on the inside, it's not necessarily wonderful. And the big, good practices you've read about may not be in practice. And, of course, these days, agility itself has been commodified into a business. Yep. And is weaponized as something a way to control developers, which is the exact opposite of its intent. And so I'm, I don't know if you know this about me. But, you know, I started quality coding, turned it into sort of a side business. And, and of course, that brought me You while You brought me, then to the Netherlands, with that business, and that teaching and coaching, but now, I find myself at a company industrial logic that does this teaching coaching from agile and extreme programming background and lean, real lean focus. that I get to be part of a group of people who are who are like this, so I feel so incredibly pleased that I found my people you find finally found my people to find your tribe? Yes. So that's a great feeling.

Jeroen Leenarts:

So how long have you been working at this company

Jon Reid:

then? How long has it been? Just since April? So yeah, I guess. Eight months is that right? Eight, nine months.

Jeroen Leenarts:

If my memory serves me correctly, like the previous time we spoke, you were working as a The reasonably large financial company, right? Yes, American Express. Yeah. reasonably large. So, um, but you find your tribe? And then what does that mean for you? Is that like that? Does that like accelerate your own growth? Or is it more like that you have can make a bigger impact, because there's now a company around you that supports this whole way of working in way of thinking about software development, both.

Jon Reid:

First, from a practical point of view, I don't have to scramble to find companies anymore that want to have me that I mean, I'm still expected to be part of that process and to and if I can, but mostly, the engagements are there for me, the clients are there, and they it's much more organic, and I don't have to sweat the business side of things. Yeah. But being among these people, who have just so much experience in so many different areas of agility, I am learning. My Learning has accelerated. It is it's thrilling. It's fun. Take, for example, the Clean Code Book, which was influential on me. Of course, Robert Martin's name is big. On the book, he's the main author. He's not the only author. I happen to work with three other authors of that book. There were there with me at industrial logic. It's it's

Jeroen Leenarts:

quite funny what you say that because even though you have like, a software development track records of I think now close to 40 years. Still, you're learning new things every day. Still, there are people that you work with that? Well, on paper or on record, if you look at how long they've been working. They're less experienced than you are, but you're still learning still learning every single day. Just because people have different perspective and different experiences compared to yours. The Do you think that's like one of the most important things that needs to be able to exist in an Agile team?

Jon Reid:

Yes, yes. And it's one of the reasons I've become such a believer in ensemble programming. What the, the, probably the more common word for that is mob programming.

Jeroen Leenarts:

Yeah, but that's like because the group in room is then pestering the one at the keyboard. That's the mob. The one coding and that's not the point.

Jon Reid:

I learned that the origin of the term mob programming was a joke, actually, that Llewellyn Falco was at Hunter labs, helping them and they they started to, to develop this style with Woody Zuill. And, and then, but they didn't have a name for it. And they then they were asked to describe what is it that this thing that you're doing? What is it and they said I don't know. We don't what? What is it? It's great. It's it's a it's a mob. And they said it as a joke. Unfortunately, it's stuck because it's a single syllable. It's it's, it's not as it is very catchy.

Jeroen Leenarts:

Yeah, everybody, everybody has this, like this picture with a mob, you know, pitchforks and all kinds of horrible things.

Jon Reid:

But that's, that's why I like ensemble better. Yeah, for coming from a musical background. It's a group of people, maybe with different roles. It's not necessarily that. Well, in pair programming, things can feel a lot more intense and a lot more tiring. Because you're with one other person. And are you a good match? Or not? Maybe maybe not. Is the is the other person a keyboard hog? Is the other person smarter than you are. And so you feel intimidated and all this stuff. And an ensemble because it's a larger group, it's naturally more diverse. People have different not only different skill levels, but the ensemble might include people from other disciplines, for example, to say, You know what, we don't know the answer to this. And so in good old extreme programming style, rather than submitting tickets or sending emails, or slack, even slack messages, well, I suppose slack might be the exception because it's more immediate. It's to say, let's get an answer to this. Let's pull the product owner or in or let's ask the customer. Let's have them come in and let's have let's sit down Let's have them sit with us as we code together, and they can be part of the solution, because they all catch things that we're not aware of. So an ensemble can be programmers mainly might have a quality expert, QA folks, for all my love of unit testing. QA, good QA people bring such a great, different way of thinking about things than programmers do. And so having some one of those people on your team, in the room coding with you to say, what about this edge case?

Jeroen Leenarts:

Yeah, for software, for a software developer, having like a good colleague, as a software developer, that's a person who is worth his weight in gold. But if that person is a QA type person, that's really good at Quality Assurance, their weight, they're worth their weight in gold, but then twice, at least that's that's my experience, because they they I don't know, it's some kind of mindset that Jedi mind tricks even. But they can just see things and come up with things and looking at your solution in a way that really makes like, Okay, I haven't thought about that educate yet. And they can break break everything, which is good while you're developing it, because then it doesn't happen in production, right. So but the company that you're working at is really a company focused on, on teaching agile development, teaching solid software development skills. And, of course, unit testing is a part of this toolset that you need to have as a good quality software developer. But But how does working for industrial logic play out for Q coding for you? Because it is a bit? Oh, the you could say that are some some overlapping areas in the market that the company and you serve?

Jon Reid:

Very much so very much. So in fact, I, I have basically shelved the business side of quality coding.

Jeroen Leenarts:

Yeah. So that's the that's the teaching and the workshops. Part of things. Yes.

Jon Reid:

Yes. So So basically, anyone who wants me to come and teach for them? Well, I'd love to, I would love to, but you have to talk to industrial logic. Yeah.

Jeroen Leenarts:

That's, that's obvious. And and you can still write your books, or what's the deal there, then?

Jon Reid:

Yeah. So I don't know that I'll ever write another book. We'll see. Yeah. But, and for, for those of you who, listening who aren't familiar, I'm the author of iOS unit testing by example. And, yeah, they encourage us to, to get out there to, to write, to speak, to keep promoting the good practices. On the one hand, cynically, it's good for business, for the company, for us to get out there. But more fundamentally, it's that I am with a bunch of believers, we all want people's lives to be better. We want teams to function in a more sane and relaxed and effective and fun way, and get stuff done. And that belief is so so at the foundation of this company, and everyone there. Okay, so, yeah,

Jeroen Leenarts:

start doing unit testing people. It's where it starts. And then from there, you can slowly adopt more good practices and, and just come to grips with the complexity that software development really brings. But John, did, did we forget anything that to mention anything that we could talk about? Or are we pretty much full circle because I underestimated your your resume a little bit, because with all the things that were on there, because there was so much that we could dig into there. But I think we covered most of it, right? At least the important bits. And I think the DD biggest important bit is actually that one manager at Adobe, that mentioned to you, Hey, start writing some stuff. Maybe it's useful to your colleagues and then from there things over the years, sort of like snowballed for you into something that was completely different than you initially expected, then ending you up at at the job that you're currently at right now. Industrial logic, and, yeah, well, what do you expect for the next couple of years? It's It like, just keep on, keep on preaching the way of software development in an agile way with unit testing in place, or what do you think?

Jon Reid:

Um, yeah, probably more and more of that. There, I am continuing. I do want to get back to more of my personal blogging, I feel like I, the volume of traffic on of my content has gone down significantly on my site, mainly because I'm spending so much of my time doing what I love, professionally, that I no longer feel the great desire to do it on my site time.

Jeroen Leenarts:

In a way, that is a good thing, right? Because it does feel that like the, with cue coding, you really enjoyed what you're doing there. But it was, if I read through the lines, hypothetically speaking a little bit, it seems like that it's a relief for you that you don't have to fuss that much and more about the real business side of things, you know, getting lining up the clients for keeping a steady income stream that says now people in place who take care of that aspect of business really is that is that the case in your situation? Yeah,

Jon Reid:

yeah. But I do want to start getting more content out there. And I have been working on a project, which is only just now gone, I've released the 1.0 version of. And this is a new testing tool for swift folks called approval tests. Approval tests have existed for some time in many other platforms. They were created by Llewellyn Falco. And essentially, you can think of it as like snapshot testing, but not for images. And it is a fascinating and fun way of working. It's a tool I've wanted. And so being able to be part of helping to create that has been has been fun. So yeah, go check out approval tests, I'll be putting out more information on that. Another thing that I've enjoyed doing, has been getting active on Twitch. I'm in live coding, trying to show people that the what when you look at a blog post or or a video that I spend time producing, it all looks wonderful, it's perfect. It has no flaws. And that's not the reality. In reality, I make mistakes.

Jeroen Leenarts:

It's like the the conference talk that somebody has like spent hours preparing and they do live coding, but I don't know how to do it, but they have to have snippets ready. And just at the at the blink of an eye, they just build up this entire complex thing that you go like fantastic. And you think like, oh my god, they're like, they're like superheroes. They're on stage. But it's the preparation that that makes it look that way. And with Twitch, I haven't fisted one of your live streams yet. But twitch your then live coding actually platform aimed at gamers but hey, sharing your screen. And that's and have fun. Why not? Yep. And and what are you doing then in these Twitch streams, you're just coding something or you have like a challenge that you then try and solve or what's the deal then with these sessions?

Jon Reid:

Well, he I've been coding and like I put up what became a long series longer than I planned of a tool that I wanted for my own purposes. And so I thought, well, I could work it on on it on my own. On the other hand, lots of folks wonder, yeah, okay, TDD looks great for FizzBuzz for something very simple toy code, but, you know, how do you actually do it? What does it actually look like? What does it feel like? And I wanted people to see that. And that's been a surprising amount of fun for me. Especially as as also Pete, you will get to see that I'm not the best programmer. Viewers who come in, they know much more about about details of and of systems of the things I'm trying to write. And that's great. It's super helpful for me. I just happen to come in with these good habits. And so we combine those powers and come up with good stuff.

Jeroen Leenarts:

So because I'm looking at the repository for approvals, approval tests dot Swift, and it's a lot of commits and most of them are either your name or some actions users. So I think some surface use that does something for you. But could you say that these Twitch streams that they basically have been a way for you to generate your own ensemble? So that you could do some ensemble programming on this specific bit of code?

Jon Reid:

It hasn't been for approval test. Okay, I have been I have been preparing regularly with Llewellyn on that. But it has been with other things, and yes, it is very much kind of like a not quite ideal ensemble, and that I am always the person at the keyboard. Yeah, you know, that's, that's, that's the drawback. But it but it is, I'll get stuck. And I'll say, Help. Help. And that's my call for ideas, like, you know, and, and my good viewers jump in, they start looking things up and offering suggestions.

Jeroen Leenarts:

And what is, what is the code base that you're mostly working on during your Twitch streams, then

Jon Reid:

it has been a thing to analyze. Until now, it's been a thing to analyze a survey I took of what people content people are interested in from me.

Jeroen Leenarts:

That's, that's kind of meta, but not in a bad way.

Jon Reid:

But that's finished. And now, I'm actually well, I have another GitHub project. That is a good tool for unit testing, alerts, alert controllers and presenting views and dismissing views. But it is not in Swift package manager, because it's partially swift and partially Objective C. And Swift package manager doesn't accommodate mixed languages at this point. Yeah. And so I thought, well, I need to rewrite it into all Swift. Well, why not do that together. So that's what I've started doing. The last couple times,

Jeroen Leenarts:

that's a, it's always worthwhile to have like a goal and then just start chipping away at it. And it seems like one of these tools, just a, let's see how much of this objective C code we can get rid of in this session. And that sounds like something that you can do in a perfect way in refactoring it with unit tests in place and not breaking those unit tests while you're working.

Jon Reid:

Oh, yeah, they have caught me and saved me.

Jeroen Leenarts:

Okay. So yeah, that's that's your Twitch streams? There was something else that you mentioned just back there. And that's the that's the approvals test. Can you explain in just a few words, what it is because you mentioned Yeah, it's kind of like snapshot testing, but not but pictures. What is it 10.

Jon Reid:

So if you have an assertion in a unit test, and you say, the expected, we get the actual value from of whatever, you know, whatever it is that we're testing, or verifying, and we compare that against the expected value, let's say it's supposed to be, you know, some string or something. And that can work very well, when the expected values are not big and complicated. It's very easy. But as soon as they become big, for example, a really long string, then it's harder to tell. Okay, so the the test fails. But why did it fail? What's what's changed? What approval testing does, is it incorporates your diff tool, rather than trying to be very clever about it is it goes out and says, Well, I know about these diff tools, I will invoke the first one in this chain that I find, and then you get your diff tool, and you can see with the power of your diff tool, exactly what part of it is different. And so it's good for long strings, it's good for a race, maybe, you know, one item in an array has changed. It's good for composite types that is like a struct with many properties and something in there changes. You can see that and then you can decide, is this the change I want or not? That is do I approve the the new result and approving it is just telling your diff tool? Make this like copy from left to right now apply all the changes, and then Save, and then when you rerun it passes?

Jeroen Leenarts:

Yeah. So this basically allows you to put tests on anything that you can represent as, as a textual format, right? So if you hierarchies, data sets, as long as you can, yeah, basically punch it down to text, then you can run it through this tool.

Jon Reid:

Yeah. And it has some Have extra smarts because a lot of times, if you write out too much information, then it becomes oversensitive. And it starts to break on things that you don't care about, or shouldn't care about, for example, if you get some JSON, and it has a date and ISO date in it, like the current date, well, that's not something you want in a test, because that keeps changing the time keeps rolling forward. Yeah. So there's this idea of a scrubber in approval test that says, let me do a regular expression search for ISO dates. And I'm going to call this one I'm going to replace this call it date one, and everywhere it appears, I'm going to call it date one. And if there's another date, I'll call it date two, and then you can then have those tests continue to work, but not be sensitive to changing values. Okay.

Jeroen Leenarts:

And and how far along is the approval tests? For swift two,

Jon Reid:

it is ready for folks to start playing with right? Just rolled out 1.0 A few days ago.

Jeroen Leenarts:

Okay, because that's what I was wondering because it's not. If you look at approval tests.com. Then at the bottom, it says approval test libraries capturing human intelligence available for Java, C sharp, VB dotnet. PHP, Ruby, no chess and Python. So I expect some some extra language to appear there. Pretty soon, right?

Jon Reid:

You know, I should, I should. Yeah, I should put that in the list of cool.

Jeroen Leenarts:

So um, yeah, I will make sure to link your Twitch stuff. And the approvals test library from the show notes as well, because I think both of them are very worthwhile for people to just have a look at. I haven't looked at approval test myself yet. Because, yeah, I didn't know it exists yet. But it's new. But knowing that you're one of the authors are actually the main author on it that already gives me like, high level of confidence that it's, it's something worth checking out. And, yeah, I'm really curious to see if this is something that will take off and what people will think about approval test, because it's, it's a relatively new concept, I think, for most people doing software development. And yeah, I'm glad that we were able to talk about this as well, in the end of the recording that we did, John,

Jon Reid:

I'm glad you, you know, you said, what did we miss? And I'm like, I'm not sure we covered everything. Oh, except for this, that. And the other thing?

Jeroen Leenarts:

Yeah, well, that's always the case. Like, with natural, organic conversations, it's always like, people always have like memory that works in in strange ways that something that's very important to them. totally forget about it. And then at the end of the conversation is like, oh, I should have talked about this. And this and this, which is very normal, I guess. So I'm John. With that. I want to thank you for your time, because we're creeping up to already past our allotted hour of recording time. So this is going to be like one of the longer episodes from from a podcast, which is fine. And yeah, I just want to say like, I hope that we can meet again, rather sooner than later. But yeah, we'll circumstances because it never set set right with me that the way that we had to say goodbye back in 2000, to 2020. And because it was like, we had all kinds of plans. And then all of a sudden, like last minute, we switched everything to an online format. And we didn't even get to say proper goodbyes anymore. Because we had some in person trainings at my damn job. And then we did some extra work. Workshop and we had all kinds of plans, but it just, but it worked out in the end, but it was a little bit in the way that we just made the best of circumstances. And yeah, I think we should do like a retry of this social aspect of meeting people by get to say like a proper goodbye at the end of the interaction.

Jon Reid:

And I would love to get back out to your neighborhood sometime.

Jeroen Leenarts:

Maybe I'll I'll get to your side of the ocean as well. Because who knows? John, thanks for time and hope to talk to you soon.

Jon Reid:

Thank you so much for having me.

(Cont.) Jon Reid, book author and iOS Unit Testing Champion