Productivity

Content creation as a career path for developers

In this episode, I talk to Florin Pop. Florin is a web developer that started building websites in 2013 and worked many years as a successful freelancer. I know Florin from his super-popular YouTube channel and his funny and inspiring Twitter stream. In this episode, he explains how content creation became a lucrative career path for him. 

We talk about:

  • how he turned from developing software as a freelancer to a successful content creator
  • his recipe of success through failure and smart goals (e.g. specific and measurable goals)
  • his journey to more than 100K YouTube followers.

Book your awesomecodereview.com workshop!

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript: 

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

[00:00:00] Michaela: Hello and welcome to the software engineering unlocked podcast. I’m your host, dr. mackalya and today I have to pleasure to talk to Florin Pop.

But before I start, let us talk about this extremly long, and very unexpected break. You must have believed that I might never come back. But thankfully, that’s not the case.

In fact, I actually came back bigger and multiplied… Yeah, from today on, I’m not doing those interviews alone anymore, but I have a little intern for the next couple of months – which is sitting right in my belly. So far, the intern has not been very helpful I have to say – instead, I got horrible morning sickness, which is also called hyperemesis. Well, that’s also the reason why there was this long, unannounced and unexpected break. But I had a good talk with the intern and put it right on a performance improvement plan, and yeah, it seems we are slowly getting better.

So, we both started working on new episodes for you again. During this break, I also decided that it is time to shake things up a little bit. I will start to experiment with the format and content of the podcast.

I have a couple of ideas that I will try out and see how you like them. So, stay tuned for new episodes! But now back to Florin and his insight into content creation.

Florin is a web developer that started building websites in 2013 and worked many years as a successful freelancer. I know Florin from his super popular YouTube channel, and he’s funny and inspiring on the stream. He’s dedicated to grow and learn in public. And what fascinates me the most is this Florin always is humble, honest, and very, very kind. So I can’t be happier to have Florin here with me. Florin, welcome to the show.

[00:00:34]

Florin: Thank you very much. And thank you very much for the kind words that oh [00:00:39]

Michaela: yeah. I’ve been following for, for quite some time and I’m really always impressed , . It feels very authentic. If you do a YouTube channel, if you do your challenges and how you share what you’re learning. And also sometimes you’re vulnerable, right? If people, you know, online can be a rough place, you probably know that. And, and I think it’s really important to also show that, you know, words can harm and can. Yeah, you can feel it. And I like that, that you shared that. Like, if, if you are deep down, you’re sharing it. If you have like success, you’re sharing it. And I always feel like you’re very, very honest with your journey and not everything is like super fine. And, you know, I’m writing three blog posts and now I’m famous and make the most money or something. Right. So yeah, I always say, give and take, [00:01:29]

Florin: right? Yeah, exactly. So this is how life works. You have successes and failures and some days you’re doing great and other days it’s not so great. And I like to share that and to, because. I always, I’m thinking of people who are following me. I want them to learn the most after my experience. This is one of my values to share what I’m learning and alongside my journey. There are also failures and I’m messed up a lot of things. Usually people are kind of afraid to share that because you have to be vulnerable about those. But if you don’t do that, especially as a influencer quote it just sends the wrong message that everything’s perfect, but in reality, not everything is perfect all the time. It’s just a continue grind of doing your best every day. And sometimes you mess up things and that’s okay because that’s how we learn by messing things up and. [00:02:34]

Michaela: Yeah, it’s true. Like, it’s really easy to say for others always. Oh, it’s, it’s totally fine. It, I think they are. They’re also forgiving for artists very much, but not so much for ourselves if you’re messing up. Right. And you’re afraid to, to show that things are not. Not going as well, or, you know, we made this big goal. You make this big goal, right? You said like 100 K you didn’t say many how many days. Right. But you said 100 K so it’s a list, but you know, like, can you fail with that? How would you say it? Would you say, oh, it didn’t work out or, you know, and actually. [00:03:09]

Florin: I like to create big goals for myself. This is probably the first challenge where I didn’t have a deadline for, for it. For example, 365 years days of running everyday, I did 100 projects in 100 days. I did, when I started my YouTube journey, the first challenge was 31 videos in 31 days. Then I did the frequent camp curriculum in a month. So everything kind of was kind of had a deadline because. Those are called smart goals. They have that deadline aspect of it. The reason why I didn’t add the deadline to this new challenge, which I’m currently working on going from zero to 100 K I mean revenue is because I wanted, I, I just feel that there are so many variables. I don’t know. And I didn’t want to put a lot of pressure on myself, although I kind of have a deadline of one year, 1.5 years, roughly, I don’t want to go 10 years with it. And I’m sure that I, so I have kind of a hidden deadline for myself. Oh, I don’t make it public. Although in some of the streams, we talked about it when we kind of decided, okay, how many projects I should work on? What should they do? And what are kind of the deadlines just to see, just to keep track of what’s happening. And I think that’s, for me, that’s highly motivating because this is how I worked in the past couple of years. I just. These kinds of challenges got me out of my comfort zone. Also the public aspect where I share on, in public, what I’m doing is what makes me kind of have to do it because now people watch me and, you know, I, I it’s okay to fail. But like, The challenges, which I’m doing. I try not to make them super, super hard. Like, I don’t know, make 10,000 pushups in a day for 100 days, you know? But rather make 10 pushups every day. For one of the days, it’s more about the consistency aspect than having crazy, crazy, crazy goals. I might do that, but like with shorter, like 10 days or something, Yeah. So it’s going [00:05:31]

Michaela: into the building. I have it building thing, right? So I say tiny habits are actually better for, in the long run. [00:05:37]

Florin: Right? Exactly. So it’s not about doing super, extremely hard things, but then just doing something which is relatively easy to do, it’s just a matter of being consistent with it. And it will over time change. Change an area of your life. Like when it was for running, I lost weight that period, then I felt much energized and yeah, building the projects have learned stuff along the way. So it’s just being the consistency. Yeah. [00:06:08]

Michaela: Yeah. And so, for example, we’re coming back to the running because I also follow that one. I’m following a lot of things, but so you lost weight and then after the challenge, do you keep up with the things, do you still run daily or several times a week? And did you know, did the, the way you go up again or, and you share that as well? Like if it’s setbacks, for example, [00:06:31]

Florin: Yeah. So when it comes to weight, my weight journey II, it’s kind of rough because I did this like several times in my life so far, I would lost the way doing a challenge. Then when I kind of gave up on being public about it, I started to go back to my old habits and I got some of it back. So right now I’m. Doing on tick-tock I’m doing this weight loss challenge again and I’m sharing what exercises I’m doing, what I meeting everyday, just to, again, hold myself accountable. And what I’m trying is to, which is really tough. This is one part of my love with my life, which is tough for me is to not only lose the weight because that’s relatively. it’s just the map. If you have ambition, you can get it done. You just said, okay, for the next three months, I want eat and healthy. I will do these exercises. And it’s that the most challenging part is afterwards, like keeping the weight off and keeping the habits. So that’s where I’m a. Kind of going now is to build a healthy lifestyle, which can continue after I lose the weight. So I want to keep it off for good. And it’s still a challenge for me. It’s been going on for a couple of years now. But yeah. Yeah, I think a little learning and [00:07:55]

Michaela: yeah, I think having a healthy lifestyle is a challenge for, for many, many, many people. Right. Be it sleeping enough, eating healthy, you know, don’t not gaining weight. I think also sport, like sport is something. I have a lot of friends that don’t do any sport and I’m like always, I’m always amazed. I also have two. Struggled quite a bit to make enough place and space in my life to do sport, but I always do some kind. I mean, there are always like weeks you know, where I didn’t do it or sickness, for example, I was very sick at that time. I didn’t do sport for a really long time or what I wouldn’t consider sport that the, you know, the doctor would consider it even sport like walking and things like this. But in general, I try really to make sure. You know, I also needed, it’s also for my health, for example, for mental health. I always feel much better if I, if I do, if I do sport, but yeah, it’s, there are people that don’t do any sport and I’m always amazed. Like how, how are you doing it? Like, I really feel completely. And ease and very unhappy. So yeah, maybe everybody is different. Right. But I think a lot of, yeah, [00:09:06]

Florin: yeah. He’s like, so we are different and some people can just have a great body and all of that without doing any exercises. With eating like junk food and all that. For me, you can quickly see that. So if I don’t take care of myself for a couple of weeks and I start eating junk food and stuff, it just, you can clearly say not only that my mood is going down, I don’t have energy. And part of my reason why I’m doing I’m working out and all that is because of that energy, I need a. What I’m doing now as a content creator, making videos, live streams and all of that, I need energy and I need a clear mind to be able to do that. And for that, I need to take care of my health. I need to go to sleep early. I need to eat healthy exercise and follow the. I mean, I guess everyone knows what are the good habits to do in this area. It’s just sometimes we, we mess up and it’s okay. So if we mess up once it’s okay. It’s not the end of the world. It’s just, the problem is when we do it through Peter Lee for weeks, that’s one, that’s when sort of say that our lives. Yeah. [00:10:24]

Michaela: Yeah. I think can even, you know, mess up for several years and still start today and say, well, today’s a different day. Right. So yeah, exactly. Yeah. I have two little kids and I have to say it’s so much more challenging to do all those nice things with little kids, because like, for example, sleep. I mean, you can, it actually messes you up. If you have like this goal of having a healthy sleep habits and you have like a newborn, I mean, it’s just two competing goals that are not, you know, you can’t, you can’t do them at the same time. And I think it took. It took almost three years that, you know, each of my kids, you know, we’re able to slip through. And so until that time, there is no healthy sleep you know, balance, for example, for yourself and with the sleep thing, you know, a lot of other things deteriorate because you don’t sleep, you don’t eat healthy because you’re like just not, you know, really awake and not clearly thinking and so on. Right. So that’s, I think, and the same for sickness or other things, right. Just struggles in your life. And I think that’s okay. Yeah. Whenever you wake up and you can try again and maybe you fail and you know, don’t give up. I think this is probably the most. [00:11:32]

Florin: Yeah. Yeah. This is something I like about what I’m doing now is that I’m okay with failing for me every day is a new day to do things. If I mess up, for example, last week for a couple of days, I felt unproductive and that and that for me was okay. I accepted that, that it was okay for me to be unproductive because now it’s a new week. It’s a new day and I can pick up things which were not done last week. So it’s okay to always like, give yourself this. Boost of all right. I messed up, but it’s okay. I can start over and I can do it right to this time. [00:12:19]

Michaela: Yeah. And so content creation, this is really the big thing now in your life, right. It’s also where you build your business around and how did that come about and how do you, how does the monitorization work? Can you live from it or, you know, how long did it take you to live from it? I think content creation. A dream of, from many people. And then the question is, you know, is it really working out or is it not working out? Do you think that you can sustainably do that for a long time? [00:12:50]

Florin: Yeah, so I expected as a content creator on my blog writing articles. This was in 2019, I think in February or March, I posted my, I restarted blogging because I had like seven articles. But they at least started logging in. I did it sort of consistently three blog posts, two or three blog posts per week. I had a job back then. And it just said, okay, after my day job, I’ll just write something because it felt like something fun to do. And they always wanted to get down this path of blogging and creating content. So I started blogging and at the same time I picked up a Twitter and I started sharing on Twitter. I started to be active on Twitter, really. I think I spent hours and hours per day on Twitter, interacting with people, with people, replying to them and all that. And it took like six months. Well, the, the plan was actually to leave my job. Next year. So in 2020 January, that was the plan they need for plan. So I’ll just try these for 10 months and see how it works. And then if it’s all good, I’ll just quit my job and do this full time. But then on June in 2019, so six months prior to my actual deadline, I was like, I told my wife, you know what I just, I want to do this now. I mean, we had some money saved up from the job. And I was like, you know, let’s, let’s do it earlier. I mean, if it failed, I failed in six months, I’ll get the new job and it should be okay. We use the savings and it was an interesting journey. I can say that it was tough because my focus wasn’t. Monetization. So just imagine, like in the first month I gave up my job, I made 150 bucks. So yeah, it went down for several K two to 150 bucks. But for me, that was okay because I never. I didn’t chase money in the first year or so of concentration. Right. I liked what I was doing. I wanted to grow my reach to grow my audience, to get in front of multiple people. And I knew that it will pay off one day. And they did that for, so basically I was blogging for six months or so. And then in November, that year I started my YouTube channel. And in 2020, my main goal for the year was to get 100,000 subscribers in a year. And they started working really, really hard on that, I think in six months or so I published over 200 videos and livestreams on my channel. Yeah. I was in the crazy, crazy mode where I was putting out content like crazy. Of course it wasn’t like. Highest quality and all that. But for me it was a great practice. I, I know people say quality over quantity, but for me it was quantity brings quality. So I was pushing out a lot of content and see what works and then doubled down on that and made it better and better. And I got monetized in February 18th or March. No, it was in March. 2030. I was monetized. Quickly compared to other YouTubers. And probably because I also had an audience on Twitter, so that helped. And then the amount of content I was putting off out was was a lot. So that helped as well. But from the YouTube revenue side, it wasn’t a lot, it was like probably $400 a month or so. Yeah. After two months or so, I don’t, I don’t remember now exactly the numbers, but the peak on my YouTube channel. Was it September where, when I did a live stream, another challenge, 10 pro 10 JavaScript projects in 10 hours. I just got the idea that morning and it was like, okay, I’m going to go home prepared. These inches go live for 10 hours to do 10 projects. Wow. And that turned out to be great. That video now has over a million views. Wow. And brought in like three or four K sense. But like when it comes to YouTube, the trick is that YouTube revenue from ads is oh, okay. It really depends from which, what, which part you’re saying now is roughly seven, $800 per month. So it’s okay. It’s probably not lots of people can live off of that, but the, the main source of income from YouTube is that the audience, where if you create a digital product, you can sell that digital product and you can also have sponsors. So those two combined will bring in more revenue. Yeah. That combined with some, I think I had a couple of projects for someone I managed to get past to that period of low-income and now the digital products are making good income. Roughly 3, 4, 5 came depends on the month just from digital products, which is mostly passive. So there, the products are out there. And they’re just selling on their own, I guess that’s your book, for example. Yeah, so I have my ebook and I have a course on you than me, and they’re both both doing this. Like [00:18:27]

Michaela: that’s not counting them for the zero to 100 K. No that’s so exactly. [00:18:35]

Florin: Exactly. So those projects I bead last week last year, and I’m not comping for challenge for, for this challenge, which has started. Two months ago or one and a half months ago. I started from zero. So everything I’m monetizing in, the challenge is built during the live streams. I go live every day from Monday to Friday and I build something and the things I’m monetizing then are the things which come for the challenge. Because right now I also have some sponsors on my YouTube channel. And they can’t add that too. I don’t feel like it will be okay to add that to the challenge because it kind of uses my audience before the challenge. Right. There’s just some extra income which I have. And it’s not for the challenge. The challenge is something else in it. [00:19:26]

Michaela: Yeah. And so today I went on YouTube and to your profile, and then I saw that now you can not only subscribe, but it seems like there’s a membership thing on YouTube. Now, is that something that you offer and you see that it’s working already? Or how does that work? Yeah. [00:19:42]

Florin: Yeah. I offered this for quite, I think over a year now. And it’s. It worked out well at the beginning, when I started to promote that I had, I mean, well, I had several people who subscribed who became members, but it’s. I don’t know if people can rely that maybe if you offer something valuable, it can work out. Well, it’s sort of like a Patrion, but it’s built into YouTube. So if you have something to offer you might get more people to become members. For me, it was just like, Hey, if you want to support, become a member. So that’s not like a high incentive to people. To become a member. Yeah. I still get one. She remembers every now and then, but it’s not something you can at least not for me because probably I haven’t laboratories date to the maximum. [00:20:35]

Michaela: And so what do you do members get? Do they get something else or is it just really that, you know, they, they get the same public videos and it’s just like, they support you and they want to be. [00:20:46]

Florin: Yeah, so you can do like sky’s the limit through that? For me right now is you get the special badge and you get your name collar to the live streams. You get some special emotes who can use. A lot, a lot of value there. That’s why probably I don’t have a lot of members, but you can do that. So you can have specialty videos for those members. You can offer them a one-on-one consulting or coaching, or you can send them a discounts on your products and like the sky’s the limit to. What you can use it for. I’m just yeah. I even forgot. I have that enabled. And now you also have a button, a YouTube. They added it recently where people can thank you. So they click the button and they can donate you. If they liked your video, they can donate a, I’m not sure if anyone used that button so far on. I’m not sure if where I can see that. So, and people also can donate through the livestreams. And I got a couple of those along the year or so I’ve been streaming probably for streaming. I’m still debating, which is best YouTube or Twitch, because I noticed that on Twitch people are more likely to support creating. And like donate more become members and all that. It’s just the communities built around, you know, supporting creators on YouTube is more like people come to watch polished videos, which are edited and all that it’s nicely placed. So they’re not that popular right now with streaming. So probably that’s why. People, at least in my niche, people are not. Likely to donate, [00:22:36]

Michaela: but how many people do have on your life? Coding streams onto it? [00:22:40]

Florin: It depends on if I like, for example, last week I had a special livestream where I announced it two days prior to the event and I had over a hundred people joining me, but in the day day by day-by-day stream, I gets 30, 40. Tomorrow or less that [00:22:59]

Michaela: are, that are following you and your [00:23:02]

Florin: staff. Yeah, but I mean maybe some of them leave and others join, but like an average of 30, 40 people tuning date. I mean, that’s the number I see of viewers at the moment, but who knows how many people show tonight? [00:23:20]

Michaela: And so you, do you use restream Dan too, or something like that, the platform stream your Stritch video also on YouTube and the other way around or? [00:23:28]

Florin: No. So right now I’m only streaming on YouTube. So I’m using just OBS to stream directly to YouTube last year I streamed. So I started streaming on YouTube last year, then I moved to Twitch and now I’m back on YouTube because I just felt like I have a big audience here. And I don’t know. I was thinking that I’ll get more viewers over time. I still don’t know. I might have to test multiple times to see all right, which is best Twitch or a year to maybe just keep Twitch for streaming and a YouTube for videos. But I found myself that that was too lazy to just take the videos from Twitch and upload them again on YouTube. So I I’m just dreaming now because. Easier for an hour. The goal is not necessarily to have the streams go out to thousands and thousands of people because I only see them after a day or so. They’re not very polished. So the goal is to have a place where those who are interested to follow. Day by day didn’t know that, okay. Flooring is life this hour everyday. Let me check what is day. And I’m also doing recap videos every week. Now I messed up a couple of weeks, but the goal of the recap videos is shorter videos, which kind of describe what I did in the past week. And those should like push out the challenge idea to more people and get more people. To eventually join me. [00:24:56]

Michaela: Yeah. So I have been streaming on Twitch for, I was 2019 a long time ago. I actually almost said, no, it wasn’t. 2010 days, sorry, 2020 last year for a month. And also for like my challenge of building, you know, building a tool within 30 days. And I also went live every day was very, very nice. I was a little bit exhausted to be honest, after 30 days with like, oh my God. And it was fun, but I also feel like it’s really hard to do something meaningful in an hour. Without really preparing for it. Right. So this was also always like great, just jumping in and doing it on the spot. And, and then even talking with people, like if people are coming you’re a little bit chit-chatting and then really getting something done, I feel it’s very, very challenging is it’s something that you felt you grew into and you just got some more, you know, some muscle memory to do it better. Or do you prepare before the stream or how, how do you. [00:25:58]

Florin: Yeah. So I have to agree, like it’s very exhausting. For me, I just, I kind of noticed that after two hours of going live, building, researching, brainstorming, chatting with the people from the chat for two hours, I’m just dead. Like it just can’t function anymore. I need an app very bad. It’s just, that’s how it is. I mean, I can think on my head hurts from after two hours, because I think. Too much going on because I’m also coding and thinking at the same time, because it’s not something I know by heart. So I have to research it. I have to think about the things I’m doing. And at the same time, people from the chat are talking with me. I have to interact with them. So it it’s, it’s tiring. But I liked the, I liked the fact that I do this every, every day and the, it just. To be honest, some of some days, this is the highlight of the productive part of the day for me. So if I didn’t have this, I wouldn’t do anything that they, so for me, it’s. Motivating to keep doing something, even if it’s just for 30 minutes or an hour, it’s doing something towards the goal of what are a cake. And like the money aspect is nice. It’s kind of intriguing for people to join and see, let’s see how much money flooring made. But for me, the real goal is not necessarily the 100 K in revenue. I could make that it don’t have to make it public. I almost did that in a year, so it’s not the, I it’s it’s possible, but for me, it’s just who I have to become, what skills they have to learn and develop and what knowledge I need to learn along the way to be able to do this. And I also do it publicly. So it’s, it’s more about my personal growth than it is the money aspect. That’s what motivates me. So the money goal is nice. We could public people like to chase those things. But yeah, it’s more about, because I’m also going out my comfort zone because I’m building projects to monetize them. So I need to maybe learn new skills of how to develop a proper database and how to get that education and how to design well and market and all that. So there are new skills I have to learn along the way. And that’s, that’s motivating for me and hopefully inspiring for others to get out of your comfort zone and money is just a return of the value you bring and grow to have. So it’s just a matter of time afterwards. [00:28:35]

Michaela: So it seems like you never suffer from analysis paralysis, right. Where you’re like, oh, what should I do? Oh, this or that? Or they say that, how do you do, do you just do all of that? Or do you feel that [00:28:47]

Florin: something. I feel that probably all the time is just the chat helps. So whenever I don’t know what to do, usually what I try to do is to set the side tasks for tomorrow. So whenever I’m live and I have inspiration of how to develop the project to bring it to the next level, I just write down a series of tasks. So then tomorrow, when I’m not that inspired of knowing what to do. I just have the tasks and another thing which really helps is the chat. So I have a couple of people who are joining every day and just having people to bounce off ideas and they give you feedback and their critique, your work is it’s a great way to have something to do. But I, yeah, sorry, [00:29:38]

Michaela: man. Do you know how, how old. Audience is, or the background or the new developers or the senior people are they’ve maybe indie hackers as well, or, [00:29:54]

Florin: yeah, probably those who follow me along everyday are indie hackers or at least want to be in the hackers. The reason why, like I have 115,000 subscribers, but. Dan’s joined the live streams and there isn’t why is that? Because most people who subscribe to my channel, they subscribed for my tutorial. So like probably they want to learn to code, but what I’m doing now in this challenge, basically it’s not necessarily beginner friendly, although I kind of try to make it beginner, flan friendly, where we build a project from scratch, but there are. Some things which go out of that comfort zone is some things which are more of a business related thinking. And not a lot of people are interested in it right now. You know? So most people who follow me day by day they are interested in this like building projects, monetizing them and work for themselves kind of. Entrepreneurial stuff. [00:30:57]

Michaela: So you have actually two, two sort of niches. One is the indie hacker niche where you have, you’re building a following and then you have that mixed in with the, I want to be a developer niche. Right? So teaching niche, do you want to have them separated more? Do you feel like. You started off it, for example, teaching development. And now you want to be more in the D you know, indie hacker space, or is that both that represents you? How do you think about that? [00:31:27]

Florin: So throughout my journey, as a content creator, I mostly shared what I was doing. So I started off as a blog. Right. I was posting articles. Then I moved on to YouTube creating YouTube tutorials, and now I’m moving on to being an indie hacker. So I’m kind of doing my own journey and. People who follow some people follow me for me. But then I have separate audiences for those separate stages. As I said, most of the people I most of the subscribers I gathered along the past year or so were those who are interested in learning how to code, but now as I’m approaching like a new direction, some of them will be interested in this too. But I’m also now targeting another audience for me most, most about my own growth. And I know that if I learn stuff and share stuff, people who also want to do the same. The same things they will follow along. I know that with this new indie hacker kind of journey, I’m not targeting my older or my old audience. But that, that’s fine because it’s, it’s a progress in my own life. I’m just, I want to be I feel like I would be starting. In a place if I just don’t grow, you know, and I will continue to address that audience as well with tutorials, but my life goes on and I learn your stuff and I, it. Move on, on a, on a new, because at the same time, there are so many YouTube stars out there doing tutorials for beginners and much less of those who just use the skills you’re learning. And building stuff, monetizing them, be your own boss. Yeah. Yeah. Kind of thing. I think that [00:33:23]

Michaela: that thinking and those fears around those thinking are very, very similar to those fears that you have. Oh, I studied computer science and now I want to be a writer. Oh my God. You know, my life will end. I’m even allowed to do that. Right. So these growing aspects, I think of people and, you know, whatever you set out to do, and then you grow and you realize actually something else. It’s happening in my life. I think this is very important that we acknowledge that and that it’s really normal and it’s okay. Right. You, I don’t know, you studied history and now you want to be a developer, go do it. Right. And now you did those videos and you want to be, you know, want to do other videos that are following along your life. I think that’s a super important and we shouldn’t be afraid. I think it will work out wonderful. You’re very charismatic. So I, I was really happy that you have been on my podcast today and to talk with me about all of those things, content creation, monitorization, building an audience, and I will definitely follow you. I will link everything down in the show notes and yeah, with those words, thank you so much, Lauren, for being on. [00:34:31]

Florin: Thank you very much for having me was very nice step. Yeah. Thank you, [00:34:35]

Michaela: flooring. Bye-bye [00:34:36] Florin: thanks. [00:34:38]

Michaela: I hope you enjoyed another episode of the sup engineering unlocked podcast. Don’t forget to subscribe and I’d talk to you again in two weeks. Bye.

Driving innovation and engineering practices with Dr. Holly Cummins

In this episode, I talk to Dr. Holly Cummins. Holly was the development practice lead for IBM Garage for Cloud, before becoming an innovation leader in IBM’s corporate strategy team. She drives innovation for companies in various industries, such as banking, catering, retail, or even nonprofit organization. She is also a Java Champion, a JavaOne Rockstar, a published author, and a regular and vivid speaker. 

We talk about:

  • What it takes to drive innovation in an organization
  • Test-driven development (TDD)
  • Ensuring a healthy and welcoming company culture
  • The benefits of Pair programming

This episode is sponsored by IBM – where innovation and transformation come together.

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript: 

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

Michaela: Hello and welcome to the software engineering unlocked podcast. I’m your host, Dr. Mckayla and today I have the pleasure to talk to Dr. Holly Cummins. This episode is sponsored by IBM. IBM not only produces and sells hardware, middleware and software, but also offers hosting and consulting services. The part that is the most interesting to me, is that IBM is also an active research organization, and an enabler for innovation and transformation. One interesting business area is called the IBM garage – which focuses on accelerating digital transformation, by helping people generate innovative ideas while it also equips them with the practices, technologies and expertise needed to rapidly turn those ideas into business value.

Dr. Cummins was the development practice lead for IBM Garage for Cloud, before becoming an innovation leader in IBM’s corporate strategy team. She drives innovation for companies in various industries, such as banking, catering, retail or even nonprofit organization. She is also a Java Champion, a JavaOne Rockstar, a published author and a regular and vivid speaker. So what should I say? I’m super thrilled to have Dr. Holly Collins here with me today. Holly, welcome to the show. 

[00:00:56] Holly: Thank you so much. It’s yeah, I’m really looking forward to our chat. 

[00:01:00]
Michaela: Yeah, me too. I mean, my introduction was really, really long because yeah. You have so many accomplishments. It’s really cool to talk with you. So how does that work? Driving innovations for organizations? Can even one person drive an innovation for a whole organization? Or do you need like, that everybody is on board. How do you. 

[00:01:21] Holly: I think one person can make a whole organization innovate, but one person can help create an environment where innovation flourishes. I think we’ve certainly all seen the opposite as well. One person, if they do it wrong, can really best innovation across the whole organization. And I think. With innovation. It’s about making this sorts of environments where ideas can grow and where there’s the second, the logical safety for people to express ideas, but then also the organizational tolerance for risk too, to be able to invest in those ideas. But then also I think you need some methodology or, or some rigor to try and. Manage your innovations, because I think a lot of us have as well have seen innovation labs where there’s all these amazing ideas and then none of them actually make it out the door of the innovation lab. And that’s fun for everybody, but it’s not really moving things forward. And really what you need is innovation that matters. 

[00:02:29]
Michaela: Yeah. . I’m currently working on a research project where we look at cultures, especially for development teams. How do they have their cultures? What makes them happy? What makes them productive? What makes them innovative and psychological safety and, you know, being able to speak your mind. This is also important. And I conducted a couple of interviews. I also have worked in different organizations and it’s just really tricky, right? I mean, it’s really tricky to be in a work environment and being able to voice your opinion. And some people get really lucky, but a lot of people really struggle with that, I think. And I don’t know if it’s, if it’s bigger organization, I can’t, can’t even say like a bigger organization. It’s more tricky than in, in smaller. I’ve been in startups. So you think, well, innovation should really flourish down. There were like brilliant people on the team, but they’re are also. They take all the space, right. They’re very dominant people. So then all the others conferee so much, then there are like larger organization where you can strive. Is there some recipe that you can recommend for people to, you know, follow to get more psychological safety or do you know, be, be more self-aware if others even can speak their mind or, you know, like, how does that work? 

[00:03:40] Holly: Yeah, that, that that’s yeah. Super interesting about the startups. I I sometimes feel at a disadvantage talking about culture cause I’ve worked for IBM, my whole career. And IBM clearly is not a startup. It’s about as opposite a startup as, as you can get in terms of its history. But one of the things that I. Like to talk about, which I think is probably quite related to your, to your research is the importance of fun in the workplace. And I deliberately talk about fun because it’s a little bit provocative because we all have this sort of instinctive reaction that says work is a place for work. It’s not a place to have fun. And so then. I think by sort of choosing something that seems counter-intuitive and then peeling away the layers to talk about why actually that fun environment is really closely correlated to a productive work environment. And I think as well, it’s, it’s quite closely correlated to psychological safety. And I think, you know, the psychological safety manual, certainly doesn’t say let’s have achieved psychological safety by, you know, installing. Ping-pong or, you know, that kind of thing, but, and it’s, you know, and I think what I mean by fun as well, it’s not those sort of that superficial layer of fun. It’s that, that deeper thing where you feel the connection to your colleagues and you feel the work gives you joy. 

[00:04:55]
Michaela: Yeah. I also saw that coming up in my own research, but also related research, right. That satisfaction, happiness and productivity. They are really concepts that are very intermingled. ? So engineers also having fun if they are feeling productive and productivity also means connectiveness. ? So a lot of developers that are interviewed, they talk about supportiveness and how they have to know that there is another person that I can. Call or no call before we could walk up to them, but now we call them and they are there and they’re helping us. If you’re stuck, we don’t see the siloed. Right. There’s a friendship coming up as a concept. Right. People want friendship in their workplace. Yeah. I can totally relate to that. I felt really lonely last year working as a solopreneur. And so that’s also why I stepped a little bit away and was taking on more customer work again, because now I’m in teams and I’m feeling, you know, I’m talking to people more and this is really, I mean, it’s also joy and yeah, so I can totally relate to that. How, how do you engage with organizations? So you are at IBM, but you got into different other organizations or is that all internally where you have like little labs that you, you know, that you try to get to flourish? 

[00:06:09] Holly: So my role at the moment it’s somewhat internal and somewhat external. We’re always working with clients, but sometimes I’m working with an IBM team who is working with a client, but in, in the garage we were, we were very outward facing client facing. And, and I think there’s, there’s lots of different answers for how do you engage with an organization? How do you change an organization? Right. The, the answer that we chose in the garage is really sort of support at the top and then making the change bottom up. So we would try and get buy-in from the senior stakeholder. And the organization wanted to try working in a new way that it wanted to try bringing some of these, the psychological safety in the innovation. But then also some of the other things that we talk about a lot, like, I mean, agility is an overused word, but that, you know, that ability to respond to change that, that tolerance for risk. But I think sometimes know. If if we try and make that change only at the top level, then it just ends up being as a lot of words on slides and so in. And, and there’s a lot of resistance to these ideas as well because people work in the way they work for a good reason. It’s not like everybody’s sort of set out and said, I know we’re going to make our organizational cut culture so that it, you know, crushes the spirit and destroys productivity. You know, the intention was always to, you know, to try and achieve something good. It’s just that the side effects. Yeah. We’re not good. So then what we do is we work with a particular team on a particular project, and we say, we’re going to, we’re going to do this particular thing and we’re gonna get a result and we’re going to do it in this new way. And you can see that while we work in this way. Actually good things are happening, not bad things. And bringing in dev ops, for example, hasn’t increased the, the odds of something bad happening. Look, we can show you it’s reduced the odds of something bad happening, and look, it’s actually made the process more rigorous, even though the process is also more seamless. And so if we can do it on this one project, that’s maybe not super business critical, let’s try and now expand it to the next project that maybe is a bit more business critical. That, that ripple I would affect because I mean, I think success is the best evidence. And so when you can do something and show the results, then that makes people much more keen to try it for themselves. 

[00:08:32]
Michaela: Yeah. So you are coming in and then you’re working with one team. And is it only you, or is it you and the team that’s working with that other team with that project? How does that work? 

[00:08:41] Holly: Usually we’d have a team. And I think the, sort of the, at that teamwork aspect is, is so important. I think going back a bit to what you were saying about the lockdown that even the most introverted developer, I think, you know, we, we get something. Team and the, the effects are much better as well. So we try and have really diverse teams in terms of the skills and the disciplines of the people. So normally what we would have is we’d have a handful of developers. We’d have maybe some, some architecture support. But then we’d also have designers who are really making sure that we’re focusing on. The humans using the technology rather than just look, it’s a thing and it’s shiny and I can install it and I can write code on it. And so I’m happy, you know, trying to sort of reel it back, but I’m glad you’re having fun Holly, but how are we making life better for someone else? And, you know, what’s good. You know, cause success for any software project. It’s not just, I did code success is something is better somewhere either at a business level or, you know, at a user level or that kind of thing. So on, on our side, we try and have this really diverse team, but then we also want to make sure that we’re co-creating with the client. So our ideal is that they’re bringing their developers along. They’re bringing their architects along. They’re bringing their designers along as well. And then they’re bringing a product owner because they’re the one who owns the vision for what we’re trying to do. And then that means that as well as making the thing we’re doing a skills transfer. And so I when I was first working in the garage, one of our, the the IBM sellers who we were working with got a bit grumpy because the, the sort of model that they had done was that we would do a thing and then they would sell training for the thing. And because we were. Co-creating that training just sort of happened on, on the job and it didn’t slow anything down. So we would be pair programming and that knowledge transfer would happen. And it would happen in both ways as well. So we, we know things about the carriage method that we can share. We know things about test-driven development dev ops, but then, you know, they’re going to know things. Or organizational context to say, ah, yes. When you want to do this, you need to tell, talk to Bob on the second floor. And so having the person who knows that pairing with you means that you don’t sort of have to go through this elaborate process of I’m stuck. Who do I talk to you? And then, you know, try and figure it out. And they know things about their, their business domain as well. And you know, the sort of the, some of these problems are really quite specific and niche. And, you know, you couldn’t have just a general consultant go in and solve it without doing that. Co-creation. Yeah. 

[00:11:24]
Michaela: And how long are those engagements normally until there is some transformation and some knowledge transfer, how long does it take 

[00:11:31] Holly: for the license? I don’t think the sweet spot is about six weeks, so that’s, that’s long enough to do something that’s really meaningful to get an MVP, but it’s short enough. That an organization will feel okay with the risk. Cause, you know, if we, if we sort of say, and, and, and as well, you want to make sure that at the end of it, those results are going out and are really visible. So having that short cycle and then say, okay, and if we’ve done it once and you like it now, let’s do it again because. You saw that result and it wasn’t this sort of really protracted process where it took 12 months to see any change. Yeah. 

[00:12:10]
Michaela: So you are mentioning already a couple of development practices, like Def ops test driven development, and you have, I mean, the development practice lead for IBM garage. So. Do you think, what are some of the development practices that you recommend that really everybody should do? Is it like peer programming? You also mentioned that or code reviews. What about testing? Do you think this is crucial? Do they have to do it? Can we just do it a little bit? Or can we just skip some of those things?

[00:12:40] Holly: Yeah. We sometimes have conversations about testing because. The there’s a trade-off I think between doing something quickly and failing fast and getting that rapid feedback and not over-engineering while you’re doing that and the enormous benefits of testing. So sometimes if we’re doing something that we know is going to be throw away, and I think there’s a lot of value in doing something that you know, is going to be thrown away. That is that, you know, sort of lean startup , methodology, maybe testing doesn’t make sense. But I think in general, The, the benefits of testing are so great in terms of the quality of the code, but also automated testing is absolutely necessary to support dev ops and dev ops is really. Necessary now in order to support any kind of automation and efficiency and any, you know, that, that ability to do those repeated deployments and the ability to respond, to change and to manage risk. Sometimes, you know, you sort of hear these stories of something that goes wrong and then an organization doesn’t have any way to make a change to fix the problem, except either to go through. Lengthy process or to completely short circuit and bypass the process and, you know, have someone secure shell into the effective machine. And then they change the things by hand, which is obviously not going to be particularly robust in terms of the repeatability or the safety or anything. So you sort of get this chain where you. Do dev ops, because I know it gives so much better results in order to do DevOps. I need to have automated testing. If I’m going to do automated testing, I want to do it with test driven development, because that gives so much better quality for the tests and it. ensures the testability of the code and as well, I think one of the biggest benefits of test driven development is really to refine our understanding of the problem as well. Some people call it tested and design rather than test driven development because of that effect that when I sit down, I think we’ll see, what am I really trying to do? How will I really know what I’m successful? Let me write a test for that. And usually what we look for with a test is something that we would have been looking for manually. Anyway, you know, I go to a web page and I see this, or it prints this. It’s always, you know, we’re always looking for some evidence. We just try and encode that, looking for the evidence in, code, which is efficient. Usually. 

[00:15:09]
Michaela: Yeah. So test driven development often is I see it a little bit synonym to also unit tests instead of integration tests. But now you also mentioned something like a UI test, for example. So do you have, like, do you make some distinction here and do you think one is better than the other? Do you see that there’s a shift nowadays in industry? I see a shift and a little bit that, what is your perspective on that? 

[00:15:33] Holly: Yeah. I mean, I like to do test driven development at, at all levels. So I like to do test driven development for my integration tests. I like to do test driven development for my unit tests. I think sometimes you do get a little bit tangled where you can’t have, you know, you sort of, you, you do your, you write your unit test and then it passes. And then in doing that, you’ve done enough that actually your integration tests is already passing. So then you’re. Catching up with your integration test a bit, but sometimes we do it the other way and we say, okay, I’m going to start with my integration tests. I’m going to get those integration test passing. And then I’m going to fill in a bit with the unit tests. But I think like, I don’t think it’s something that is just for one level. I think if it’s an outcome that you care about and that you don’t want to regress, then there should be an automated test on it. I mean, I, I. I’m a huge fan of contract tests as sort of an intermediate layer between the integration tests and the unit tests. Cause I think sometimes with unit tests, well, integration tests are really expensive to run in any kind of complex environment, especially once you’ve got 60 microservices. Good luck running the integration tests in any kind of regular way. But then with the unit tests, I think you can sometimes get the sort of abdication of responsibility where everybody owns their microservice and they run their unit tests and everything works great. And the system as a whole doesn’t work. And so somebody has to care about that at some point, but then you sort of end up playing this sort of. Sort of pass the parcel of responsibility, where everybody goes more, my services working as designed. And so then an on all the problems happened at the seams. 

[00:17:13]
Michaela: Yeah. , my PhD thesis was about playing in testing our plugging systems and how you test them. It was more or less also services, service oriented architectures at that point. Right. And it was pretty new. People were just jumping on that vegan and so on. And I said, well, you know, you were going to get a little bit into travel if you’re, if it stayed the same with how we are doing testing and nowadays but you’re also an expert for cloud computing. Would you say that in the cloud world, somehow testing or in general engineering practices change, is there, do we have an impact we should we or can be developed in a different way, test, deploy everything. Why is said the same? 

[00:17:54] Holly: Yeah, I think it has to be different in order to take advantage of the cloud. So one of the things that you’re almost certainly going to want to be doing on the cloud is, is that DevOps it’s that more rapid deployment. And then if you. Deploying rapidly. And you don’t actually know if your code works, then either you’re going to have an enormous issue in production, or actually you’re not going to be deploying rapidly, you know? So we still sometimes see these cycles where something is getting deployed to the cloud, but then there’s a three week UAT phase before anything can be deployed. And so then. You know, that just doesn’t work. It’s a waste of the cloudiness. It almost may as well be on-prem. So, so you sort of get this ripple back from, again from the dev ops, which you want to be doing to the testing to the TDD. 

[00:18:42]
Michaela: I also think like we had, we had very strict roles back then. Right. So whatever, like operations. Yeah. The engineers, the software engineers or developers. And we had like the testers, then there was like a time. Now we have this dev ops for, you know, at one point for dev ops, I feel like every engineer was supposed to be a dev ops engineer. And and then we had like the full stack. So you’re not a front end or back end, your full stack, your full stack from front end to back into dev ops to everything. And now I feel people start to struggle with that concept again. No everything because there’s so much to know that there’s not a single person that can be like this end to end dev ops engineer to front end you know, genius. You see dad, like is there, is there again do you see that there are more roles that are forming itself or a person is bringing more Def of engineer and then more of backend, more front end, you know, cloud maybe, you know, even more concepts that we have here.

[00:19:43] Holly: Yeah, that one’s a really tough one. And I, yeah, I sometimes sort of, and I think I sometimes talk to people who ha, who say exactly the same as you, that, that there are too many expectations on me and actually trying to do all of these things means that not only will I not be quite as good in all of them, actually, I’m going to be pretty inadequate in all of them. And are you sure that’s what you want? And so. I think there probably is, is a space for having those specialist roles. But I think part of the issue as well, sort of is there’s an organizational decision about where do you, where do you put the boundaries? Because I think we probably still do want to be saying. That if you are too specialized, it creates organizational friction because it means that you risk becoming a bottleneck or, or the opposite as well that it, you know, it means that you risk not being deployed because all of a sudden, none of the projects our organization is working on, have a need for your skills. And since you only do this one thing really well. You’re just going to be sat around and that’s not great for us cause we’re paying you and it’s probably not great for you either because you’re really bored. So let’s try and have everybody at least be able to do a few things and let’s have people really comfortable sharing their skills as well. Cause I think that comes back a bit to the pair programming and the multidisciplinary teams that maybe I’m pretty sure. Pretty bad at front end, but I know just enough front end that if I’m collaborating with a front end developer, I can bring my something else. And we’re still going to do a better job than if that front end developer was on their own. And we’re going to do a way better job than if I was trying to be a front end developer on my own. And so then you get these sort of complimentary skills in, in the pairs. 

[00:21:37]
Michaela: I think we are coming back again to the teams as well, or to the concept of a team. And that people are really strong as a team. Maybe they are. And there was like, I did an interview with it, very senior engineer. And what he said is like, , if you want to go fast, go alone. But if you want to go far, go with the team or with people. Right. And so this was indeed in one of the interviews about productivity and happiness and so on. And I think. I was also talking to Alex from FedEx and she was on my podcast. He’s a testing expert. And she was also talking about these teams where you have like a person that has a strong expertise, but then this expertise somehow overlaps. Right? So you want to expand your expertise to other roles. Let’s say you are a testing expert, but then you want also to understand development a little bit, then you want to understand maybe dev ops a little bit. Right? And so you’re having this. These shapes that are overlapping. And then in the same team, you have a person that is very similar to what you said, right? They are front end expert. And so you’re overlapping in your understanding each other quite a bit. Right. It’s good. If you don’t, if you’re not solely responsible for everything and you can learn from each other, I think learning is also such an important concept for happiness. Do you see that, that people want to learn? 

[00:22:47] Holly: Yeah. A a hundred percent, I think it’s, it is one of those things that motivates you at work. Isn’t it is, is that desire to learn and, and, you know, if you just do the same thing every day, it, I mean, it’s, it’s awful. Isn’t it? There needs to be something coming in. And I think you’re right. That, that does come back to that teaming that if you’re working in a team and people have different skills than you, then you’re, you’re automatically going to be learning. And one of the things that I always said about pairing in particular is, you know, there’s sometimes we put sort of a hierarchy on pairing doughy and we say, okay, so we’ve got the senior developer pairing with the junior developer and they’re teaching everything they know to. It always, it always goes in both ways. So as a senior developer, if I’m pairing with a junior developer, often they’ll know a framework I’ve never heard of. And so then they’ll teach me about that and they’ll know keyboard shortcuts. I’ve never heard of. So they’ll teach me about that. And so it’s always that, that two way knowledge transfer in, you know, independent of your position in the hierarchy or how long you’ve been anywhere. Yeah. 

[00:23:50]
Michaela: So I hear you talk a lot about pair programming, so. I don’t hear you talk about code reviews. What do you think about them? Do you do them, are they not that important? Do they compliment or do you don’t need them, if you do poor programming, how do you see 

[00:24:03] Holly: that? So my, my, my personal take is that one of the great advantages of pair programming is that it eliminates the need for code reviews. And we sometimes talk about You know wait, isn’t pair programming, more expensive. I’ve got two people doing the work of one person and, and, you know, there’s all sorts of reasons why that’s not true, but I think one of them is that otherwise you have, usually you will have a para-pro code review process at the end, otherwise, and that can be really expensive, so it can be expensive in terms of people’s time, but then it can also be expensive in terms of the sort of thing. Bottleneck and the blocker that it creates, and it can be expensive as well in terms of the, sort of the patterns that it encourages. Because if people know that when you put something in for code review, it takes three days to get it back and get it approved. You know, that’s maybe a pathological case, but it’s not that pathological people. Aren’t going to be putting things in every 10 minutes. You wait until you’re finished something and then you send it over and then you get this. Spiral where the person who’s doing the code review gets a mountain of code and they go, Ooh, I’m not, I’m not looking at that until I’ve got a bit of room in my schedule, which is three days later. And then as well, when they look at it, usually. I see a couple of things happen. One is that because it’s so much work, if there’s a really fundamental design problem, either it’s sort of too late and they can’t see it, or they do see it, but they think, oh man, you know, they’ve been working on this for three days. I can’t go back and tell them they should have done something completely different or that they shouldn’t even written any of this code. And so then the sort of the big problems don’t get fixed and. But then you think, well, but I’ve got to show that I did the review. I’ve got to show that I’ve got some value in this process rather than just annoying them by waiting for three days. Let me find the position of the semi-colon line 36. Let me comment on that. Then everybody knows I’m contributing. So you get this sort of bike shedding. And as you can tell, if I find the whole, the process for us one of the patterns that I really encouraged with the pair programming is that you rotate the pairs every day. So that gives you a much deeper code review. Cause I think otherwise you only, you get like one person’s code review, but then you sort of end up where two people can be wrong just as easily as one person or two. Certainly, you know, two people can be wrong. So then on the second day, A third person comes in and then there’s already sort of another built-in code review where they, in order to be able to contribute, they get walked through what was done the day before. And then they’re able to say things like, oh, well, but why did we do this? And here, why don’t we just try this? And it it’s, you know, it’s not a formal review. It’s an interactive sort of getting them up to speed teaching experience, but then it means that there’s this second chance to catch errors before. Developed too much, but I think, I mean, I think you probably are. You’re asking the question cause you, you probably have quite a lot of expertise on code reviews and you’re gonna tell me all the patterns where it does work, which of course it can, then it can work 

[00:27:07]
Michaela: with no, no, but I definitely did the recall and realize all the things that you said, because this are definitely really common problems that I also see that teams have. Right. So this is also one of the things by in my view, Teams come and they bring all really everything that you said, right? Like, and this whole chain of how it just doesn’t work. Great. How to process doesn’t work and where you, where you have this waiting time, where then the code reviews are too big, right. Or you’re done, cannot understand them. You still have to do them. What do you do? Right. So this, there is definitely this, this loop that you are describing. Totally recall, because this is, you know, this is the, the problems that all the people are bringing on the table when they’re coming in, when I’m working with it. Maybe what I see, I actually really liked code reviews because of this synchronicity. Right. So you can have them in a very lightweight way. I also see them complimentary a little bit to peer programming, but you definitely have to do them in a different way. Right. And I think what many organizations don’t understand and why we are creating this loop of yeah. Troublesome problems that we have, how we doing is that we don’t understand the goal of why I’m doing this. Right. What do we want to get out of that? And then also, okay, what do I want to get out of that? And how can I shape the process in a way that I’m getting this out of that? Because I really see that they have all these painful drawbacks. Definitely. But they also have like really wonderful benefits. So I think the most important is that you really understand. The pain points that you said very, very deeply, but then also, what can you, you know, what can you do to counteract them? How can you change your practice but, but I see, I see all the things that you say, and I’m actually a big fan of pairing as well. For me personally it’s very draining to do it. Like I love it from time to time, right? Like it’s the best where I feel like. You have your mentor there, or, you know, you have just this connection and the supportiveness with the people. So I totally enjoy it from time to time, but not too often. How often do you do pairing? 

[00:29:17] Holly: So what, what we used to do. In the, in the garage is, is we would do it pretty much all day, every day. And there was, there was a few advantages to that because I think one of the, sort of the hardest things of pairing is the logistics. And so then going back to the PA to the code reviews, you know, there’s some circumstances under which pairing just will not work and makes no sense because it’s, it’s so synchronous and asynchronous doesn’t scale. So, you know, you need to have that kind of asynchronous process as well. And if you’ve got Particularly, you know, if it’s something like open source where people are in different times zones and they’re working different schedules and some of them are doing it in their own time, you know, something like pairing it, it, you know, it’s almost off the table to, to begin with. But what we found is if we tried to be. Ad talk with our pairing, which of course works quite well for a lot of teams. We sort of, we never ended up doing it because it would be well let yes, let’s pair today. Yeah. We definitely want a pair today. Okay. So, so maybe after lunch. Oh, I can’t after lunch, I’ve got, you know, I’ve got a thing. Okay. Well we’ll maybe, maybe at two o’clock. Oh, I can’t. And then, you know, we, we settled that we’re going to start pairing at three o’clock, but then something would come up and then somebody would be unavailable. So by sort of defaulting to pairing, we’d keep our calendars free. And it was great actually, because if we got invited to. I’m afraid I can’t attend this meeting. I’m pairing. So if you interrupt me, you’re interrupting my hair as well as it was sort of, it was like this sort of intro we could block your time. 

[00:30:43]
Michaela: a couple of organizations that are working with and That we try something out and it looks really, really nice is that you’re doing code reviews on a particular time. And then it’s done by one engineer. Right. But they’re doing all the others can go in and now everything is via suit, right. As are our teams and whatnot. Right. So by that video conference, and so they’re doing this cultural view, right? Everybody that’s interested can join. Right. And those sessions really, really particularly work well. I’m very surprised by that, but I really have good feedback from, from different organizations where you know, you have this casual thing where people know this is happening, right. One person really drives the review and the errors can watch ask questions, clarification questions, or, you know, other things maybe learn just have their fairness. Have you tried something like that? Is that 

[00:31:36] Holly: we’ve tried some similar things? Not, not exactly like that, but that, yeah, that seems, seems really good. So we did I mean, one pattern of course is the sort of the mobbing pattern where we say We don’t just want to do it with two people. We actually particularly for knowledge sharing, you know, we want to do it with six people. So let’s all gather around the keyboard or let’s all gather on the zoom, but as well, what we used to find was, again, it’s that scaling that the pattern I described, where you rotate the pairs every day in a big code base. With a big team is still gonna be quite a while before you rotate round. And so then you do need something else. So what we’d sometimes do is on a Friday, we’d do a show and tell session. So it was, it was very similar to what you described actually, but we’d sort of someone would say, okay, well, I’ve just done this particularly evil thing in this part of the code base. And nobody’s sure. Yeah, understand what I’ve done unless I talk them through it, or I’ve just discovered this really counter-intuitive behavior in this library. Let me show you all what it does. So you don’t get called out the same way I did. So it was sort of partly a code review and then partly a, an education session, but it would just be really informal and just whoever had interesting code. Would show it and talk it through the rest of the team and then they’d ask questions and that kind of thing. 

[00:32:46]
Michaela: So maybe one last thing that I would like to talk a little bit with you about is because you. You actually transitioned a way, right? From, from being this development lead at the IBM garage. And now you’re an innovation leader in the corporate strategy team. What does that mean? And what, what’s your role there? What do you have to do? 

[00:33:05] Holly: So our, our, my role in corporate strategy, it’s really interesting. It’s because I’m sort of in the, you know, we’re sort of a headquarters role, so I’m sort of in the, in the heart of IBM in, in the center of IBM and I sort of get to see a lot of what’s going on and what we’re trying to do is we’re trying to. Really just be the, sort of like a free resource, both people and financial to try. And when we see something amazing that can’t quite happen because there’s some sort of blocker or there’s just, you know, it just needs a little bit of money to, to get over a starting line that we can sort of give it that, that push. And then hopefully. Make something amazing happen so often it’s where if we have a client team and you know, the client really wants to do something and we really want to do something, but just somehow it just needs a little bit of money just to demonstrate to the people who have the large amounts of money that this is really worth doing. And, and one of the things that we do as well, because I think as an industry, we’ve, we’ve moved a lot now, too. Every, you know, we always want to be trying to do things by actually trying them out rather than doing slides. So that that’s not, it was new when the team I’m part of was started. It’s not, it’s not new anymore, but still in a larger organization, you still sometimes get things that fall between the cracks where it doesn’t quite fit in, in anybody’s mission. But that means it’s actually extra important. So then, because, because we’re sort of central, we can bridge those, those internal barriers. 

[00:34:39]
Michaela: And do you still have a lot to do with engineering? Do you still develop software or is it more really strategic and leading that you’re doing right now? 

[00:34:49] Holly: It’s a little bit of a mix, which I think going back to what you were talking about with the learning and the, and the variety, I think it is good. So it means that whatever, whatever seems most necessary. We’ll do that. So sometimes it’s actually let me go in and architect this, let me, let me go in and out a bit of code. Let me, you know, I’m not a data scientist, but some of my colleagues are data scientists and they’ll okay. Let me fix your model for you. And then sometimes it’s more strategic and more making those connections to say, actually, I can see that this is going on in one part of our organization and something complimentary is going on in another part of my, let me connect those two, and then we’re going to get a better outcome. 

[00:35:31]
Michaela: Oh, that sounds like you’re really having a lot of hats. I really liked that when I was at Microsoft, also driving bit innovation there and having all these different hats, like you’re, you’re driving projects, but you’re also doing the implementation. I was mainly prototyping at that time. But it also means that you, as you said, you have to learn a lot. Did it take it a little bit to get used to that role and know what you have to do? Do you have like mentors that help you or is it. Structure around some, formal mentorship program at IBM. How does that work? 

[00:36:03] Holly: I think. With that kind of role where, where you have a lot of hats. I think it comes back to, to the team again and the sort of the resiliency and the team. So what we tend to do, because we’re doing challenging things and we don’t know in advanced necessarily what skills will be required is we, we do sort of go around in groups where there’s more than one of us. And then that means that whatever hat ends up being needed, there’s someone who has that hat and then someone else who can sort of shadow the hat. 

[00:36:34]
Michaela: Yeah. Yeah. That sounds really a great team to be in. Maybe the last thing really last thing. And then I’ll let you go. Or that I want to talk with you about is there’s the same culture eats strategy for breakfast, right? So, and what it means is that. The culture is of utmost importance. But also it’s a very vicious cycle that, you know, how do you get your culture to apply and how do you get your team members to, you know, like each other or at least respect each other, right. Especially if you have, so sometimes people have I also have that in my workshops when we are, you know, when we are working on these problems, that code reviews create right where we have, for example, very strong personalities in a team with very strong opinions. So it have problems, you know, like giving into, what did you hear? Do you have like do you have like some strategies for that? Do people do something to do, do some coaching or can you help can the team help itself? What’s your experience with that? 

[00:37:34] Holly: It’s. It’s tricky culture, because in some ways, some things about culture, you, you can change because you can, you know, sort of start with your small changes and then success is the best evidence. And then you can roll it forward and you can make those little changes to encourage psychological safety. And you can have, if, if the leaders are bought in, then they can make some of those changes as well. But part of it then does still come down to the people in the team. And that is often the thing that is. Most challenging to, to change, but, but even, even people I think are, are changeable. And I think sometimes characteristics that we assume are just this person actually are the context in which we put them as an organization or habits that they’d learned that with the right environment can be unlearned 

[00:38:27]
Michaela: or teamed up that makes maybe right or one person creates or reacts, but only two, right. Person, but to really the whole team dynamics. Are you are you a fan of like bonding sessions and you know, we’re people, what a team really can, you know, get to know each other, do you think that’s 

[00:38:45] Holly: I really like them, but I think they, they need to be done sensitively because they do end up sometimes not being very inclusive if we. If, if we choose something that half the team love, and then some people are sort of stood there going, well, this isn’t really what I wanted. So I think there sort of needs to be some, some pre-thought to, well, there’s everybody in the team going to like going out to a noisy bar or. Does that actually not work. And I’ve seen I’ve had some good conversations with people actually, when I talk about fun, because sometimes we get these sort of bonding sessions that get put into a team and we say, right, we’re going to have fun. Now we’re going to, you know, do our bonding and we’re going to go out to a bar and some people are going to know this, this isn’t fun for me at all. But then there can be alternative. So some teams, for example, they’ll play a board game at lunch. And so it means that people who need to rush home after school, you know, are after work to get kids from school or that kind of thing. You know, they’re, they’re included and people who don’t drink are included and it’s in sort of at work. So then it feels like an extra nice treat. It doesn’t feel like you’re sort of being required as part of your job to go out and do things out of hours, which some people really object to. And so then, you know, and there’s other things like, like that, or. This is a really old example because w w one of the other things that happened when I started talking about fun is lots of people told me about their workplaces and that the terrible unfun things that had happened. And there was a team and they were sort of there were a support organization, so they would work quite long hours and shifts. And it was a distributed team. So what they would do is AF after five 30, they would all play quake or doom or something like that together. And it was sort of back in the day when broadband at home was a luxury. So you would take advantage of your office network and they were, you know, they were, it was completely you know, a bonding thing. And they were told by management, if you’re in the office after five 30, you have to be doing work, which I just thought was. Incredibly short-sighted on the, on the part of the, that management to say, you know, your, your people are not on your time making the effort to get to know each other better and to work better as a team. And not only have you not, you know, encouraged this and, you know, put in money for cakes or something, you’ve actually told them they’re not allowed to do it. Yeah. Yeah. That’s very, 

[00:41:08]
Michaela: very shortsighted. Yeah. Terrible mistake. But sometimes I really like for management, sometimes I really ask myself. How can you make this decision, but you know, different story. Okay. Well, Holly I know we are on time, so thank you so much. I could have, you know, like talked with you another hour, but thank you so much that I could pick your brain about everything, about all your experience and you know, your knowledge that you have. Yeah. It was really wonderful that you have been on my show. Is there something that you want to share with my listeners? Did you think it’s important for them maybe around culture, happiness, fun productivity, maybe a little thing that they can start doing today? 

[00:41:49] Holly: I mean, I th I think, yeah, just to sort of think about those, those, those aspects of fun and, and think about how can I have more fun at work? How can I bring more joy, joy, and delight at work, but also how can I make. Those around me are also having more, more joy into life at work because otherwise it becomes a bit one-sided. Yeah, I 

[00:42:09]
Michaela: think in general, after Corona, I call it now after COVID right. I just say after, because it’s just nicer to say that I think we really have to come back to thinking more about others. I think we haven’t been thinking. Enough about others before, but I think, I don’t know how it’s in, in, you know, in the UK, but it, at least here, I feel people are more distance because of it. Right. And I really think we should think more about each other and you know, what brings us joy? How can we help others? How can we be nice to others? Right. Yeah. And I think this can bring joy again to yourself, right? If you maybe should think about how can I make the day, a little bit better for my colleague today? Or help somebody? I think this can be a cycle of positivity. I dunno. Like, yeah. 

[00:43:00] Holly: Yeah, absolutely. I think we realized one of the things that we realized with, with COVID is how, how much we need others and how it’s, you know, it’s not much fun without others. Yeah. Yeah, 

[00:43:12]
Michaela: exactly. I think so, too. So I hope you all can come back together and then really be nice to each other and care for each other. Yeah. Okay. So Holly, thank you so much for being on my show. Have a wonderful. In them. Yeah. I hope I talk to you soon again. 

[00:43:29] Holly: Yeah. Thank you so much. It was, it was great fun. 

[00:43:32]  Michaela:  Yeah. It was really fun.

Better collaboration & performance through diversity and inclusion

In this episode, I talk to Trier Bryant and Kim Scott who co-founded the company Just Work which helps organizations and individuals create more equitable workplaces.

Trier Bryant is a strategic executive leader with distinctive Tech, Wall Street, and military experience spanning over 15 years and the CEO of Just Work. She’s previously worked at Astra, Twitter, Goldman Sachs, and led engineering teams in the United States Air Force, where she already also drove diversity, equity, and inclusion (DEI) initiatives.

Kim Scott is the author of both successful books: Just Work and Radical Candor. Kim was a CEO coach at Dropbox, Qualtrics, Twitter, and other tech companies. She was a member of the faculty at Apple University and before that led AdSense, YouTube, and DoubleClick teams at Google. 

We talk about:

  • how they both landed in tech
  • their diverse and exciting background
  • how to counter bias, prejudice and bullying in the workplace
  • the framework for diversity and inclusion they developed
  • and how engineering teams can be more inclusive.

Today’s episode is sponsored by CodeSubmit – the best take-home assignments for your tech hiring!

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript: 

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

 

Bootstrapping Netlify to a multi-million-dollar company

In this episode, I talk to Matt Biilmann. Matt Matt is the CEO and co-founder of Netlify – the modern platform for high-performance websites and apps. Netlify has around 150 employees and an estimate of over 20 million dollar of annual revenue. Matt also coined the term Jamstack, which stands for JavaScript, APIs, and Markup. 

We talk about:

  • his journey bootstrapping Netlify to a million-dollar company
  • how he got the vision for the JAM-stack,
  • how it feels to grow a company from a two-person adventure to over 150 employees,
  • how he envisions the collaborative software development of the future,
  • and the acquisition of  FeaturePeek.

Today’s episode is sponsored by CodeSubmit – the best take-home assignments for your tech hiring!

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript: 

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

Michaela: [00:00:00] Hello, and welcome to the software engineering unlocked podcast. I’m your host, Dr. McKayla, and today I have the pleasure to talk to Matt Billman.

But before I start, I want to tell you more about CodeSubmit – the best takehome assignment platform to streamline your tech recruiting! Yes, exactly, this amazing start-up is back sponsoring the podcast. And over the last months, they introduced a lot of exciting new features such as live coding – within a full working IDE running directly in your browser. Beginning of the year, when I was hiring engineers for a startup I work with, I used their tool during the interview process for all the candidates and was extremely satisfied. CodeSubmit made it really easy to create custom tasks that reflect the actual work candidates would be assigned to on the job. Their missing: real tasks, not brainteasers, resonance a lot with me. So, I cannot recommend CodeSubmit enough. Please check them out at CodeSubmit.io. That is Codesubmit.io.

But now, back to Matt. Matt is the CEO and co-founder of Netlify, the modern platform for high-performance websites and apps that defy has around 150 employees. But that’s not all: Matt also coined the term JAMstack, which stands for JavaScript, API APIs and markup. Today, JAMstack is even more. It stands for collection of technologies and languages, including web oriented databases, frameworks, like Nuxt and NextJS, and even framework less approaches. So I’m super, super thrilled to have Matt here with me today to talk about his experience founding and running Netlify and also JAMstack and
software engineering practices at Netlify fly. So yeah, I’m super thriller that you’re here. Thank you so much for joining us.

Matt: [00:00:57] Thank you for having me. Yeah,

Michaela: [00:01:00] really, really excited. So how is that? I looked a little bit like a research you obviously a little bit. And so I started it’s around, you know, seven, eight years ago that you, you for aided or you found that and Netlify how, how was that? Is that. Or you have an idea and you do it, or what was the process like?

Matt: [00:01:23] It was a long, it was a long process that, that, that started way before Netlify itself. So. I I’m originally from Denmark, but spent seven years living in, in Spain, in Madrid, where I worked a CTO for a company that built websites for small to medium businesses, but at a very large scale. So we would build something like a hundred websites a week, tens of thousands of sites in total. Right. And in. And I let the whole product and engineering or built the platform that all the designers would do the design with it, all the clients with useful content management that, that powered every single website from brief to production in. And then, then I actually started a CMS startup in, in Madrid together with the founders of that Spanish. Is that up because we had just tried building sort of several iterations of this. Develop a platform in-house and we thought, okay, we can build a cloud hosted multi-tenant version that, that other agencies and other professionals can, can use to get a lot of the same efficiencies when they are building websites for their clients. Anyway, that was sort of the first take on, like, how do you really remove all of that? The friction for web developers in, building deploying operators. With properties, but, but it was built as Hess as a traditional, like monolithic application. Multitenancy Amisu with database and template engine and all of that. And I came to the, to the bay area and the whole tech scene here, working on that. But while working on that, I started getting this sense. But even if it, if it was a product that was, I was very proud of building. It had a lot of like early innovations in it that had serverless functions before. That was the thing you could write, like service side Java script to running in, in this case, within the JVM in isolates and so on. But I got the sense that the fundamental architecture of this. This monolithic approach where data business, logic template language, front end code is all closely tied to gala was just not going to be long-term the real, like the few charts I could take chunks the way. Yeah. I was looking at lot at, at, in, at what was happening in the, in, in, in two different areas. One was like the space of static site generators. Jake hill and middleman were at the time in the other ones, the whole no JSPs ecosystem and Beaufort was having what was happening there in terms of the early built tools and task runners like grunt and gulp, but also. The first sort of real full race into the, in, into the whole world of single page application with originality tools like sprout Cole or Andy and Leyda in birth in angular react to all of that. Right. And I got this sense that. Pretty soon as browsers really started maturing, it would make much more sense to have an architecture where you try to decouple the front end web UI layer completely from the backend business logic, Leah, and the best back in business logic layer would likely Kelly split into all these different API APIs and services where someone to them, of course I, your own in Europe. But a lot of them are other people’s services, like Stripe oil, goldeo Twilio, and the like, and I also saw that if, if you could do that, you could sort of map that whole web UI there. You could map the workflow around that pretty tightly into the get centric workflow that developers were already working on, where in pull request and merchants and so on. Right? Like it was much more straightforward to. Map that whole process on twist StatePlus, UI Leah, then mapping it onto both the UI layer and the whole business logic data layer that tends to require all these kind of migrations and the settings and so on. So I got, I got the sense that that architectural approach would win out, but I could also see that there was just too many too, too much friction. Standing in front of developers that wanted to go that direction and then actually building, deploying and operating with properties like that. So I built a small in VP of like, what’s the smallest thing I can build that that’s sort of. Aims at edit dressing the workflow for those kinds of web developers. And the first MVP was this was a small service called bit balloon, where in the very first version, you could drag a folder with your friend dot com and it would immediately go live on a, on a, on a URL. And then I edited some CLI tooling and some in API tooling around that. And, and quickly saw that it, that it resonated with the right kind of early adopters in the front end space and, and got very validated in the idea that this architectural shift was going to happen. So at that point, I started to talking to one of my best friends back from Denmark, who Chris was my was my co-founder today. Him. He. We we’ve known each other all the way back from, from high school, which is sadly a long, long time ago by now. But while I, I spent seven years in Spain, he had built his own production company back in Denmark is specializing in like in very interactive, often video power websites typically built in flash for some of the largest brands in the world. They won a bunch of international awards for its work there. And then sold that to a full ed foot, to a full service agency where he became the partner and the chief digital officer. And I started talking a lot to him about this architectural shift and what it would mean if you could sort of pre compile the whole UI and put it on a globally distributed network. And then just talk to these different APS and services. How we could really fundamentally solve a lot of the problems around global performance, around scalability, around reliability, around security, in an, and even in the process, potentially really address to develop a practice city. And all of these areas were where areas that, that. Like he, he knew from, from operating across like web properties from, from tons of different companies and running digital strategy for the sort of Walmarts of Scandinavia and the, like how, how big these problems were and how enhanced they were. Like how, how much worse the problems got as, as, as we also started having more and more people using mobile devices for the web and, and expecting a different kind of, of both pace and use experience. But we could also just see again, how much friction there was. If a team wanted to adopt this architecture, suddenly they had to stitch together like CIC CD with object storage, with CDNs. They had to figure out cash perching rules and it’s caching. They had to figure out how to connect to all these different API APIs and services, and typically had to pick out triggering, rebuild swings. Content that data changed and so on. And there was just no viable tool chain for saying like, okay, we’re going to do this. What do we do it with? So that became the core idea. We, we, we sat down and discussed and came up with from fo for Netlify and still the mission we’re we’re still working on, right? Like how can we create a. At cloud platform for the collaborative work, where teams can really operate efficiently, where we can remove all the friction involved in going from pull requests to live code running in, in, in front of a real uses in. And yeah, we, we, we started out just bootstrapping the two of us. Build on top of the, of the product I had already built and turned it into Netlify launched on air show. Heck a news post the in, in March, 2015. In, and by the end of 2015, we were still just two people bootstrapping a company, but we are serving around a quarter billion web requests a month out of our homegrown CDN for customers. Like we work in Sequoia capital and the Molalla foundation and, and was realizing at that point that, okay, now, now we need to raise capital, build a whole team around this and, and really accelerate. Hmm. Ray cell first round of venture capital in the start of 2016 and hired the first engineers in March, 2016. And then, and then it, of course, it’s been a really fast paced growth since then by now we’ve raised about $107 million. From top tier find slack, Andreessen and Kleiner Perkins, Menlo ventures, EQT M we have for you onboarded more than 1.5 million developers onto our platform and, and, and sites are now like just, just the sites and web apps on our platform are reaching the close to 700 million unique visitors every month. It so. So, yeah, it’s, it’s been quite the ride so far. Yeah. Mine’s lowing.

Michaela: [00:11:26] Wow. Yeah. It’s mind blowing. Yeah. And so for me, You were really very, very involved with the technology. And you had like this vision where it’s going to go and it also went there. Right. So it was spot on. Do you feel like that you’re still very connected to that? Like, do you still feel like that you’re so connected to technology or are you now more involved in, you know, you have to see overall. I am now a little bit more away from this technology side. And how is that for you? You, for me now, how you explained it and how much passion I could really see that. Right. I can imagine that you have also like this passion for the role that you have right now. So you’re probably extremely. Business oriented and you know, all these funds and you know, like where to raise money and how to acquire a company and all of that. Are you still very technical? Do you feel like you’re as technical as you have been before?

Matt: [00:12:24] I I’m obviously not as involved in building Nipsey five from writing code perspective at Southwest, right? Like the first version of I built a CDN from there, from the ground up and the CSTD platform and the react UI that powered it and everything. Right. Like, and now I typically don’t like by my working space, now it doesn’t involve writing code file product eight. Like. But in a curious thing about my background is that that while I’ve been programming as a hobby, since I was 10 years old, I studied the musicology and cultural studies in and was always more interested in how humans adopt ideas and make sense of the world and understand things. So, so I think some people are, need to feel very hands-on with the coach to feel that they are doing something. I, I, I get a lot of joy also out of building the culture and the organization and the, and the engine that can build things without me. Right. And trying to understand both how, when we talk about something like the gem stake emerging, for example, and the shifts in technology. There’s always a mixture happening of like the actual sets of technologies involved and, and the specific program languages and API APIs and infrastructure evolutions that we’re seeing. But in the end, technology is adopted by humans, learning about things and building things, right. And you can understand where technology is going, what will happen in an ecosystem? If you don’t understand how humans adopt technology and why developers built with certain technologies at certain points in time and why you’ll sometimes see technologies that are technically better loose out in the marketplace because their adoption path is harder. Right? So for me, it I’ve always been a very curious person and, and, and, and like to understand. Both sides of that spectrum, both the lower details of, of how does technology, like how does that technology work behind the scenes, but also the details of like, how does human beings approach it and understand it and build with it. And of course, as I been building this company and it’s, I am building it right. The layer of where I operate them, we’ll have to keep shifting. Right? Like in the beginning I had to be the one who just sat down and wrote the code. And then I had to be part of a team that wrote the code. And then I had to be more warfare at it, take lead for that team and guide them in the right direction. And so. And now I have to build the right kind of organization and the right kind of organizational structure to allow our company to build the kind of product that. That we think we need to build. And that’s that, that in some cases also requires finding the right partners to build it with in terms of fee investors or, or ecosystem partners in, or finding the right people to join our team and, and help build it.

Michaela: [00:16:01] So, this is really, really super interesting. Is it, is it for you all about the people or is it also about the structures and how people are working together? Do you see it as a system? Or, you know, like, or is it self forming, like is a company self forming or do you give it some structure?

Matt: [00:16:20] No. No, we, you, I believe in, in trying to, to, to. Bring some structure along the way. I think both me and Chris have always fought that did that, that intentionally building structure and organization is really, it’s really important for building a company that can, that, that can scale to, to become a really large company. Right. Like I think. If you, if you try to ignore the structure, you, you will hit a point where, where everything’s that’s is that’s falling apart. And it’s very easy to hit points along the way that feels like that’s happening. Of course, you’re always a bit riding on a rocket that’s slightly out of control. Right. But I think culture and structure and And value is a really important for how a company functions. And then of course, like you can never replace the, like, it’s in the end, it comes down to actual people doing stuff. Right. But the structure is important and it’s important to be intentional about it. I think we’ve seen some companies that tries to build completely like say they built completely flat structures with. In any kind of structure to it. And that, that just means that as a leader, you’re not taking any intentional decisions and route the structure, because your team is still going to have people that have more offices than other people. And they’re still going to have, it’s just going to happen by politics and, and, and sort of maneuvering rather than by any intentional process of like how strict the structure. Do you see

Michaela: [00:17:51] like a parallel between like I texture, like software, I attacked her and technical debt and structures of companies. Like where you say, well, we try to build the best system with the information that we have right now. Obviously also looking into the future, but then, you know, things evolve, things change. So we actually have to go back and change the architecture or change, reverse some decisions, you know? Remove some technical debt. Do you see the same happens in company in your company structure? Or do you feel like, oh, this is for what we have foreseen, but now we actually have to restructure and re refined or redefine ourselves.

Matt: [00:18:31] Yeah. You absolutely see that happening. And of course it could be a useful metaphor too, to compare like your company through to the machine, building the thing and, and, and think of it as an architecture and that point. Just also have to remember that Indian, the pieces of the machine. So not lines of codes that, that are predictable. They are people with goals and dreams and carry ambitions and interpersonal. Characteristics in. So you have to be aware of both, both sides of it.

Michaela: [00:19:07] So you’re what you’re saying is that technical debt is sort of peanuts, right?

Matt: [00:19:12] Complicated. I just, it to deal with, with, with technology. It’s a lot more predictable Indians than people are, but it, yeah, in the same way, it can also be a lot more fun. To deal with, with human beings. Yeah, obviously.

Michaela: [00:19:30] Yeah. Yeah. I’m, I’m super impressed. Like I can’t imagine how much personal growth has to happen on a way from, you know, like bootstrapping something, then getting investors, you know, scaling probably if you get investors, you normally scale really fast really quickly. And yeah. So th that’s.

Matt: [00:19:53] Yeah. And it’s also, I mean, it’s also a choice you take when you go and raise venture capital that, that raising venture capital is only one way of building a business, right? Like the many other approaches to build a business. In, in our case, we felt that there was also the kind of market opportunity, right. Because we really, from the get go belief. That there was a real opportunity to shape how the future of the web is, is going to be built and how it’s going to function. But we could also see that, that making that big of an impact and getting there in time. And so. There was not something we could, we could have done if we had grown just organically based on our revenue. Right? Like, so that’s, that’s why we, we went out and, and, and raised funds to be able to, to scale and grow much faster than we would be able to do organically. Right. And that, of course always didn’t happen. Half the trade-off of like all the older challenges you get when you are trying to scale an organization very fast. And it has like, you have to know what you’re going into as a founder also, right? Like, as you say, of course, it’s a, it’s a learning curve and you have to be very okay with continuously taking things that, that you saw as quarter your role, like writing the code, building the technology. And then have other people come in and do them instead of you and step away from it. Right. But if you do that, you’ll also learn very quickly along the way. The more like that, no matter how much of your job you seem to delegate it at way, you only get more busy somehow.

Michaela: [00:21:39] Yeah. So one thing that that would really interest in me is like you said, you wrote this little first version MVP of, of Netlify and. A lot of people adopted it. So it seems like you didn’t really have to convince people about this solution or that there is a problem because sometimes like founders it’s, it’s hard. Right. You think like, oh, I have this idea. And then is it too early? Do I have to convince people to have to explain it better? Do you have like to, do you think that this is, this is the right mindset or should people step away from something like where we have. Tweak one sentence to be really powerful and express like the pitch. Right. Is that really too important? Or should we read our focus, our energy on finding the thing that people actually want? Even if you write a sloppy sentence about it, you know what I mean?

Matt: [00:22:34] Yeah. I think, I think it it’s never completely one or the Euler in, I think. You have to in like initially for example, the mental model we had around adoption was that for these kinds of technology products, if you’re trying to build something that’s in that the future of how things will be built, you would expect it to sort of grow in concentric circles where you sort of have these very early adopter technologies that are constantly. Joking too, to broaden their horizon, then find new things that work and so on. Right. And, and, and you want this kind of product to resonate with them first, right? Like in the initial stages of this product, you wouldn’t expect someone who was like aids. Are they working in a law long enterprise company? Very focused on solving. Big picture of business problems, insight that for which assisting technologies to even be interested in your product, right? Like it’s just not time, but you would expect like for a product like ours and, and early adopter of JavaScript frameworks or, or site generators to, to get interested in. And then ideally like there’s, there’s two is essentially two different paths to building. Product companies, right? Like one of them is product led growth and the other is sales or marketing led growth. And not, there’s not like one way is the right way for some products. If you have a product that requires in a whole organization to adopted horizontally before it really adds value. Right. Build a product lead motion around that. You have to go build a sales lit motion where you first go and talk to executives and companies and pick out the needs and then solve their needs with a product. But if you have a product that can both be really useful to an individual engineer, into a small teams with engineer to a larger team of engineers into a whole organization, then you have the opportunity of building like a product led growth moment. Motion. Where, the way you get into businesses is by individual users first adopting the product, and then, then it spreads from there. Right? And we saw the opportunity to build that kind of company. And when you built that, then it can’t be like the cost sale doesn’t depend that much. At first, unlike nailing there, the phrase on your marketing site or something like that, it comes on nailing the onboarding experience for how fast. Can you get someone to land on your website and then be inside the product, doing something where they having a hard moment of why? Like, why is this product going to be useful to us? And for us, there was really about like landing on netlify.com and then having a web property running on a custom domain in a shorter time as possible. Right? Like that was sort of the first iteration of, of, of that hard moment. And then knowing that maybe in, in, in 30 seconds, so minutes or something, right. You had gone from nothing to having a globally distributed website, running on a custom domain with a CSED pipeline plug directly into get right. If we could just make that motion, like something you could do in, in, in 30 seconds or minutes at something like. Then then we would drive that, that, that feeling of like, wow, this is, this is another generation of tooling. This, this is, this is just so different from how the world looked before and, and, and then build excitement with developers. But then in parallel with that, we will also positioning ourselves Hindu in, in the midst of like an architectural change of how are we going to build the web in the future. And at the time when we started, there was just a lot of difference. Technologies that was making that happen. There was, as I mentioned, static site generators that were single page applications. There was a lot of talk of the API economy, some talk around like the programmable weapons, but there was no name for this architecture. And that was something that, that, that, that Chris Sue, my co-founder immediately saw from his background. Like we need, if this is going to have him, we need a name for this category and this architecture, because otherwise, again, all of this happens because humans adopt the technology and humans goes in the direction and, and. If you can’t give people the vocabulary to talk about what they’re doing, it becomes very hard for that idea to spread between groups and teams and people. Right? So that’s why we ended up coining the term game stack. And it happened sort of in a very collaborative process with different people in the, in the industry. And so on in an and the term started taking off because it was needed, right. Because it gave me. And nomenclature to start talking about things that before were seen as just separate movements, right? Like, okay. This, something happening about the architecture we use for cell phones, talking to API APIs, there’s something happening or how this whole world of web API is exploding. There’s something happening around single page applications and something else happening around CDNs and site generators and stuff. And suddenly we had a nomenclature to say, oh, it’s an architectural shift. It’s a shift to watch the games deck. And that, that was really important to, to, to build the other part of like on the one hand, the individual product story and the developer story of like finding this product and instantly getting into ha moment and then connect them. To a broader story around like a new architecture for the web emerging and, and the possibilities that that would entail and how not just individual developers, but large organizations could benefit from that change. So both sides are important, but in the end, if you’re building a product led growth company, you have to be really obsessed is obsessive about the product itself and how. That product that attracts Andy and convinces juices to, to, to work with it.

Michaela: [00:29:17] Yeah. The funny thing is that when you described the story off, you know, how a developer, you know, sees your side and tries it out. This is exactly how I felt when I tried it out. I was not an early adopter dough. Right. I try it out somewhere last year, but. It wasn’t exactly like this. I was like, oh, I have to reply this website. And I want to do it quick. And you know, like, let’s, let’s try that out. Right. Everybody is already on it. I’m like the late, late person too late for everything, but I went to it. Right. And obviously at that point it was fully baked fully in, but, you know, I was there and was like, wow. Well, it’s running, right? Like I was like, and as you said, right, this, like you push and then it’s there. I exactly felt what you were saying, but it was like last year. How was Natalie fly when you say, well, let’s go five years back. How was the experience? Was it similar? Like at that point, would you say.

Matt: [00:30:18] Yeah. So, so the expense involved in, and it will continue to evolve it as, as we also go for, broadening the experience and, and telling it different, like as a large and larger story through the product. Right. So the very first story you would see was, was, was in bit balloon the predecessor to Netlify. Land on a website that just immediately on the front page, head like a drop soon in saying drag your web folder here. And there would also be a little download link where if you didn’t have a website handy, you could download one and drop it there. Right. And then you could just drop aside onto bit ballooned at com without even signing up or anything. And it, you didn’t need to sip the files first, anything you just drag the actual folder onto a bit, little.com and boom. Now you would be live. We still have that done. If you go to app.netlify.com/drop, you’ll get the same kind of experience that mimics, like what, what the very first version was like, of course, in the signed by me and not by actual designers. Like it looks like today. So that was like the first simplest motion we could do right in. And then the next step was really to, to start, like after we had, after I had built out that initial version of just getting a site live and, and, and getting a custom domain connected to it, getting SSL set up and so on, then, then it was really the question of okay. This is fine. If you’re really just one developer by yourself, manually deploying, and we added a CLI where you could do the same from like writing it at for spit and native later, just Netlify deploy and immediately from the command line, deploy fault. That’s fine. If you’re really just one individual working, as soon as you’re at team of people, that’s not very useful. Like you, you can’t just random. You have people deployed manually at different time without structure and people get their structure from, from GitHub or GitLab or bit bucket. That’s where developers collaborate on opening new pull requests and building new features. So. The next iteration of that on Netlify was really saying, instead of focusing on you deploying manually from a folder that solves the whole problem of you working in a good provider and getting that live. So the next moment really became that flow of like calming. Tell us you’ll get repository and we’ll try to even guess what tool you have a framework you’re using. And just say, okay, and now you’re done, right? Like now you have something you live in. And, and now of course, with, without acquisition of a feature peak and that whole journey, we are going even deeper into that space of like, this is not just for single developer building. On their own, like real projects, always built by teams with lots of different stakeholders and with several developers and one part of the processes it’s writing the code. But another part of that whole process is that for every release, you have some feedback cycle where you have back and forth with product managers or designers or other developers or other stakeholders. Before you take something live and now we’re really sort of expanding that whole experience to drink fluid, that process and to sure how, how frictionless we can, we can make. The process of a team actually building releases together and taking them to the world.

Michaela: [00:34:21] So with, with this acquisition, somehow you have like this deploy previews feature. Yeah. You know, my, my favorite thing are code reviews. Is that something that you think is part of the programming part or is it part of deploy? Is it, is it part of something that should be, should code reviews be somewhere in that picture or how do you see it?

Matt: [00:34:45] I mean, code code reviews are really important, but then there’s also the, the step ahead that’s like viewing their outcome of, of, of your current code. Right? Like being able to just open a pull request and having that pull request running in the full production environment. Exactly. As it would look like if you were. That’s that’s really like, it doesn’t replace the code review. Right? Like the developers should still work on the code review tools to make sure that the quality of the code behind that it’s up to scratch and so on. Right. But it does make the, the review, especially from. It QA testers, product managers to designers and marketeers to content editors or anyone else that’s involved that will want to review what the output looks like. Hmm. It makes that process in much simpler. Right. And what we were seeing, like w w like we launched deploy previews in 2016, a long time ago, and we’ve of course been very big consumers of that whole workflow internally, ever since then. netlify.com runs. And Netlify Natalie find that conference and identify all of our web properties up easily run on Netlify. And in that process of deployment, Completely essential to how our web teams work. We’re constantly sharing URLs and so on. But the one thing we saw also when talking to clients and so on, was that when you share that URL, then. The feedback cycle spec to the developers that happens all over the place. Some of it happens you’re shared in slack and there’s feedback in slack and more people open issues and get up or in JIRA, or they will piece two screenshots into documents and sent them back and forward for, at the mess attachments. And, and for developers like the, the process. The process of, of that is as fragmented as the process of code reviews was before tools like get help and get lab integrated into the workflow. Right? Like before that happened, like there was no. You, you would sometimes have specific tools for code review, but mostly it would be processes of sending back and forth emails around the code, or simply just having to sit down at a laptop together or at, at this top bank at the time, and look at the code and talk through it. Right. And get up with the pull request. Functionality really gave her home. For court reviews, right? Like in the game of place where, where now you no longer have to wonder, like where is it happening? And people commenting in all kinds of places and so on. Right. So what we’re trying to do with collaborative deploy previews is in a similar way to give it a form for the, feedback, not on the, on the input, which is the code, but on the output, which is the reason. And make sure also that since every deployed review, it’s a different URL. We don’t, we didn’t want to have a system where every deploy preview now has its own. Like you have to know it exists and go there and look at the feedback in order to take part in that process. Because like we had some initial prototypes integrating with tools like that, and it just attracted from the process because now. Apart from checking the pull request to end a slack messages and the emails also I had to continuously try to figure out is people, are people now also commenting on the deployed from you? Yeah. So it’s really important to make each deploy from URL. Okay. At checkpoint that that makes information flow into the original places. So feedback that stakeholders make on the deployment of the will, will flow back into the poll requests. They’ll take part in the comments there, or they can open tickets in whatever project tracking software you’re using related to get Harper linear clubhouse for the like, and now it’s really important for us. Right. But again, it was this sense of like, Now when a developer, she is that deployed preview URL, the Isles are sharing how to give feedback and how that whole process operates. And we hope that can really, as I said, do do for this process, what, what pull requests themselves fit for them? For the code review process

Michaela: [00:39:23] feature peak, which basically is part of what you’re just describing right. Of the functionality that you’re describing. As I understand it. Is it a company that you acquired? So I would like to understand the process around that a little bit. So you have this vision, obviously you seem very vision driven, right? So you have this vision and then you see that there is no place for that. But how does that work? Like, and then you find a company or, you know, like it, because you’re, you’re obviously. Yeah. Having your eyes out on the space and under companies, and then you see a company that works in that space and you think, oh, they’re going to the right direction. And then you contact them. Or how does that, like how, how can it be such a good match and why not do that? In-house and you know, like how does this whole process wig? And what’s your, what’s your mental model behind it?

Matt: [00:40:12] Yeah, let me, let me tell them, so let me take a step first bank and just to the listeners shit like yesterday, we announced a big feature for us called collaborative deploy previews that allow other stakeholders to give feedback in the process of, of, of reusing and going from pull requests to release. And behind that feature launch was an acquisition of. Affair venture funded company called feature peak that was backed by Y Combinator and matrix venture in that joint Netlify and integrated that product into the core of our product. And the whole, the whole process started in a way back into, in our all hands meeting at the very start of 2020, where in memory. So was a UX researcher on, on, on our team. Yeah. Brought up the, it like brought up the initial idea that take it. It would really add so much value to the other stakeholders. If there was a way of bringing feedback and commenting to to deploy previews. And based on that, we started at first in prototyping with a couple of different tools that already existed in the space for. Full commenting and annotating on websites. So we integrated one of those tools through it, built, pluck in and started testing it out internally. And we learned there that if the commenting was something external to the current process, our developers cut more frustrated than helped by it. Like they quickly felt like, okay, now, now I’m just getting. At pod from all the meals and slack messages in this year’s I get, I’m also now getting comments in a different place. Right. So after testing that for a while, we found out that, okay, that’s that’s not going to be the right approach. It’s the right idea. It’s the right problem with tackling, but it’s not the right solution in. So we think it, that, that we would have to do something that tied into the process that developers will already working in. And that tied into the pull request process. And we did start in building our own. We built first, a quick prototype that I went to celebrate experienced team built in. To be able to take that to our user researcher and then put it in front of a bunch of our clients talk through like, what would this do for their workflow? What are they currently doing for their workflow? And started all to really understanding like the set of tools that, that our customers were working with and how they were already solving this problem. Because obviously like, It’s not like this is something that everybody already doing in some way. No, no one are building software just by having developers write the code and then launch it. Right? Like there’s always a process of write the code, show the output, talk through it, do testing, validate the result, give feedback, iterate on it. And then you launch it. Right. But often that process is just a lot of screenshots and PowerPoints and emails and slack messages and stuff. And we could see that, that, that if we could make that flow back into the poll requests, that would help. But it wouldn’t be enough. Like when we tried just that with our first prototype, we saw like just full requests, comments. It’s not enough. Like people are also using is your track or some project management software. And we had to figure out how can we integrate into those pieces as well? So this was a long process and we built several internal prototypes and did some. Kicked off some real development. And in the process we kept looking at, in any, any company, they was trying to take a listen to the market. The end, the one of them that started to really stand out was, was west feature peak. So we reached out to them and, and asked to meet. And they came to us and, and had at the time actually started working on it on a nearly fight integration through our built plugins layer and. Yeah. I was in Nicole together with a, with, Jessica, one of product managers with the two founders of feature peak. They gave us a demo of, of what they had been working on in the integration. And as the demo progressed, I would say like our jobs got closer and closer to the, to the flow of because yeah, it, was really far ahead of anything else within this space. And more than that, It, it was as if they had been reading all of our use of research, like building exactly the kind of product that, that I wanted to build in that we were dreaming about. Right. So we very quickly figured out that, that, between us and, and the, and the Fiji peak founders, we really shed a vision of like, what can you do in this space? And what can you build in? They had already built a product that, gets a lot of things. But we could also like, just, just talking through food, future potential. We could see that we were so aligned in like, what could this turn into? And as we started to talk more, it was also pretty obvious that they could build a great integration on top of Netlify and here’s how our integration layer for that. But it would still just be an add-on. It would still just feel. Like something you could add and that would be bolted on, right. It would have its own like separate sort of dashboard and lock in. And the integrations would be only on there and not on our end and so on. That would not really be a good way to integrate the whole feedback cycle as a first-class citizen throughout our whole product journey. It would be feeling like it just, to pluck in just an add on, right. And we felt. Between all of us that if we really wanted to do this, integration had to be much deeper. It heads to be much tighter. And we would only really be able to do that if we were one company. So then we started talking about what if we joined forces? What if we, what if we built something together, then build something in, in two different silos ended and ended up agreeing that, that that was the right way to go.

Michaela: [00:46:35] And so now, You acquired them this week. And are you going to develop something now or is it already developed or, you know, like how does that person?

Matt: [00:46:46] So, , we did the acquisition in about three months echo and behind the scenes that their whole team and our team have been. Working really hard on, on, on integrating their technology really deeply into Netlify. So Netflix too. So yesterday we didn’t just announce the acquisition. We also announced the full product launch with with all of these collaborative features now available to all Netlify users from Friday.

Michaela: [00:47:19] Yeah, very cool. So you took the D the code base that they had, and then it w it’s not a complete rewrite, it’s just that you blacked in what they had, you know, got rid of some, you know, functionality because it was a plugin first and now it’s, you know, it’s part of Natalie fly. So you, part of the code base and integrate the data. How does

Matt: [00:47:40] that. The team that has like they both whom re rewrote parts of their code base to integrate it into our code base directly for, for the whole coy API functionality. I think our team together with their team built the. Three new microservices to power, like identity for cross integrations, for uploads and so on in. And and they updated the whole UI to be in line with how we built Netlify UI and to feel integrated into, into that process. Eh, But if, but I have to say an incredible job from, the whole team, executing that in just three months in and taking it to them.

Michaela: [00:48:29] Yeah, I can imagine. Yeah. Yeah. Well, it did. So I have 1000 more questions, but we are on time. So I will just, I would just say thank you so much for sharing everything with me and Medalla, you know, with the listeners and with, with, with us, it’s like, yeah. As I said, I just have so many more questions. I could talk for hours, but you maybe I’m inviting you again. Maybe you have time to spend a little bit more talking with me about all of those things. Yeah. Can you have more questions, but yeah, it’s, it’s, I’m really impressed. It’s a, it sounds really fascinating and really cool. Is there something from your side that you want to share, like with my listeners that you want to give them on the way I will obviously link everything in the show notes, but is there something that you want, especially for people that are, you know, like love technology, software engineering, and also maybe want to become founders or, you know, do their own thing.

Matt: [00:49:28] In. Yeah. I mean the first thing I would say, if you think all of this sound sounds, sound interesting and, and you would like to read the part of it. We are very actively hiring. So check out our careers page and if you don’t find anyone, anything there. Think you could be a great part, then we always have at your dream job position that you can write in for in. So that would be the first part. And do the other part, I would say is that it S this whole sheet. From big monolithic applications having to to, to modern architecture with it, decoupled front end and all these different APIs and services. There’s also a lot of opportunity for founders to, to build new, interesting, newer, interesting pieces that, that fits into that developer workflow. And I’m always happy to. To, to, to spend time with founders in that space that are building something new or interesting. So it feel free to reach out or Twitter or email or the like,

Michaela: [00:50:36] wow. That sounds really nice. Cool. Thank you so much, Matt. For, for being on my show. It was really a pleasure.

Matt: [00:50:43] Thank you for having me. Bye.

 

 

The Secret To High-Quality Code with Dr. Michaela Greiler and Liran Haimovitch

In this episode, I talk to Liran Haimovitch, CTO of Rookout – an effortless debugging tool, about how to get to high-quality code.

We talk about:

  • what are the challenges of moving fast
  • what does productivity mean
  • a lot about code reviews
  • and I also give you a glimpse of the research I’m currently doing.

Book your awesomecodereview.com workshop!

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript:

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

 

Michaela: Hello and welcome to the software engineering unlocked podcast. I’m your host dr. Michaela and today I have a special episode for you. Two weeks ago I talked with Liran haimovitch,the CTO of Rookout – an effortless debugging tool. Our conversation was so much fun and somebody on Twitter asked me if I could make it an episode on, and i thought, that’s a brilliant idea. So, today I’m sharing my talk with Liran on the challenges and strategies for getting to high-quality software. Enjoy.

maror:[00:00:00] Um, hi everyone. And welcome to our webinar today on the secret to high quality code. We’re really excited to have you all here with us. Uh, so let me introduce you to Dr. McKayla and the stars of today’s webinar. Dr. McKayla has been helping software teams build high quality software in an efficient and effective way for 10 years. And her mission is to lead teams. So I’m up there full potential through company workshops and team coaching sessions. Leanne is the co-founder and CTO of workout, which is a live data collection and debugging platform. He’s an advocate of modern software methodologies like agile lean and DevOps, and his passion is to understand how software actually works. So when he’s not thinking of code, which is rarely usually diving, hiking, or writing a new workout blog. Um, and so before we get started, I just want to remind you all that we do have time for questions at the end of the webinar. So please don’t hesitate to leave questions in the question box and this will be recorded and we will be sending you the recording at the end. So. You’re on and McKayla, please take it away.

michaela: [00:01:02] Thank you so much for your really nice and kind introduction. I’m really excited to talk with Liren today about, um, high quality code and get his whole perspective on this topic and pick his brain. So yeah, I’m really thrilled to be here. It’s

liran:[00:01:19] great to be here with you discuss so many interesting topics.

michaela:[00:01:24] Yeah, really cool. So in, in the beginning we discussed a little bit, like what should this webinar be about? And we thought like, let’s come up with this idea that we are asking each other a little bit questions that, you know, are burning questions for ourselves or that we very often, you know, encounter. And, um, so I want to start with that theme and I want to ask you about. The challenge that you see, or the challenges that you see that, uh, engineering teams face nowadays, but really moving fast. Right? So there’s like this accelerate the book, for example, there, the Durham metrics are many other metrics around code velocity. So it’s apparently something that we want to do, right. We want to move fast. We want to be productive, but what are the challenges and how can we actually achieve that? So

liran:[00:02:12] I can say from my personal experience as well from pretty much everything I read on the topic, the best way to move faster is to work in smaller units. You mentioned Dora, the Dora metrics and accelerate, and they’re constantly about, you know, roundtrip time for new features and the amount of new features that are being released. And how can we build in it? How can we work in smaller unit to Falk? And the reason for that is because smaller units of work allow for much faster Predix cycles that allow you to learn much more. You get more feedback, you get, you learn every step of the way you learn more often, and you also get delivered more value to the cost, to the end customer on a more frequent basis. And in a way that’s actually driving a lot more value. I guess the biggest challenge is actually, how, how do you do that? How can you keep moving ever faster? How can you deliver in smaller units while still keeping delivery efficient? And I found that one of the best way, the best way to start is quite often culture. And we talked a bit about you, eh, doing some rich recent research for that. So I would love to hear about. What do you think about how best to build a better culture and how to promote a culture that deliver faster and deliver in smaller units folk?

michaela:[00:03:34] Um, I’m a big advocate for, for great, uh, culture, right? Who isn’t somehow everybody wants to work at the company that has a great culture, but unfortunately not everybody is I’m currently actually doing a research project that I that’s. The one that I talked with you about a little bit is on productivity and work culture and the experiences of developers at their companies. And so I’m, I’m doing right now, a qualitative study, a grounded theory study where I’m really. Trying to deeply understand how are people experiencing their work place and what factors are influencing their satisfaction, their happiness, their productivity, and what, what enables them to move fast, as you said, to be productive, to be the best selves. And, you know, there are some factors around obviously release, for example, is one that’s also covered by the Dora metric. Um, how has the release experience? And here I’m not only talking about metrics because. I think on one hand, I’m extremely data-driven. Um, whenever I was working with teams or am working with teams, um, also at Microsoft, we did a lot of the research was very data-driven, but it was also, and this was very, very important for me, always. Um, Kwon qualitative as well. Right? So not only you’re looking at the data, which gives you a very include complete picture, but you’re understanding, trying to understand the whole experience. And so this research study is really looking at the whole lift experience of developers. So on one hand we have like metrics like, um, you know, release cadence or from time to commit or from time to merge and so on. So what what’s very quantitative quantifiable, but on the other hand, you have. Um, the impressions and the perceptions of people around that. Right? So are you feeling better with it are, um, are they feeling worse and the same is true for code reviews and so. A lot of the things can really back to culture and culture is somehow enabler here, right? So we have like this practices around those areas, let’s say release. These feedback loops that we have released is actually a feedback loop. Code reviews are a feedback loop, right? Talking with product management is a feedback loop. How, how seamless, how smooth can we make them? And culture is really an enabler for that. Why is it an enabler? Because if I’m allowed to say, if something is wrong or if I’m allowed to experiment, even experimented with some failures, right? Like I try something out, I try to work different with product management. It doesn’t work out what happens, right? What are the consequences of that? And. And that’s why culture is so important because if people feel that they can experiment, if they feel that they can also express their opinion on it, they will drive more improvement. Right. Um, the research is really a lot about improvement. How, how much improvement can people. Um, drive and they normally know what’s good. Right. They know what’s going bad. Um, or what’s good. And so it’s really about enabling them to act upon that. And that has a lot to do in here. The funny thing here is that metrics are really important to want on one hand, to enable people that we see and that we make it visible that there are problems. But on the other hand, metrics often also hold people back. Because if I’m, if I measured. By one metric. Right? Um, it means that if I’m trying something else, something new, that’s not covered by this metric. It very well, it could very well be that I’m actually slowing down or I’m. The metrics outcomes going down while I’m trying something out. Right. And so the question is really about culture here. Again, how are people handling that? Right? Do I always have to perform to my OKR or KPIs or whatnot, right. The metrics and the goals that set around, or am I actually allowed to experie experiment here with things that might slow us down for a short time when I’m doing the improvements, because improvements are really hard to do without. Short term slowing down, right? Technical debt. How are you going to work on technical debt and still keep the features going? Right? Yeah. So this is what I am seeing here

liran:[00:07:41] that actually brings to mind the analogy from lean production, where you stop the line. When you see something is wrong and you say you have the, you give a individual engineers or individual employees, the. The permission to call it, to stop the line and spend the time and efforts to improve things, even at the cost of lost productivity in the short term, because it allows for continuous improvement.

michaela:[00:08:09] Yeah, exactly. It’s a really good analogy. Yeah. I

liran:[00:08:13] think it’s so important to create. Um, I remember I talked a lot about feedback, but you’re right. It’s critical that it’s not just enough to have feedback, but it’s super critical that the feedback experience is going to be positive. Even if this feedback is negative, it’s important for people to be able to experience. Getting feedback, something positive and in a way that if they’re changing something or developing something, or if it’s a bad product idea that the negative feedback should be, you know, about the, the, the feature about the, the task that this feature was bad, but the person who came up with it wasn’t bad and they didn’t necessarily make a bad choice by, uh, you know, going after this feature. And. People should be glad about getting those so-called negative feedbacks and not attribute them personally. And that’s super important to the culture, to the experience, kind of, how do you go about creating that? How do you go about building that environment where you get continuous feedback and experience is good.

michaela:[00:09:23] Yeah. I mean, I’m, I’m, I’m thinking a lot about culture nowadays and, you know, to. The common sense is always all countries so hard, right? It’s so hard to change. And if I’m in a, in a bad place, you know, it’s a bad place. Um, and I think on one hand, that’s probably true, but I don’t hand now that I’m confronted. So, so a lot with that, and I’m really working a lot with organizations and that they in displaced, I’m thinking about the small things that you can do. And culture really begins now really coming back to something very concrete. Um, I’m all about code review. So culture begins already in cultural views and for example, code root feedback. And to, in my workshop, what I do, I work with people on how to give respectful feedback. And very often everybody thinks like, Oh, but I’m doing this right? Like we are not fighting in the code reviews or whatnot, or, you know, or it’s only instances of that where we are mean, but it’s more, it’s about the collective awareness of not only do I fight with somebody or, you know, is it an unrespectful, but really. Uh, is my mind about value? The value that I can provide to others is the, is my mind about how can I actually, you know, improve the experience of my peers here. And I think this is something that’s often not done, and this is something very small where a team can really. Start actively being more aware of that, more deliberate, more conscious about this. Um, and it starts already by understanding code is really, really hard and everybody has, um, everybody has a time pressure and you know, wants to deliver the features. And a lot of engineers say, well, you know, code review is good, but, uh, I actually have to deliver feature. So what’s about the time that I have to spend on the code review. Somehow it’s missing from my feature work and so on. And so having really empathy around that and the experience of myself, but also off my, off my team, that’s already creating culture, um, and being extremely, um, it bear that feedback, even if it comes from a good colleague that you think like, we are all, you know, good friends and we are really on the same page that we still really take. And this is now again, you know, slowing down, right. It’s slowing down to make sure that I’m phrasing this feedback in a very respectful way, because we know that feedback can sting. Right. Um, and it can be misinterpreted. A lot of the feedback comes through a tool, which means it’s an automated tool. I’m not directly talking to a person. So sometimes I forget it. And we are in this automated way of. Um, you know, looking through the algorithms, finding, you know, let’s say edge cases or whatnot, finding problems. And so if you are in a very technical state of mind, and then we are hammering in our feedback and say, Oh, Variable name is wrong or, you know, or should be different. And then going, you know, taking one step back and thinking, is that creating a good culture? Or can I take this, you know, two more minutes and say, Oh, you know, what about, um, renaming this and even giving an explanation, you know, w really expressing your, your mind. I think. Driving cultural change is definitely hard and, um, comes often also from the top, but there is a lot that teams can do for themselves. And even engineers themselves can ask themselves every day, like, what did I do positive today? Like I’m not only going somewhere in and they’re expecting that culture would be great, but am I actually contributing to, to making a good culture here? Hmm.

liran:[00:12:49] I think it’s so much more critical today as well, working remotely, because as you mentioned, we’re often in that technical state of mind, whether it’s on GitHub doing code review or on Slack or wherever, but behind what’s actually happening is we’re communicating with other human beings. We’re not just no analyzing code and the testing stuff we’re communicating to other human beings. And as we were, many of us are working remotely quite often, or most of the time. We can often forget there is a person on the other, on the other side of it. And sometimes we kind of forget to act with empathy, with compassion, and while we may be factually, correct. We’re not creating a good experience for the person on the other side of that communication.

michaela:[00:13:35] Yeah. And actually about the factually correct thing. I have learned over my, you know, my time in the industry that at seldom leader, Kate seldom Livia are very, very active, you know? And I think sometimes you forget about that and, and this is two perspectives. Cultural views are a place where two perspectives really are, you know, they are, they are the benefit of it. And there are also the problem, right? That you are constantly having somebody that looks at the same thing and say, well, but I’m seeing something else, right? Like I’m seeing technical debt and you say, but it’s fine. You know,

liran:[00:14:15] the thing is engineers so often feel like they’re factually correct. Even whether it’s or not, it’s the case. I just, and quite often we’re not actually factually correct. There is some degree of, eh, you know, afraid. Of common sense and various options. And w there is not one single truth out there, but even if there is even if you there is, and you’re convinced that there is in your, on that single spruce, it’s still communication. And you must not forget that there are other things beyond fact, too, and more often than not, there are actually no facts. And it’s just your opinion, which might be very good and professional, but it’s just an opinion.

michaela:[00:14:59] Yeah, very true. And a lot of the time it’s about strategies. And about the unknowns that you know, that the unknowns unknowns that we actually make guesses and decision and B we don’t know if they are the best ones. And we even in hindsight, we cannot decide like if we could have, you know, if you would have done it differently, would we have a better outcome? We don’t know. Right. So, yeah, it’s, it’s, it’s really dealing with that and, and embracing that and maybe reminding maybe something that we can do also, always over time to build this culture is reminding us of that. Right. It’s a little bit like we have to remind ourselves of the central things. We have to remind also ourselves that we are dealing with so many unknowns and that on one hand, you know, we are, I think at, at one point we have to go and say, Well, we don’t know better. And maybe some people disagree here, but now is the time that we are, you know, buying in and going this way together. And I think this is also important for engineering teams, right? So in one of my country workshops last week, for example, I give them a code base and it was, um, it seeded with errors, right? So it has issues and they asked the team to, to find those issues. And there are, you know, they are. Issues about readability, maintainability of the code, but there are also security issues. And so then we had a discussion about, you know, um, so there are a lot of issues. So how are you going to communicate to the person that wrote that code about those issues? Are you going to tell them all of them at once? You know, do we make like a plan around what should be, um, worked on first? And there was, for example, this discussion then between two senior engineers and they were saying, well, once by saying. Yeah. Um, so everybody agreed that, you know, sending them 300, 300 problems at one point is not the right thing to work with this junior. So, um, they were thinking, well, let’s do it in, in phases, but it didn’t, they couldn’t agree. Like if security issues are more important than readability issues or not only readability, but making the code work. Right. So there was this discussion that, well, this is early stage, so it’s, it’s probably a prototype, so we should have to, you know, show. So let’s do it. Make it correct first that it works and then work on the security issues that they had, like they had, there were injection box and cross site scripting products and so on. Right. But in the end, you know, like the whole team was discussing it. They couldn’t really find a way forward. Right. There was one side that was very convinced that, well, these are really critical security packs and they were really critical. And the other was like, well, but it’s, you know, we use it internally right now. It’s a prototype. So let’s make the functionality work first. And so what, there was a back and forth, and I think this was a really nice example of, I couldn’t tell, like, I couldn’t say like they wanted me to be now the referee and say, Oh, you win. Right? Like the security team, Vince, we first do a security or we first do inability, but there is no right or wrong answer. It’s just the strategy that you’re going to do. And probably that you’re not doing, you know, again, not sending all the issues at one is a good one. Um, but then in the end, it doesn’t matter if you do one or the other, as long as the security backs are not coming out right. In, in production. Um, yeah. And, and I think here it’s really important to step back from this discussion at one point and say it’s actually a nonsense discussion. Let’s, you know, flip a coin and do one or the other. Um, yeah, this is what I think about this. So a lot of the things is really. It really depends. And then we have to make a decision and if we made the decision, this is the important thing. And then everybody has to buy in and not like, keep this resentment and say, Oh, the security or pre approach first. Right. And I think it’s stupid. And so that’s why I’m blocking here, which is culture. I think.

liran:[00:18:49] Yeah. So actually it’s not, it’s interesting that you mentioned that because it’s such a big topic. And I mean, so much effort goes into code reviews and often becoming the button neck, both for whoever has to do the code review. And, you know, spend the time and walk and provided feedback in both wherever need, wants to get, just to get this code out there. And they’re just trying to, and, you know, they’ve just finished developing the feature. They just want to check off the it’s been called of you and send it out there. So kind of what strategies should company follow to speed up their code reviews?

michaela:[00:19:27] So, um, I totally agree that code reviews can become a bottleneck and they’re coming with a lot of pain points, but I think especially this. This mindset of, you know, cultivate is just another hurdle. Um, that’s something that people have to work on. Right. So, um, we really have to understand and carve out also, what’s the benefit of the code view? Why do we do it even here? Right. And if the feeling of the engineering as well, I just wants, uh, I want to look good to me and that’s it. Um, then obviously it’s a delay and it’s a bottleneck and you know, the value. Probably isn’t that high because even if the person gets good feedback, you know, if the person that receives it, doesn’t actually want it, you know, what’s the value of that. So I think that a lot of those is really for an organization and for a team to think about what do we want to get out of contribution? And there is a lot of imperative studies also that really show that the benefits like. Um, improved code base, readability, maintainability, um, less, you know, less issues, less facts, defects in posts and pre-releases, um, all of those are happening. Culture-based, there’s a lot of mentoring and learning happening. There is advantage knowledge sharing, but it’s only if I’m open to it. And if I’m very clear about what I want to get out of here, because if I want. Let’s say if I want to find it back, it would be the best to ask a person that’s familiar with the code to be on this code review and not, you know, a junior, but if I want to have this learning expect more in, in, you know, in the center, then obviously I ask somebody that maybe hasn’t seen that code part before, so that they get familiar, that I have knowledge dissemination that I have more people that are familiar about this code base. And I think most organizations. They’re not real bear. They, they hopped on this code review bag and because the hopped on, you know, to pull request, model to development and pull requests and code reviews are not the same. And so suddenly they wrote a pull request and they felt like, Oh, before I pull it in and look at the code and because I’m looking at the code, it’s already a code review. And so now I’m doing code reviews and I want all of these benefits without actually investing I’m investing. And then here it comes back to this slow down. Right. So I have to probably slow down first. Really find out with my team, what is it that we want to get out of code reviews? How are we structuring our processes, our practices, and this has to do a lot, right? Like, depending on the risk profile of this code review, who should be on the code review would ask for feedback, how long should it take them? What issues are they looking for? All of that can actually be designed and very deliberately made. And then you’re getting really a lot of benefits out. But if you’re not doing that, yeah. Then you’re in this state where. He just wanted, it looks good to me. Right? The other person knows you just want that, but still feel a little bit pressure, um, that they have to look at it because if it goes in, they’re also responsible. And so there’s this delay, um, and you don’t want to spend time for it, but you have to, you know, and then you having an, I actually have a, if you look on my website, there’s the code through your quadrant. Um, and this means like it’s, it’s, you have to access and it’s the speed of the process and the value. And this means that you often have them. Organizations that are slowing speed. And low in value. Right? So they are low in, in speed. They’re very slow. They’re bottlenecks and they don’t get value out or that they’re fight fast because they’re just giving out. Looks good to me, but they’re not getting value out of this. Right. But even if you’re waiting for look good to me, Like say half an hour or an hour or four hours, it’s still slowing down your process. And the question is, was it worth it right? If people are not really taking the time to review. So in the end for me, it was probably a very long answer to your question, but it really comes down to what, why do you do code reviews? Right. And do you have to have an answer for that? And probably depending on the code change, the risk profile of the code change and the code change, you will have different answers to that, or this code review. I want that, you know, my junior engineer knows how that works. And so I’m sending it over or this, this code changes about how we are doing the checkout. So I definitely want, you know, two more eyes, um, to make sure that there are no, no defects going out. Right?

liran:[00:23:47] Yeah. I mean, that sounds so complex. Can’t we just automate this and install some tool and get it over with.

michaela:[00:23:55] I definitely parts of it. And I think that a lot of people are, are, are doing stuff that tools should do for them. Right? So they, they, they are mocking on, you know, style issues they are talking about, you know, some, some things that actually study analysis tools could find. Um, or automated code review tools, whatever you want to call them. Uh, in the end it’s, it’s, linters that checkers steady analysis tools. Right. And they are actually much better than, than people. To find certain, certain errors and certain problems with your code, they can actually, you know, they can walk through your code and really find out, you know, if they’re, if, if some code paths are not called and tell you, Oh, this is actually not going to call it. Or, you know, really also back study analysis backs, but they are limited. So it’s, it’s not something, you know, they are not, you cannot comply, uh, replace the, the manual review. But you can replace a lot of that, you know, nitpicking, which is very unproductive and code reviews. Um, it doesn’t matter. Like why would you have an engineer spend time on finding certain types of errors? If a tool could do it automatically? I’m I’m all for automation. I think it’s so important to automate whatever you can automate here. Yeah. Are you using, are you using some automated tools in your pipeline?

liran:[00:25:15] So yeah, we actually adopted a GitHub advanced security. A few months ago at lookout. And it was actually a pretty good tool for us. It allowed us to gain some insights, actually both brought us a lot of insights into some of the other code that broke out and kind of knowing where we might’ve pitfalls, but it also managed ha ha is helping us moving forward, knowing that it could work coder pushing through discussed meeting there. No style checks and best practices, especially when it goes to more junior engineers or engineers or working in environments that are not a strength. Let’s say, I know most of our full stack engineers spend most of their days between a, you know, react and node JS, but occasionally they dive into Golang. And then all of a sudden, they’re not as fluent in, you know, what can go wrong and how should the code views. And some of those arrows can easily be caught by those automated static analysis tools. Also, it’s a very useful tool personally, we’ve, we’ve recently developed support for Ruby and surely within that skeleton of project, we started with Robocop, which is a very, very strict, eh, who bill inter. And that’s actually provided us with a lot of insight and kind of kept us very honest as we were developing the code, keeping functions, very short, creating a very orderly and well structured code. And that’s kind of something that it’s always a dilemma for me when starting a new project. Do you go ahead and spend a lot of time building the skeleton, building the CACD building, building linting. At the beginning of the, you wait for it later on, because you know that later on, doesn’t always get by. And if you’re adding a linter to an existing project, and then all of a sudden you’re getting, you know, dozens of errors, then you might not be, get going around to fix them because it’s too much work and that’s always kind of a dilemma. But for that project, it was a very good experience for us in developing high-quality code.

michaela:[00:27:25] Yeah, that’s really nice. Yeah. There’s also my experience. Like if you, if you add that to an already existing, quite substantial code base, right. It’s just out of hands, right. You will have like all these red flags, orange, whatever, you know, depending on the tool that you have, like different severities of issues. And I always feel really bad because. I know that I’m not going to be able, like to go back and, you know, redo the past. Um, you can do it slowly by slowly, right? Like I’ll voice called removal or at five by refactoring where you say, well, if I’m touching this code, I make it nice again or make it better and you can do it ongoing. Um, but yeah, I also feel like for, for existing code, it somehow has this, you failed here. Um, um, Psychological, uh, you know, by byproduct, but you’d be like, Oh, now I’m seeing what’s all messy and you cannot really do it. Um, yeah. But yeah, it’s good that it worked out. So apparently you could, could you remove all of the issues? Could you work through all of them?

liran:[00:28:26] So we got through, and I think 95% of them ere, there were some, a few areas where we decided that. That code is not going to be the nicest code in the project. And that’s okay. This code is mostly, you know, four, it wasn’t was low maintenance, low complexity, just a lot of, you know, lung functions doing boring stuff. And we said, that’s something we can live with without spending too much engineering efforts, kind of fixing it up and making it look the best.

michaela:[00:28:59] Yeah. So in the interview and the research interviews that I’m doing right now, we talk a lot about technical debt as well, and how people deal with technical debt. And I’m asking different organizations, different teams, their strategies for technical debt. What are your strategies? We have like some, you know, some amount per sprint that you can use on that, or how do you, how do you even. Um, assess the value of working on this, uh, you know, technical, then you were talking like, Oh, we already okay with this part of the code base, but how do you assess that? And on a more strategical, systematic level, right?

liran:[00:29:34] Yeah. So I guess that’s a two part question. And on the one part, we do have a strategy and I can talk about it a bit, but I think it goes beyond that. I found that for you, you mentioned actually early on that nothing in very literal in tech is factual and most of it is opinions. And I think that’s doubly true for a tech debt. And quite often one engineer joins a project and they decide that what’s happening. Much of, many of the decisions have been taken before they joined our tech that there have been wrong. And I would wager basic statement that it’s. Probably the other way around. I mean, if the project is live, if it’s generating value, if that piece of code was walking from when it was written up until now, then chances are the decision to, to do it. That way was actually correct. Or at least descent. And engineers often jump to say to, you know, define tech that because something is not in the latest design pattern or something is using an older technology or paradigm, or maybe simply because they don’t understand something. So often the first thing you have to do when you think of tech that is actually understand what’s going on and truly think for yourself. I truly think about it. Is this truly affected? Oh, is this something you lack an understanding? And actually that’s something we were seeing within Rueckert and with our customers that shook out is quite often used for once you have a better understanding of the code, because you can see how it’s working and you can see inside of it, then you quite often realize that’s not actually that that’s the, I just didn’t understand how it was working. And once you get gain a better picture of how is it working, why is it working that way? And none of the sudden then it makes perfect sense. But obviously sometimes there is real product that there is real tech that they, for the most part, we kind of manage tech debt on a, you know, quarterly on a quarterly roadmap. We have a very. Agile flexible quarterly roadmap while we manage our roadmap, eh, usual, all the rollout. And you also kind of add, you know, a handful of tasks for each team and full of mid-level mid large tasks for each team where they can, whether they should strive for a tech that. And obviously, you know, like that usually comes last in priorities priorities. So it doesn’t always get executed a lot. Depends on the roadmap progress in general and especially on a. Eh, eh, new tasks that get pushed in from the sales team as well, working with customers. And there are always new requirements for improving performance, for a meeting new criteria for giving the best experience with possibly can for our customers. And those often override some of other stuff we have on the roadmap, but we do try to get at least some of the tech that cleared every quarter, just to get a few low hanging fruits with high impact stuff. That’s been bothering us, that’s bothering the team. And also we find that having those, you know, tasks in the queue engineers kind of find time in way to get to them, to get it out of the way.

michaela:[00:32:56] Yeah. So what, what reminds me and what I wanted to ask you in that context is that the original or one of the very early on definitions of tech dad was code that didn’t have tests right from my Confederacy would say, well, it’s tech that if you don’t have tests, because then you really have a hard time refactoring and often, you know, There’s also this new, I was actually, I did a podcast with him, uh, recently on, on, on my podcast and we were talking about it and then he, and he also sat like tech tech. That is the code that has been outlived, but a person that. Wrote it right. And that in our days in our, in our, um, very fast pace or, you know, um, take industry where people will stay two years, maybe at the company, they write code and they actually never really see it in the maintainance pace. Right. So do you see it when they’re writing it? Maybe when you’re releasing it. And so a lot of the, you know, like a lot of the, the. Code becomes tech deck, because the knowledge is actually gone from the organization that, you know, wrote that that code or, you know, can maintain or understand it. What’s your perspective on that?

liran:[00:34:07] So there’s actually a truck out we’ve kind of we’ve wrote and talked a lot about understandability. It’s exactly what you mentioned. It’s about knowledge it’s about if you’re able to understand the software, the code fairly well, then. You’re the new C you can do a lot. I mean, you can get stuff done. I mean, I think the most obvious example of that is, you know, those simple exercises you get on introduction to computer sciences file from disk, Salton array, eh, those kinds of stuff. And you know, those exercises you can usually do right now as a senior engineer in 10 minutes, 20 minutes. And you’re done, but if you were to get the same task within the context of a very large system, especially one you’re not intimately familiar with, then all of the sudden the same tasks can take you weeks. And then you’re going to start complaining about tech debt and lack of knowledge and documentation. And if at the same time, or to give that same task to the two, a person who was one of the founding team of that system, they’re still going to get it done in, I know maybe not 10 minutes, but 30 minutes. And preserving knowledge is super critical. And at the same time, we need better tooling. We need better tooling that would allow us to work with systems that are complex, that we’re not intimately familiar with. Obviously testing is there, as you mentioned, testing is a form of tech that because testing is a Godwin. That allows it to operate in a, in an area where you’re not familiar with. It allows you to easily debug the code that I, you to see it in action. Even though it’s a developing environment, you can see the code running, you could see it in action. You can make changes in a control mirror. We know what you’re changing, you know what you’re going to impact, but that’s at the same time, I think tests can be incredibly expensive. Even more so if you’re not already familiar with the code, so it’s kind of, you know, a conundrum you’re saying the code is not very good because it’s effective because it doesn’t have any tests and it doesn’t understand it, but then it’s going to be very hard for you to add tests to the code. You’re not honest. You don’t understand. I think observability tools, by the way, can provide you with some insights into how the code is walking. Right. Eh, but at the end of the day, nothing beats just debugging the code, stepping through it, see what, see the actual types and values of variables, seeing the inputs and outputs of the system and seeing it in action. That’s the best way to understand the code.

michaela:[00:36:45] Yeah. I think the too, when I was at the university of Victoria in Canada, um, I was doing a research as a bicycle there. And they, they developed a tool. I think at that point was called driver. You will not find it because it was a research tool, right. Not really popular and bad. The tool itself was really cool because it helped you understand cold. Um, my, my research area was called comprehension. And so really helping teams and engineers understand code. And so this tool was made in a way that you could Deepak and it showed, you know, the traces and the values as you just described. Right. But this is like, 15 years back pretty long time. So it was very novel at that point. Right. And so this was really used to understand coach. I think debugging is definitely one of the ways how we understand code, right. That we really go through it and try to understand what’s going on a really interesting resource maybe in that, um, in that regard is also a book that’s coming out from a friend of mine, for the Hermanns it’s called. The program has brain and it talks a lot about cognitive load and code reading. Um, there’s actually a workshop that I’m going to attend today about code reading, um, from her. And, um, yeah, and I think this is really, this is really interesting because it again goes into these different versions of cognitive load and also confusion that you have with code and confusion can come, come from different sources. One is lack. Of your own knowledge, right? So being a junior or, you know, being a senior engineer, you have a different knowledge base. So you can actually go back to your longterm memory and quickly access how to load the file, or you know, how to save a file, how to close a file and so on. And then as a junior, you have to really think actively think about this with means that you’re. Your, your processing power more or less, right? It’s reduced because you have activity after actively think about this. And we can think around four to seven things. So if you’re already thinking about those things, you know, there are only two more things that you can add. And as a senior example, you, you. You have that in your long-term memory. So you have seven things that you can think about. And the interesting aspect here is also the same with what you said about the code base. If I’m familiar with the code base, I can load parts of that from my long-term memory. And I don’t have to use my short term memory. I don’t have to use the processor for that. Right. Um, and so there’s definitely, there’s exactly what you’re seeing here. Um, maybe something else that I want to add here is you said knowledge dissemination. And code reviews are really good for that. Right? So that’s why I’m saying the organization has to understand the benefits as a whole, right? And suddenly if you understand that, well, if I can actually have, have a, a larger part of my team, be more familiar with a larger part of the code base, that’s actually extremely valuable and it will. You know, it will speed up your development process quite a bit. And there are also studies on that around code reviews where we really see that, um, it teams that have code reviews in place. They already have a Vitor understanding of the code base than teams that don’t have. Right. They’re only known only know what they’re working on. Um, and so why it’s slowing you down to do the reviews. It really speeds you up. Once you have to work in this pace, right. Or in this place off the copies, or if somebody leaves, you have other engineers that are also familiar with. With that. And so I think there are other benefits that are really, really, um, really important here. Yeah.

liran:[00:40:19] Yeah. I mean, I’m hearing here speak, it’s obvious. You’re an advocate of code reviews and you’re passionate about it and you’re making great, great arguments about why it’s so important and how the part, the value fit. But don’t people ever come to you and say, I don’t know, it’s slowing me down. It’s making stuff complex. I mean, I don’t want to do pull quest. I don’t want to do code reviews. I just want to skip the whole things and kind of what do you send them?

michaela:[00:40:50] So, honestly, I don’t, I don’t have a lot of people that have this complete mindset. I have a lot of people that would say I really would like to skip code reviews because I don’t have time to do them because my reward system around my recognition and what I’m expected to do is something completely else. And then I have to look at code reviews and, and this is not part of it. Right. So I recall one person, I was just talking with them. Like we could go around that. Right. It was part of the research again, and they were talking about it. How, how is it? It’s really difficult. They actually laugh code reviews and they learn quite a lot and they would have much more, um, much more benefit and would feel better about them. If this would be actively part of their job description and their expectations. But it’s in very many, many organization. It’s. It’s window dressing. It’s like, yeah, we want you to do code reviews and it’s really mandatory and they have to do them. But on the other hand, there is no time to actually do them. Right. And I think that’s, that’s what I see very often. I definitely see people that haven’t had good experience with code reviews that don’t maybe see the benefits out of that. But I also have, on the other hand, I think this is why I’m such a strong advocate for that. I have people, really, a lot of people that have seen the benefits and that have done code reviews in the right way. And, and, you know, with good processes around and with a good culture around that, that they say I would never, ever work anywhere else without code reviews, because it’s a, it’s a mentoring tool. It’s a learning tool. I’m learning so much more. I’m so connected to my team. Right. And not working in a silo anymore, but this needs a certain time of code reviews. You cannot like work on a feature for a month and then throw over like thousands of lines of code or whatever volunteers look at it and give me feedback, right? Like this is not gonna work, right. This is, uh, this is definitely a frustrating experience for everybody. And in this case, I say, get rid of it. You’re not getting anything out of it other than frustration. Um, but also be honest to yourself that you’re actually not really doing code reviews, right? You’re throwing pieces of understandable codes to somebody else that can spend maybe half an hour, an hour to look through thousand lines of code. What are they going to say to you? Nothing. Right. And so maybe it’s really to be about, be honest and say, if I want that, I need to slow down, understand how to design the process. Um, maybe even get help for doing that. Right. And then, and then really do it right. And have so many people that really love code reviews and so many teams that are striving through that. Um, and yeah, so definitely if you know, if they don’t bring any value, then it’s really, I think it’s very often the process that’s just completely screwed up and the culture around it.

liran:[00:43:39] Yeah. And do you find that companies struggled to understand which public was deserved called the abuse versus which, what policies did they have in place to know to solve them out? Sometimes I know sometimes just adding a log line and then you need to go through the same code of your process, or at least by definition, it’s the same workflow as if you’re adding a big feature. So kind of how the companies go around managing the different kind of pollute quests.

michaela:[00:44:08] So I think this is really a part of, I cannot generalize, um, because for some organization it’s definitely valuable to go. Through a pull request or a code review for every line of code that they’re doing, even if it’s a lock line. Right. Um, but then this is a certain type of company and they have certain goals around it and it’s beneficial. I definitely see also, um, you know, organizations that have some code review guidelines in place and it says we have to look at every line and it’s a log line. It makes no sense here. Um, very often here, people haven’t thought about again, you know, what are our goals with cultural views? And if you think about the goals and it’s a logline in, you know, Yvette Yvette site that I can update within minutes because I have a fast pipeline, why would I go through a code review here? Right? Why would I slow that down? What’s the benefit here? Um, so I think that organizations that are more vague about their contribution to practices and process, and really take the time they understand that. Um, and it has to do with risk profiles. Can engineers, do they have like guidelines to work around? Have we thought about this as an engineering team? What are our values? Um, when I was working with Microsoft, we had like, there were, there’s not one code review. Policy, right. It really depends. Office has a different policy than windows. And then even in, in office, you have like different teams that have different policies and so on. And so the teams really thought about, um, some teams would say, well, for us, every line is reviewed. And then other teams would say, uh, well, vs keeping, for example, refactorings if you do a refactoring and you can show it, it’s, uh, uh, And refactoring that has no side effects, then you can just put it in or some teams would do the review after they’ve pushed it, for example. Right. So after, after committed, after pushing and after merging, they’re doing the so. The, the policies really differ. And I’m not saying that, you know, even if the differ for some teams, they were really good for some teams do or not. Um, it really depends how, how honest and how in there and reflected people were around their cultural views. Um, but you can definitely be design and, you know, even have automatic things that help you to decide whether or not something should have a code review. Right. You could buy somebody if you think about conventional commits. Where you have certain aspects in the commit message even right? Even those systems are in place. If you, that you could do here, where it could incorporate some of the risk of something, or you have against that again, as it tools around somehow assess the risk. And that helps you to decide whether or not you need a code review or in what depth you need a code review here, how many people should be under code review. Right. So, so many questions, uh, yeah. Yeah. Touch on what you meant.

liran:[00:47:07] Uh, that’s. Exactly. Yeah. That’s that’s perfect. I think we’re almost running out of time here. So maybe Mo join us, throwing a few questions

michaela:[00:47:16] from the audience.

maror:[00:47:17] Okay. So actually, a few questions did come up. If you guys are ready for it, um, McKayla, we’ll start with you. Can peer programming, replace code

michaela:[00:47:26] reviews. Okay. Um, pair programming. So I, yeah, this is a, this is a very often, uh, asked question and my answer is no, it’s very similar to, you know, can automated contributes, replaced code reviews. I think they are very complimentary here again. So if you have peer programming, um, You’d probably have different cultural view practices again. Right. So very often we talk about code reviews and then code reviews are that thing that everybody does the same, which is completely not true, could be, it can be so many things, right. If I’m looking over the shoulder with somebody and looking at the code at the same time, it’s an over shoulder over the shoulder code review. And so peer programming could actually be one kind of code review, but then you have to ask your, you know, for yourself or your organization again, Do we need more? Do we need like some gatekeeping around that so that we have another person do we need in fairness right around that? If I have two people that are pairing very often, then you have like this knowledge silo, again, that those two people know about the code, but maybe I want other people in that, so we’ll add them. So, um, code review can be, uh, a complimentary strategy to pairing, but I definitely say it should look different, right? For team, the task pairing code review should look different than for a team that desk. Does know Perry. Yeah. Okay.

maror:[00:48:50] Very cool. Um, Leon, I think this one’s for you, what’s the relevance of code reviews for compliance.

liran:[00:48:58] So I think we found that there are a few, few key elements in that I think compliance kind of often requires that, eh, some peer reviews, every change, and I think it goes back to what said about the purpose of code reviews. And compliance for the most part would be focusing on first and foremost general security review, but even more. So it’s an often a question of trust and governance that you essentially know what code is going into the system in a way. I think it’s very different from most of America is been talking about today, about, you know, in depth review, understanding the code and. Eh, me ensuring that you have all the right pieces in place. It’s more about cursory examination that you make sure that you’re not, you’re not changing anything. You shouldn’t be changing that the person is making that commit within the assigned task is working on and within the assigned scope, if there are any changes to security, sensitive area that you go through additional scrutiny. But if those are eh, you know, It’s more about ensuring that whoever is made the task, did what he was supposed to do rather than the quality of the work he did. So that’s a very different thing. And it’s very important again, to kind of. Define the purpose of the code review. Is it just about understanding the scope of the task and the scope of the change, or is it about deeply evaluating it? Giving feedback, mentoring, sharing, knowledge and so on and so forth.

michaela:[00:50:43] Okay.

maror:[00:50:44] Um, and Mikayla, if people wanted to learn more about code reviews, where, where would they be able to

michaela:[00:50:50] go to do that? Okay. Yeah. Um, obviously I can see my website, right? I’m writing quite a bit about code reviews, which would be awesome. Code reviews.com. Or you can also go through my, my link. That’s my name, Kayla gala.com, which is a little bit more difficult for me. We can put it somewhere, but I’m awesome. Code reviews, dot com should have them work as well. And, um, yeah, I also have like a GitHub. A project that’s about code reviews, um, where I’m listing a lot of different resources that I find on the web. So it’s not only from me, but also what I started recently doing is best practices from different organizations. So there are articles where you see like how, um, You know, for example, the Google desk cultivators, or how is, you know, VMware doing code reviews and other, um, resources that I found really valuable as well. I also have like code review checklist there on my guitar profile. Um, so it it’s, uh, the guitar thing. And then my, my handle is M and then Kyla, G R E I L E R. And so, yeah, there, you can find also quite some stuff, um, that, um, that comes from everywhere that I found this valuable.

maror:[00:52:03] That is a wealth of information that everyone should definitely take advantage of. Um, and I will make sure to send out your Twitter handle for them too, so they get it. Um, and on the topic of learning more in the event, where can you learn more

michaela:[00:52:17] about lookout?

liran:[00:52:19] So you can learn more about first and foremost, that’s roka.com, which is our awesome website. We’ve just launched a new website. And so feel free to check it out. Also, you can reach out to me on Twitter at
other school last, and I’ll be happy to chat with you and share more about what

michaela:[00:52:36] we’re doing.

maror:[00:52:39] Amazing. Okay. So then we have one last question here, um, and it looks McKayla like it’s for you. The question is, do we need additional manual reviews or testing if we have a study analysis tools or is

michaela:[00:52:52] that enough? Okay. Um, I think I touched it a little bit on that. So I definitely think it’s complimentary again. Right. So if you have, like, I definitely recommend to have studying analysis, test tools, have static analysis tools, security tools, because they are much more systematic and they they’re defining more issues. They are less error prone. You’re not overlooking something, right. Especially for things that are systematic. As I said, Um, for example, security testing tools are really good or, you know, security analysis tools are really good for injection box, um, where, you know, people would have a hard time and it’s just unproductive for them to look at that. Um, you know, in, in the, in terms of what a tool could do here, but then for example, broken off, um, authentication or just the flow of things that is really beyond the scope of tools right now. Right. So if you’re, for example, sending out. Let’s say that you’re somebody is requesting a password reset, right? So the whole, uh, workflows through dat can be very, very broken and there are no tools that, right. An alpha example can check for that. So that definitely has to be done manually by, by person and very similar in the cultural sense. Right. So, um, there are really good static analysis tools, but there’s always things that just the tool cannot do for you. So they are complimentary, I would say. Okay,

maror:[00:54:18] thanks. So that’s all we have time for today, unfortunately. Um, but hopefully we can also down again cause it’s been great. Um, so thank you everyone for joining us, we will be sending a follow-up email with the recording and McKayla and Leon’s contact information for whoever wants to get in touch with them. And thank you McKayla. And thank you again.

michaela:[00:54:38] Yeah. Thank you so much. Let’s refund.

liran:[00:54:41] Thank you. Thank you.

Book your awesomecodereview.com workshop! Secure Code Review Workshops are coming soon too!

Episode 38: Legacy code and what to do with it – With Michael Feathers

In this episode, I talk to Michael Feathers. Michael is the author of the super-popular book “working effectively with legacy code”. He is also the founder and director of R7K Research and Conveyance, a company that helps engineering teams with their software and organization design. Recently, Michael also joined Globant as Chief Architect.

We talk about:

  • legacy code and how to deal with it
  • how systems almost feel like living organisms
  • how we are on a journey with our code, and why it’s so important to care for it,
  • how legacy code is the result of an organization where engineers turn faster (leave the company/team) than the code churns.

Today’s episode is sponsored by Botany.io – Botany is a virtual coach for software engineers that unblocks essential teamwork and levels up careers!

Subscribe on iTunes, Spotify, Google, Deezer, or via RSS.

Transcript: Legacy code is a living organism – With Michael Feathers

[If you want, you can help make the transcript better, and improve the podcast’s accessibility via Github. I’m happy to lend a hand to help you get started with pull requests, and open source work.]

Michaela: [00:00:00] Hello and welcome to the Software Engineering Unlocked podcast. I’m your host, Dr. McKayla and today I have the pleasure to talk to Michael Feathers.

Michael is the author of the super popular book “working effectively with legacy code”. He’s also the founder and director of
7K Research & conveyance, a company that helps engineering teams with the software on organization design.

Recently, Michael joined Global as a chief architect. Since I have been at university reading his amazing book, I always wanted to pick his brain. So I’m super excited to have Michael here with me today. Michael, welcome to the show.

Michael Feathers: So glad to be here.

Michaela: Yeah, it’s my pleasure. I’m really, really excited. Michael, you have been probably working more than 20 years with engineers, with software companies from all over the world. This is so, so fascinating to me. I’m super curious about how different organizations develop software. I’m always asking the questions. What makes teams and organization more effective than others? What’s up engineering practices. Do we have, I’m a big fan of code reviews. And so I want to know from your experience, are there best practices? Can you make out best practices that really lead to success for engineering teams where you say, well, if they follow that, right, they will be very successful versus factors that you think they are definitely bad and lead to a lot of troubles.

Michael Feathers:[00:01:23] The question. And it’s interesting too, because like the practice space is very interesting, but I think a lot of it really comes down to organizational culture, you know? And it’s, you know, if you have a good culture, then basically like the practices will develop almost invariably, right. Or you’ll at least be open to going in and exploring different practices and things along those lines. I think, you know, for the thing that I have gotten called into organizations for quite often, you know, legacy code, the thing I kind of noticed over and over again is that. What is missing sometimes is really a very Frank conversation about the quality of the stuff that people are working on. Right. And in the worst cases, it’s kind of like a. It’s like everybody is told, you know, you must write code and you must design this thing and create it, but nobody’s really paying attention to it. And sort of like, you know, thinking about it as being significant, you know, quite often there’s like a task focus rather than focusing on the quality of the thing that you’re producing, that kind of thing. So I, you know, I wouldn’t really know how to go and actually sort of say, what are the best practices? I think that so many of the things that we basically do. In the industry now regarding testing and pairing and mobbing and you know, the way that we allocate work and stuff like that, a lot of those things really kind of help. So.

Michaela:: [00:02:38] Yeah. So one thing that I thought about is engineering values versus practices, right? So I think that engineering values and developing dos is a team. And not a lot of people are talking about it. Unfortunately I think much more people should talk about values. The engineering values that we have. And not the practices because practices can change and they should change. Right. They should change over time. And with technology changes and with our, how our society changes, the practices should change and somebody comes out and has a new idea. Right. And th they try something, they fail maybe 10 times, and then suddenly they found a new thing. . But the values, I think, for example, what about our. Code health. Right? I wanted the quality of the code that we are expecting how we are developing software, how we are talking about the things I think those values are really important. Is that something that you have more and more teams do or, you know, successful teams do.

Michael Feathers:[00:03:28] Yeah, definitely. I think it’s yeah, it’s a lot of, it really comes down to taking the work seriously. I think, you know, in a way, and in terms of values, it’s, it’s, it’s funny with this too, because you know, there are many different, like, you know May different ways. We can look at, you know, values across organizations and different frames we can use. But I think that actually going and seeing the systems themselves as valuable is like a rather important thing to do as well. Right. And that’s a little piece that tends to be missing at times. One things that’s kind of been striking to me across. You know, my career is basically noticing that in the very beginning back in the 1990s, it seemed like there was this thing of kind of like, well, we’re all kind of like disposable and as engineers, you’re just basically there just to do the work and then basically go home or go bowling or whatever it is you want to do in the evenings. Right. So going and recognizing that we can become more whole people at work and basically valuing our own development and valuing our communication, our relations with our coworkers. And I think that’s a great thing, but then there’s also this other thing too, of like valuing the thing that we do and looking at the things that we create as being significant and having their own intrinsic qualities that we can kind of like, you know pay attention to and kind of foster over time. So yeah, I think one of the things I’ve been coming back to over and over again within my career is just this notion of thinking about the systems that we create as if they were like alive in a way. Right. And we get to care about them. Right. And it’s kind of like this way of going, like applying like this anthropomorphic frame to the things that we’re working with. And some people might say, well, that isn’t like a it isn’t like a good thing or it isn’t a realistic thing, but I find it very useful to come and sort of think of them. Think of the systems we work of is basically things that we can foster and care for. You know, I think that helps us become better engineers.

Michaela:: [00:05:17] When I was preparing for this interview, I read through the things that you write on your website on the RS seven K website. And this is something that I read. I was really fascinated by it. Like. That the code is in living organism. Right. Sort of, and, and I thought, well, this, this is true. Right. It evolves, it changes. People come in and the levels are their think of Prince there. Right? So coded I right. Looks probably quite different than code that you write. And even if you have engineering values around that, and even if you have coding standards, you probably can tell, you know, sometimes the boundaries of this is where one engineering team or engineer work. Then this is where another engineering team works. And you also talked about your, how actually Cultures and the organizational structure shape our code, which is one of those laws that we have been seeing and studying for for many years. Right. Where we see that actually. Yeah, exactly. Right. But you see that you have the organization and the boundaries and how you structure and the design, your organization will reflect in the architecture of the system, which also shows that somehow it’s, it’s living with the organization and growing and, you know, Aging and getting to a legacy when the, also the structures of the organization change. And it probably it’s even harder to change the code per se, when you’re changing the organization. Right. So people change organizations all the time. They’re reorgs in large organization. They’re reorgs all the time, but we’re not reordering the code in the same capacity. . So what is your thought on that, especially about technical debt, for example, Then he called that, that cumulates over time. How should we deal with that? And how should we integrate that in our day to day work life?

Michael Feathers:[00:07:01] The, the main thing I keep coming back to us, like the frame. For this, you know, it’s kind of funny. We can talk about this being like a metaphor that basically code is like biology, but I think just about anything that kind of grows incrementally, where it’s easier to add new things than to change existing things tends to go and sort of have like these hallmarks of organic growth in a way. Right? Like I used to say to people, like, if you, if there’s like a young tree and you kind of like kick it and it kind of like falls over a little bit, it’s kind of like, it’s not going to upright itself. It’s going to basically continue to grow. You know, upward, but from the direction you kicked it out. Right. And in much the same way that kind of thing happens with our code is that the things that we do tend to basically leave their Mark upon the structure of the code. Sometimes in complexity theory, this is called path dependence. It’s kind of like that basically. You’re dealing with something that has a memory and basically what’s possible with it depends upon what happened previously. Right. So I think that the main thing is to kind of like, just sort of like recognize this, recognize that that this is part of the character of, of code itself and that we don’t really ever get to go and sort of like say I’m going to build a brand new system. Like the complete rewrite, that’s going to go and be shiny and, and perfect. You know, that’s going to go and serve. I solve all of our problems that, you know, the, the code that we create, basically we’re on a journey with it and it’s going to basically take time for it to go and react to the new situations in this environment. And those new situations are how our organization is structured. What new features we need within the system. And it’s just going to be like this slow process of change. I think the interesting thing with this in terms of practicality is that. It does mean that sometimes it’s easier to go and create new systems than to go and sort of modify existing ones. And we should be a bit more proactive about doing that. Sometimes we’re basically like you know, if we have particular products and an organization think about creating new products sometimes rather than trying to burden existing products with new features that may not quite fit for instance. So, you know, that’s. It’s a rather abstract answer. I’m sorry, but it’s kind of like, you know, I think that basically this frame that we have of looking at software in this way can help us make some of these decisions a bit better, but they don’t like sort of solve all the problems necessarily in there.

Michaela:: [00:09:21] I heard you say a couple of things, especially before where you said, well, we have to take the quality of the system more seriously. We, you know, we have to be more careful. In my experience. I see, I see several camps, right? So there are the, really the, the engineers that, you know, they love high quality code. They, they learned a lot about how to create high quality code and they really do and nurture the systems quite a bit. Then you have like some tension between business goals here because as long as it works right, and it fits the business goal, there’s like this tension and this, this pull towards, well it’s good enough. Let it. Be please don’t make it nicer or more elegant and more inspiring. Just let it work. And then you have also very pragmatic developers that are maybe, you know, they’re not, they’re not into elegant code so much. I haven’t seen many of those, but they are. And I think a lot of more people become, especially like people that are creating software because they want to create something, right. They want to do products. So we have like a new wave of engineers. I think, especially when I studied a lot of people studied really for software engineering, but they were not entrepreneurs. Are, are only a couple of them were right. And now I see there’s like a huge mass of people that are also. Engineers, because they want to be entrepreneurs. They want to create products. And I think they’re coming a little bit with a different mindset into the whole you know, why are we using code and using code and code is just a means to an end, whereby I don’t know when, when I was in university, it was not a means to an end. It was the end, right? Like, this is why we are here. This is, it was not, it was a product focused. I had not. Lecture about product. I had only lectures about code and what is good code and what are good, you know development practices. And I also studied computer science. So a lot of computer and computer systems and system architecture and so on. But no product, right there was not all, how do we position that product or what makes a good product, not even product management, which probably should be there with it anyway. So I’m saying. I think there are more people now with a more pragmatic view on software than maybe 10 years ago. That’s at least my experience. So how do we balance that? And is that a good thing? You know, is it a bad thing? Can we even say, you know, it’s good or bad? Is it binary?

Michael Feathers:[00:11:46] Yeah, we can, we can basically have like a very instrumental view of code and systems and say they’re there. To serve us. Right. And that’s a frame, which like you say, can basically help you out if you’re an entrepreneur. And you’re just trying to get something to market very quickly. But you know, it’s a story which is, you know, just, you know, an age old story that essentially it’s like people get to market and then they discover they can’t change anything because they’ve created such a brutal system that it’s impossible to work with. So you’re always going to have like a mix of people they’re pragmatic and people that are idealistic, I guess, the. The important thing culturally is getting them to be able to talk to each other and see each other’s point of view and recognize that sometimes you have to be in it for the long haul and you have to be able to make trade-offs that sometimes it’s good to be opportunistic and do something very quick and dirty and disposable. And other times you want to go in like really invest in a particular thing, because it’s important to you. One thing that is weird about this is that I think. If we look at code as being just this mechanical thing or this thing, which is like over there someplace, or the thing that we mess with, you know, when in between our business conversations, which are really more important, you know, then we we aren’t paying attention to it enough. To basically understand when it can get in our way sometimes. There’s a guy I know Colin Brecht who basically started doing this thing called quality views. So it’s an idea that I had years ago and he was doing this within his organization and it’s a really, really cool tool for going in, dealing with technical debt. And I really want, that’s a great thing to go and talk about. It seems like with technical debt, we always go and we ask like the business side for like, Time to go and like go back and fix things. Right. And it’s kind of like, that’s always like a tough sell and it’s also kind of like people say, what am I going to get for that? Right. But the technique around this is to go and say, let’s take a look at our systems. And kind of like make a little pictorial representation of that. Maybe like if you have a big system, maybe it’s like five boxes of things, right. And then when we’re discussing the features, we want to add to the system, we can go and say, okay, well this particular feature touches these three boxes and this other one touches these two boxes. And what you do is you put colors on these boxes to indicate their level of health. Okay. And what happens is that color gradation is going to change over time. Right. And you just basically don’t use that as a basis for conversation with the people who aren’t looking at the code all day. Right. And the neat thing about this is that without talking about technical debt at all, it starts to become like this feeling within the system, within the organization that, you know, the code is a real thing and it has a particular qualities. And those things can either help us or get in the way, depending on how healthy it happens to be. Right. So it’s not uncommon to go and do this and have somebody go and say, gee, you know, this one area of the system is very red and it seems like every time we ask for features to touch this area, you know, it’s going to take a long time. Can we do anything about that? And then you actually have the business going and asking for system’s health. . Whereas before it would be completely invisible to them. . So I think that stuff like this is kind of like the path forward in a way is to basically sort of make. The systems are real to people within an organization. And, you know, sometimes the choice is going to be to do something very pragmatic that might actually go and sort of hurt things for a period of time temporarily. And you might just need to do that for the business, but you’ll at least understand what the consequences are of longer term.

Michaela:: [00:15:07] Yeah. I liked that. I liked that idea a lot, because if you think about a business and it has a building and it is in the building, like, and the building just rots right. Buildings wrong. Right. So they. They get older. The forsake is not nice anymore. The entrance is maybe not nice the floor, right. Ceiling and so on, but people it’s very visible to people and you think like, well, it’s good enough still it’s good enough. But there comes a point where you think, well, we cannot have this entrance. It’s still functioning. Right. It opens the door, but it makes them noise. Right. And it looks horrible. So you don’t want to Valcom your, your people there and, you know, At one point, there is no, you know, no way back to repair it, right? So then you have a big disaster, but this is very visible. So I liked this idea that you actually, you show it, you help people imagine what actually the system looks like, right? So there’s some visibility and transparency in it, which I think is very often missing. And I think that this, this missing visibility and transparency is also something that makes our, our lives so hard as engineers. Right? We are in front of the computer.

Michael Feathers:[00:16:10] It’s completely invisible to people. Right. All they see is people looking at monitors and it’s like, who, you know, they look at us looking at monitors and they’re like, Oh, what are these people looking at? Right. So it’s rough.

Michaela:: [00:16:20] And, and you also, you don’t see, the work and the quality of the work. Right. Do you see a button and one engineer can create a button and another engineer can create a button, but you don’t see what’s behind it. You know, like how is the backend integrated? Is that button actually really usable for another button? The CSS come, you know, from a class or is it just. Do you know, hand drawn into in, in lane style or something, right.

Michael Feathers:[00:16:41] I think it’s almost it’s beyond metaphor in a way, is that I think it really is true that software’s physical in a way, you know, it really is. Now, when you think about object orientation, it’s like objects are meant to represent things or to basically be things that, you know, have cohesion and coupling and can communicate with other things. You know, all of these things live in this virtual space, but it’s like they still. Obey some laws of physics in a way it’s kind of like modularity is like when something grows too big to basically fit in our heads, we basically want to keep it smaller. Right? So you can see that as being just like objects in the world. Some things are just ungraspable because they’re so huge and software can be like that too. So we want to go and keep it smaller like that. So I think, you know, we can use the real world as like a decent, you know, framing device for going and understanding these things and helping us make better decisions.

Michaela:: [00:17:32] Yeah. So I’m interviewing and talking to a lot of people right now, engineers, and I’m talking a lot about, you know, their values and also the code based health and what makes them happy, what makes them productive. And one thing that I hear over and over, and again, is that. You know, you have your engineering heart, right. So good code, good quality makes you happy. That’s definitely something that I see for, for many, many people, not everybody, but a lot of engineers, but then you have all these system constraints and now the system is an organization, right? So you also have, you have to fulfill. Your duties, you have to do what you’re supposed to do, and knowing that you’re doing what you’re supposed to do, it makes you also happy. It makes you more excited. Right? So if you know that you’re actually working on something that you’re not supposed to work on, it makes you unhappy. And, and it’s also risky to take on the task, right? So there’s this, there’s this productivity then there’s this code health and they’re all some how intertwined. Right? So people want to work on, for example, technical death is something that people, a lot of engineers would say. Well, it’s a challenging problem. I like to tinker with Dakota, like to make it nicer. I like to make it more, you know, reusable, more maintainable and so on. But on the other hand, there is business constraints and business needs. And my manager, you know regards me, or also evaluates me based on the features that I’m delivering. So I actually cannot take on. Technical debt. And very often I hear also people talk about the commitment is too big, right? So it’s not only that it’s a single engineer that cannot take on the technical debt. Even the team mission is not aligned with, you know, getting rid of technical SRE. They will work a little bit on technical debt a little bit here, but then the. They’re getting more, accumulating, more technical that overall. So they are actually not, you know, they don’t feel that they can really do a big thing. And I think you probably people will call you when there is like, when you have a problem. Right. So it’s too far. So how are you going to change the mindset? How you’re going to work with the people?

Michael Feathers:[00:19:32] People usually call me once they recognize that they actually have a problem, you know?

Michaela:: [00:19:36] Yeah, it’s very late, right?

Michael Feathers:[00:19:37] And I think that’s the bigger thing too, is just as developers, when we’re working in an organization, it’s a bit of work to go and actually go and convince people that actually some investments in going reducing technical debt gives you a payoff. Right. I think the most important thing to go and recognize this, that like there’s almost like this 80 20 rule that basically goes and happens with code change. And I, you know, I haven’t really seen research around this, but it seems to ring true. Maybe you have, I know you have a. We have a research background, but it seems like there are hot spots in code systems where basically there a lot of change tends to gravitate towards them. They can shift over time. Right. So the thing is, it’s kind of like as a developer, if you’re going and looking at something that’s pretty messy and then you look back and you basically see that that area had like, Thousands of commits made against it. One thing is you can pretty much count on us, any little thing that you do to go and make things better. There is probably going to go and give you a bit of a payoff, you know, going forward because of the fact that it’s a hot area of the system that goes and gets a lot of change, right. And I’m getting, you know, in the organization, just, you know, we should never look at technical debt as being like this thing, which is a uniform across an entire code base. I mean, it is in a way, but it’s like in terms of the value of technical debt, It’s wildly different in different areas of the code. Some areas are more mission critical in your code base than others are. And if you can at least have different say, rules of engagement for the system and go and say, you know, we know we don’t have very much time, but you know what, whenever we touch this particular part of the system, we’re going to be really careful about this. And we removed. Technical debt because we know that it’s critical for our business and we’ve changed it a lot. Just getting simple agreements about that, going forward, give you almost like a bit of a foot in the door in your organization to go and have this conversations about how quality impacts things. So yeah, it’s never like this thing of like, Hey, let’s go install technical debt. It’s more like let’s find out where it really pays off and then go and use that as a way of going in sort of like surfacing the conversation and doing something about it. Cause that’s gonna be a smaller investment.

Michaela:: [00:21:36] Yeah, hotspots is definitely something that we saw in many different empirical studies as well. Right. So that problems accumulate in different areas more than others. And there’s clusters that around that and so on. So it is definitely. Rings true for me from, from this perspective as well. And I like what you said, well, technical debt, you don’t have to work on every technical debt unit code base. Right? Some of that, it doesn’t even interest you because you’re not touching it. The system runs, there’s not, I think a lot of much it backs you has to do with how often you’re changing the parts, that there is a lot of technical debt, right. So if you’re not changing the parts who cares, right. Probably I don’t

Michael Feathers:[00:22:17] And, and really, I think, I think that’s one of the things I like in my book. I talked about this a bit in terms of writing tests, like going and breaking dependencies and writing tests for particular areas of the system is that because there’s this kind of like power lodge, predo distribution of code change that if you take the time to break dependencies around a huge class and write tests for it, chances are, you know, you’re going to come back to that relatively soon and basically go ahead and discover that that work has already that hard work has been done. And you’re going to be able to take the benefit of that work. Right. So it’s kind of like, it’s, it’s weird because like that power Lalish growth goes and leads to some chaos and systems, but it would also helps us in terms of going and sort of focusing our, when we focus our energy, we get payback for it also. So it’s like a place where we get a virtuous cycle that goes into Alliance with the psychotic cost of the problem, you know, so we can sort of. Leverage it to go and solve the problem as well. Like, I’m not sure I can put words better yet, but.

Michaela:: [00:23:15] No, it sounds, it sounds good. Yeah. . So you were talking about testing and in your book, and this was also a good question and it was actually asked on Twitter, right? And your book, there was this really strong connection with legacy code and the. Lack of tests, for example, because if you don’t have tests, tests, somehow are also a means to an end. Right? Did they give you confidence that when you are making changes, the system is still very similar to what work, what it was before, right? So you’re not introducing anything. Box, hopefully. Right. And so the better, the better the test, the better your confidence. And so you’re, you’re actually able to do changes without any tests you don’t know, like, are you messing up completely here or, you know, are you introducing a lot of side-effects and so on? Is that still in definition that holds true for you today? Or would you say that over time, the definition of, you know, what legacy code is changed for you?

Michael Feathers:[00:24:09] Well, I think any definition like this. And instrumental. I was actually the time I came up with us working with a team and I sort of just got angry and I said, you know, people, weren’t writing tests. I’m kind of like, you know, it’s kind of like, you know, this is legacy code because it’s code without tests. And I started ranting a little bit right in front of mine, says, you know, you should write that down. I’m like, okay. So I did. But the, the reason why I really was trying to press that point is because it was like really obvious to me through my experience at that time that. There’s a real strong, qualitative difference between code that has test coverage and code that doesn’t in the sense that if you don’t have test coverage, quite often, you’re scared of making changes and you can be much more conservative about how you, you know, do things you may not refactor as much. And you know, just, you, you have like a, a greater sense of ease working in code that has decent cusp test coverage. And I thought that qualitative difference is just so high. That’s worth going in highlighting that and basically going and tying that into a definition of legacy code. But then, you know, there’s the thing of kind of like there’s many different definitions of what legacy code is, and, and they’re all useful to some degree and that’s fine, but you know, I think for people that need to hear it, that’s the one I still use just because it’s, you know it helps people go and it’s, it’s a definition which kind of points to the solution, which I think is useful for us. If we’re trying to go and galvanize attention towards better practice.

Michaela:: [00:25:32] So on your head you also wrote. What we call legacy code is exactly what you would expect when developers turn over his I fast error, dent code turnover. Right. So for me to seems very much it, legacy code has to do with the loss of the knowledge about the code base. Right? So if you’re, and this sometimes has to do with the technology as well. Right? So if you think about systems, you know, written in some languages, Well, we just have really only a few people that are still familiar with this code it’s legacy code, right. Or if you’re having a code base and people leave, even it’s written in reacted, she’s now, you know, modern and that everybody knows it. People don’t have knowledge about the code base. So it’s legacy code. Is that something that you think also rings true for you?

Michael Feathers:[00:26:18] You know, I kind of like somebody offered that as like a an alternative definition is that, you know, legacy code is the product of, you know, it’s when your team turns over faster than your code turns over. Right. That kind of thing. And I think it’s important to go and basically see that system dynamic because it really affects. A lot of the decisions we make about process and team structure and all these things going forward within our organizations. I remember, I try to remember which tool this was. So I won’t mention the name because I’ll probably get it wrong, but there was like a tool that’s widespreadly used within the industry of database technology. And my understanding is it’s actually done only by two or three people. And they’ve been working on it for decades and it’s kind of like their life work is basically going to supporting this particular piece of software. Right. And to me, that’s almost like the ultimate fantasy in a way. It’s like, Oh, you know, have this house that you live in, that you basically sort of like remodel, continuously accepted this code. And then basically, you know, it so intimately that you’re. In this space where basically it’s never really legacy to you because you’re constantly able to go and improve it and add to it and stuff along those lines. Right. And it should never be something which is too big, where it’s too big, then, you know, It’s so big that a couple people can’t work on it together, you know, that you need an entire team. But it’s interesting without to go notice that that’s almost like an idealistic situation of having something that’s durational, the people are going to be with it. Long-term, it’s relatively small and you can basically do a lot of really great practice with it. But the thing is, it’s kind of like in. The typical development that happens to these days that never really quite happens. The software tends to grow up, grow bigger than us bigger than what will fit in like two people’s heads, for instance. Right. And beyond that people will basically leave and go to other jobs and other people will come in and stuff like that. And it’s these things that happen, which go in, tend to go in. Cause you know, the, these issues that we tend to have, and then we have to go and introduce practices like, you know, extensive testing. You want to make sure that we can. Detect when something goes wrong in this thing that we don’t quite understand when we make changes to it. Right? All these things are almost like props that we use to go and basically deal with this fundamental mismatch between the lifetime of the team, the lifetime of the code. And I think it’s kind of a fascinating thing to go and recognize that those tensions are inherent in what we do. And it’s not that we’re bad programmers. We’re just dealing with a pretty hard problem that we have this, this lack of alignment between team and, you know, piece of code that we’re working on.

Michaela:: [00:28:44] Yeah, exactly. And I think it has also to do with, I mean, there are so many factors that influence that. So for example, in our industry, people that are, you know, five year in one company, this is like, Five years. How could you say that long? Right. Like people are turning over really quickly also for various reasons. Very often also because they want to level up. And because there is, or yeah, because there is a lot of opportunity out there, right. So people can choose, pick and choose, be quite choosy. But on the other hand, as you said, well, people are leaving and they’re with them. A lot of knowledge is leaving, which I think sometimes organizations still don’t recognize the value of the, just the knowledge that people have in their head that they accumulate. Right. Because, and we see that and you know, that I’m a big fan of code reviews, for example. And I did a lot of research on cultural reason. What we see for example is that. The person who has seen fight at least once this is the big zero to one, right. Has seen the file, the, the code that you’re asking them to review, at least once, then it will give much better feedback than before. Right? So if you look for example, usefulness of feedback, and so how many of the code review comments are useful? We see that if they haven’t seen the file before the code, before the code base, before this part of the code base, before they give around three. Out of 10 useful code comments, right? So only 30% of their comments is really useful to the author. But if they have seen it, at least once it, grows from 30 to 70%. Right. So this is a big jump, but then you only see incrementally, like until five times, then it doesn’t matter anymore. Right. So if a person has seen the code five times, then it’s plateauing the usefulness of the comments that they are giving. Right. So, but culturally is in general. I think it’s a really, it’s a good practice if it’s done right. To help that more people are familiar with the code. So for example, if you have at least two people or three people that have seen the code base, or know a little bit of what’s going on there, they don’t have to be in a, like the author of it. But I think they are quite intimate, familiar with the code base because of the cultural reason we see that. Knowledge really increases that we can measure, even at the knowledge of the code base increases for teams that are doing code reviews versus with teams that are not doing code reviews. How is your experience with that? Is that something that you recommend that you recognize as important and so on?

Michael Feathers:[00:31:08] Yeah, no, I think it is. And it’s, it’s funny with this too, because I kind of come, you know, at least I’m gonna become a consultant. I really got embedded, like in the extreme programming and agile communities. And so we had like pair programming in the very beginning and we would basically use that as like a. A way of going and trying to go and arrive at like continuous code review. And then more recently you have mob programming and ensemble programming as well. And it’s kind of weird about this because it feels wrong in a way to go and have five people working on the same piece of code at once, right. In a group. But I can’t. You know, the more I reasoned about it from first principles, I think it’s actually a pretty decent thing to do, right? If knowledge loss is one of the main things we we deal with over time within an organization and basically making sure that everybody’s involved in the decisions and those, the code intimately, it’s probably a decent investment for an organization to make. It’s a hard sell. I’m sure you know, many organizations, but it’s, it’s also something which is kind of fascinating. I think one things that’s kind of funny with this. I know that like, this is like, Knowing this pod, you’re kind of like asking me a bunch of questions, but with your background in code review, the thing that I kind of noticed, and I’m wondering if there’s any research around this is that sometimes there’s this issue of like, whether people will really be forthright about their criticism of a piece of code. And if they’re not, do we basically just sort of like let quality deteriorate because nobody really wants to step up and say, there might be an issue here, you know, is that a thing which happens in code review that you’re.

Michaela:: [00:32:34] This is definitely something that happens and it happens for various reason, right? It could happen for example, because people know that even if they are criticizing it. The team and the organization, how it’s structured and how, you know, incentives work and all of that. Right. So there’s a lot of that behind the theme thing. It’s too late. Right? So most of the time the criticism that’s not sad is because it’s too late. So even if I would say it right now, we are not going to, you know, change it. We are too far in it. Right. So this is, this is one, one part where this happens quite a bit and it’s really sad. And you know, this is also a planning issue, right? It’s the ticket to big when are we involving people to give feedback? And so, you know, people have worked like a month. On something. And then you’re, it goes higher up and people say, well, this is from an actual perspective. It’s horrible, but it cannot even say it anymore. Right. They cannot change you’re too far in. And then obviously there are also hierarchy issues, right? So is a, is somebody allowed to say something? Is it even hurt when you’re saying something? . People learn if the, Code review feedback is not perceived or not received and not changed people that also learned that this doesn’t, you know, it doesn’t make sense. So this is definitely something that happens. There’s also something called, you know the priming bias. So if you see that other people already looked through the code you’re also primed for their answers. So the best thing would be that people are looking through the code without looking how others responded and say, well, it looks good to me, or, you know,

Michael Feathers:[00:34:05] Yeah. And we’re talking to somebody, an organization, a very big software development organization, and they were saying, we know we hire great engineers. But the one thing that we kind of noticed is that essentially we can see through the metrics that the code quality is deteriorating, but nobody on the team knows because they’re just so used to looking at the same code all the time. They just kind of understand what’s going on with things. So the newcomer. Would be completely, you know, I’m surprised by so one things I kind of wonder about all the time. It’s like, can we basically get new people on the team, people visiting that we’ll be able to basically say, well, you know, you’re saying this is great, but I don’t understand it. And then sometimes I might be like a, like a jolt to go and say, it’s like, wow. You know, it’s like, are we building a silo of understanding here that basically is disconnected from understanding of the world. Might be a possibility with that too, you know, to go and sort of like try to mix things up a bit to the point where the teams don’t become stale in their understanding.

Michaela:: [00:34:57] Then, for example, culture feedback, right? So I’m working also a lot of very often with people or teams on how to give feedback so that others even can, you know, receive it. And very often there is like, Oh, but in our team, we understand when we are talking very harshly with each other or whatnot, right. But this is also a sort of blindness, which I think is very similar to the blindness for your code that you say, well, if you have to be very intimate with your team and know that this is actually not a harsh comment, but it’s a joke for you. Then first of all, it’s not coming to others. It’s not something that you want to leave on because in two years, your team is not a team anymore than it is today. Right? So if somebody looks at this code comment they will not understand. Right. And it’s also, as you said, it’s something that you’re building up where. It’s not conforming to what we were expecting outside. Right. So it’s really something that’s very, it’s a very narrow, very blind view on your system. Right.

Michael Feathers:[00:35:49] Yeah. Yeah, no, it’s, yeah. There’s a lot of really interesting dynamics around all this stuff. I find it really fascinating. It’s funny. Conway’s law, you know, we’re Conway’s laws, you know, saying that the code structure is gonna end up going in, mirroring the structure of the teams to kind of like, you know, look at that at a very deep level and go and say the same thing is true with quality. If the coast starts to be kind of messed up at probably in the case, there’s communication problems within the team, in terms of nobody’s able to go with, stand up and say, there’s something wrong here. Maybe, you know, I mean, it seems like that kind of effect can occur as well.

Michaela:: [00:36:25] Lot of different issues behind why quality deteriorates. Right. So what I also often see you and I mean, It really breaks my heart is that if people want to, but they’re just really, they can’t or they feel that they can’t. Right. And this is very often from an organizational perspective. So one question that I had for you is when you were coming in, I think there’s a lot of buy-in from a path, right? So there’s a lot of top down. Understanding suddenly, Oh, this is important. Whereby teams are dealing with this bottom up, you know approach really have to see, well, I see this is a problem. We feel this is a problem. We don’t have enough time to do it. You know, there’s a lot of deadlines and so on and they would have to communicate up to which I often feel. This is really, really hard. And if you don’t have commitment, this is also what developers say, right. If I don’t have to commitment, I just can’t fix it. It doesn’t matter if I find it important or not.

Michael Feathers:[00:37:19] The advice that might be kind of seen as like problematic in a way. Right. But the thing is, I think sometimes with a good team, If you can find other people on the team that care about co quality issues, the way that you do just form a little bit conspiracy with them. It’s kind of like, you’re not going to ask for permission. You’re just going to make things better silently and just not really talk about it with the rest of the team until they start to notice just like through osmosis, that this is a better way of doing things, right. One of the worst things you can do as a developer is try to lecture your other developers on the team. Right? Nobody likes that. Right. And you know, if you have. Some respect already that you’re able to go in sort of like say, you know, you should really do things this way and it works. You know, communication wise. That’s great. But if you don’t have that, you know, it just doesn’t go all that far. But I think, you know, the, the main thing is the programming can be very fun and cleaning things up can be very fun also. Right. And if, you know, you can develop that kind of culture internally within the team. That’s great. And worked with a team a long time ago that really had this interesting thing. They did great work, but part of it was also a feeling that every other team in the organization was a bunch of idiots. In a way. So it’s kind of like this thing of going and saying, like us versus them and it formed like this cohesive group with them. The thing is they were all smart enough to go and recognize that, you know, that was like not the truth. It was just like this little story they told themselves to basically sort of like say. Yeah. Yeah, we’re doing this great thing. And it’s like, who cares if nobody else really uses it? You know, that way that we intended, it’s like, it’s still okay. I think we can basically play those emotional games a little bit to sort of like not hurt anybody, but also kind of bolster ourselves up as we try to do things. It’s funny, cause I’ve mentioned this a couple of times in interviews and stuff that I really feel that I missed an opportunity with the legacy code book to basically give it a positive frame because even though it can be kind of treacherous to go and deal with legacy code, it can also be like, And adventure, if you basically sort of frame it that way, you know, it can kind of let go and say, look, you know, you’re kind of like going through this crazy jungle and you’re learning things and you’re picking things up and making things better as you go. And that can be a decent way of going and motivating yourself and people around you to go and do some cool things.

Michaela:: [00:39:26] I think that a lot of engineers actually like cleaning up, right. It’s like, If you have like a kitchen sink and it’s, it’s dirty and then you swipe over it and it’s nice. Right? And so I think a lot people also recognize that and it’s, it’s a hard problem, right? It’s on one hand they had problem. There’s a lot of architecture thinking about it. So sometimes maybe people don’t even have the possibility to be involved in such. Higher decisions or impactful decisions. And suddenly with refactoring, all those decisions are actually at your fingertips that you can actually change something and make it better. And, and, you know, it’s in the small, but it can have a lot of ripple effects and all of that. Right. So to think about that, I think can be very challenging and.

Michael Feathers:[00:40:07] Too, when people are talking about what good design is, it’s kind of like, you know, if you give anybody a blank piece of paper and tell them to design something, they can usually do something really cool. But the real skill in design is working with stuff that’s already there, right? Because the number of constraints that you have basically go into sort of like help you exercise your design skill in a way, because you have to go and sort of like work around them and work with them. At least to deeper design insight, working with things where you have, where your environment is a bit more constrained than than you might hope it to be.

Michaela:: [00:40:36] Yeah. So there were a couple of questions on Twitter as well that I want to be even a little bit. So I was thinking about best practices again. So people were thinking about how can we, you know, show best practices. I asked you that at the beginning as well about best practices. And we talked a little bit about transparency and in my recent discussions, I’m discussing a lot with engineers right now. We also talked about transparency and how cool it would actually be. Okay. In an organization or outside of an organization to see, you know, what are people doing and then also seeing the impact, right? So you can pick and choose. And there is also, this is also something that we are lacking a little bit different transparency of best practices. Well, even if practices, right, it doesn’t have to be the best practice, but the practice. How, how is that team doing? How is this team to doing and similar to what you said too, when I’m working with larger organization, we also see that all there’s this division and that division and the third division. And then they think that this division is actually doing the best. Right. And so they’re really proud of their Practices and the other are doing like really bad work. And suddenly you see that people are working and there are constraints. Right? So because one is like the driver division. Yeah. Which is a very different kind of a beach. And if you’re working on the website side of things right. Where you can update things much easier, but it would be really cool to see a little bit. How are people working and H how could you do that in an organization? Is there something that you learned. Where organizations surface that and show what are good practices that other teams should adopt.

Michael Feathers:[00:42:07] Yeah. Typically with organizations that worked with them, I had them kind of like moving too. Like this show and tell mode where like, you know, once every couple of weeks or something like that, people from different groups will present what they’ve done and kind of like just make that available for people to go and see, you know, where the other possibilities are, you know? And it’s, it really does. You know, a lot of it does come down to what you were saying earlier is that some practices might be better in certain types of development than others. But the thing is, you know, you get to raise the consciousness of those things and it’s. Creating forums for those particular things. And the cool thing with that, as you get developers real used to going and doing a little bit more, like say public speaking, even though it’s internally within the company to go and describe, you know, the various things that they happen to be working on and doing. Right. Yeah. I don’t know. I don’t know that there’s anything that’s really like, you know, it’s just doing that. Sorry.

Michaela:: [00:42:54] Yeah, communication, right? Brown bags, for example, that you

Michael Feathers:[00:42:57] Yeah, I think, you know, nothing. I would go and add to that too. Is that even though transparency like that as a good, I think it’s one of those things where it has to be discretionary rather than we’re completely transparent all the time. Right. Within an organization. I think one things that’s kind of cool is that when you have. Different groups of people within an organization working on different things, they can incubate something and basically not worry about somebody going in saying, well, maybe that’s not a good idea. It’s like, no, we’re going to try this for a while. And we’re going to go and see what works with that. Then basically go and give you results. Once we feel more comfortable with that. And then you get like the enhanced. You get enhanced psychological safety within that cloister in a way because you don’t, you know, everybody’s kind of got the buy-in and the relationship with each other. And that’s just a natural part of being human, right. To be able to come and sort of like, you know, grow things in a safe environment and then present them out into the world a little bit. But you know, a lot of this really comes down to leadership really within your organization. Can you basically go and sort of like, make it. You know okay. For things to be, not to be okay. Not be okay sometimes. Right. And just sort of like, make people feel safe to go and communicate back and forth, then, you know, do the things they need to do. So, yeah. Culture again, you know, I think I said.

Michaela:: [00:44:07] That’s true. Yeah. I, this really resonates a lot with me. So maybe the last question that I want to ask you, and it’s a little bit connected to the Twitter. Things is about testing. So I made a study, actually. I think it’s. I dunno how many years ago? A couple of years, eight years, 10 years, 10 years time flies. And I was looking at unit tests versus integration tests and system tests. And at that time, people were all over unit tests, like unit tests, you know, is, is the bullet that brings you joy and happiness. And I, I feel that this shifted a lot over the last year. So right now people are more into integration, testing, more into systems testing. What’s your thought about that? And especially in connection with legacy code, are we still because legacy costs, I think a lot of things were still unit tests, right? So we are connecting, having unit tests and having tests in general around the system to make changes. Has that shifted as well? What do you think about system tests?

Michael Feathers:[00:45:00] Yeah, I think, I think it’s shifted a lot with service orientation, right? When we’re doing like microservices and stuff along those lines, the there’s like a, you know, We talked about like code being alive, right? There’s this great talk from Alan Kay at oops, look basically in the 1990s where he basically goes and draws a parallel between code and biology. And he talks about, you know, his original conception of object orientation being kind of like cells communicating with each other through messages, by chemical messages. And it’s kind of funny because when you send messages from one cell to another via chemicals, it’s asynchronous and it made me kind of realize it’s kind of like, you know, Well, we wanted Ohio to be Israeli. What services are in a way it’s like you can send a synchronous messages notifications across these services and they can be really very well decoupled from each other. Right. So basically going and testing things at a service level is a very decent thing to be able to do. The unit testing thing was really very proud, met pragmatic. When it comes down to, if you’re making a change to a particular piece of code, you want to be able to go and get close to it. And if you can basically go and write tests, like at the class level around it, then you’re in a situation where you can go and get immediate feedback about what you’re happened to be doing. And so it’s like this way of going and sort of like building. You know, building like this assurance as you basically go and make changes that you really are doing the right thing. So unit, it seems like units in object orientation tend to align around classes or aggregates of classes. And so I tend to see those as being a unit in a way and that wrong. And it’s really all about going and making it possible to go and get that feedback and, and build, you know A knowledge-based through tests that basically can go and find out very quickly by running whether things are working or not. One of the things I’ve been kind of throwing around is as a frame recently as that essentially test determined where your unit in a way that if you can basically go and get an area of code. And it’s easy to go and basically test it. Then that’s a decent, decent definition of unit as you can ever get. And for you, a unit might be a service where it might be a class, but it’s the point at which the testing comes to difficult that you basically know that you’ve got a modularity boundary, that isn’t all that great. And it’s just, you know, like a way of going and looking at things in that realm. So yeah, I don’t, I don’t really, I think as long as people go and understand that tests and modularity kind of. Work together in a very interesting way. It doesn’t matter to me whether you call it unit tests or systems tests the test will give you feedback about your modularity and that’s a cool thing to know.

Michaela:: [00:47:26] Yeah. Yeah. Like the, like the frame so well, Michael I think we are at the end of this show, I’m really happy that I could pick your brains for so long. Is there something that you wanted to let my listeners know before we are ending? And I will definitely link a couple of things down there in the show notes, but is there something that you, you know, that you’ll want to end the show with?

Michael Feathers: [00:47:48] Yeah, I guess just basically going in saying that we’re all part of one, we are part of the system as humans working in software development, and we need to basically take the systems that we work on seriously. And, you know, I think that seriousness for us means kind of like looking at them as entities that have their own qualities and we can make them better. You know, the thing about this, that. I think it’s kind of fascinating is that if we are going from job to job and place to place, and these systems remain behind, you know, it’s good for us to go and actually exercise enough care that we leave the place, leave the system better for the next people, because you know, that’s just what empathy is all about.

Michaela:: [00:48:26] So you show your empathy through your code, right? In the quality that you leave for the people that have to deal with it.

Michael Feathers:[00:48:34] like a couple of years ago. It’s like code is the way you treat your coworkers. Right. And it’s kind of like, it’s true. You’re not really us. So

Michaela:: [00:48:41] Yeah. Yeah. I like that end note. Thank you so much. Um, was a very inspiring talk. Thank you so much for taking the time.

Michael Feathers:[00:48:48] Excellent. Thanks.

Michaela:: [00:48:49] Okay. Bye.https://grain.co/highlight/lUGaWr1iPs39D4HeOqszHXnglk9i9tIRzcy6wk52

 

Episode 36: From Bootcamp straight into a full-time dev role

In this episode, I talk to Natalie Davis. Natalie is a recent Bootcamp graduate that managed to get hired quickly after graduating. She is vividly sharing her knowledge on Twitter and started to make real waves in the dev community within just one and a half years in tech.

We talk about:

  • her experience at a developer Bootcamp, 
  • how she managed to quickly get hired after graduating,
  • how she keeps up with all the stuff she has to learn,
  • how she decides to adopt best practices,
  • and how to overcome rejections by staying positive and focusing on growth. 
Continue reading

Episode 35: How Programmers Think and Learn

In this episode, I talk to Felienne Hermans, who is an associate professor at the University of Leiden and researches how developers think and learn.

We talk about:

  • why it is so hard to read and understand code,
  • her book “The programmer’s brain”,
  • how we can learn easier to program,
  • techniques to understand complex code quicker,
  • how a shared vocabulary can help teams, not only during code reviews
  • and her process to write a book developers will love.
Continue reading

Episode 32: Serverless is your competitive advantage

In this episode, I talk to Nader Dabit. Nader is a web and mobile developer, who specializes in building cross-platform and cloud-enabled applications. Right now, he works at Amazon Web Services, where he develops features in the client team and improves developer experience. Before, he founded his own training company, specializing in React Native, and trained engineers from organizations such as Microsoft, Amazon, the US Army, and many more.

We talk about:

  • how he managed to build a following on almost every popular social platform,
  • how he got started with his own training company focusing on React Native
  • what serverless means, and why you should care about it,
  • how to build an MVP using a serverless-first mindset,
  • and how frontend developers can leverage serverless technologies to become a full-stack developer.
Continue reading

Episode 31: Combatting tech debt in war rooms

In this episode, I talk to Tomasz Łakomy, a senior frontend engineer at OLX Group. Tomasz is fascinated about teaching everything he knows and has over 170 video tutorials.  

We talk about:

  • how they develop, test, and reviews software at OLX group,  
  • what war rooms are and how they help to combat technical debt,
  • how he managed to create over 170 video tutorials about software engineering,
  • why he is AWS certified as a front-end engineer, and
  • how skydiving helped him to be a better software developer.
Continue reading