Sundi Myint: Welcome to Elixir Wizards, a podcast brought to you by Smartlogic, a custom web and mobile development shop based in Baltimore. My name is Sundi Myint, and I'll be your host. I'm joined by my co-host, Owen Bickford. Hey, Owen. Owen Bickford: Hey, Sundi. Sundi Myint: This season's theme is Elixir in a Polyglot Environment, where we talk about how Elixir works with other languages. Today, we were joined by special guest, [Kalina Estango 00:00:24] from Nav. Hey, how are you doing? Kalina Estango: Hey, doing great. Sundi Myint: Now would we say [00:00:30] Nav, or Nav, Inc.? Kalina Estango: Just Nav is fine. Sundi Myint: Okay, cool. So, so grateful to have you today. Where are you calling it from? Kalina Estango: From super hot Salt Lake City today, actually. Sundi Myint: So it's hot in Salt Lake City, because we were there like five seconds ago, and it was pretty cold. Kalina Estango: Yeah, it's been kind of in the sixties this whole week, but today I decided to... it's going to be 91 later today, so it's kind of random, but yeah, it's sunny and nice outside. Sundi Myint: [00:01:00] Wow. Owen Bickford: When we were there, it was like what? Low to mid seventies? Sundi Myint: Right, we had this whole discussion. The whole time leading up to EMPEX, Owen kept saying, "it's going to be beautiful weather." I got there a day earlier, and it was 40 degrees, and I was like, Owen! Owen Bickford: Hey, when I arrived it was like 65, 60 degrees. Sundi Myint: Yeah, yeah, yeah... Owen Bickford: It was good. Kalina Estango: It's been on the edge there. Sundi Myint: I had a number of people say, "are you okay? Do you need my sweater?" Kalina Estango: [00:01:30] Oh no. Yeah, you have to come prepared in May just because it's kind of heading towards summer, but it's still, you get snow randomly, so it could be either or so you always have to have the long sleeves out. Sundi Myint: Wow. On the day of EMPEX, it was beautiful. It was peak picnic weather is what I would describe. Were you at EMPEX and I just totally missed you? Kalina Estango: No, I had no idea it was happening. My friend reached out and was like, are you going to the conference? I was [00:02:00] like, there's a conference here? Sundi Myint: Oh, no. Kalina Estango: In my defense, I just became a new mom, so everything has slipped my mind other than the baby, so it's been very difficult. Sundi Myint: Well, congratulations. Owen Bickford: Yes, congratulations. Kalina Estango: Thank you. Sundi Myint: Ah, that is amazing. And yeah, totally excused. But I definitely, I understand the feeling of a little bit of FOMO when everyone comes to your town, you're like, oh, I missed them. Kalina Estango: I'm so sad. Sundi Myint: Well, hopefully there will be more opportunities in the future [00:02:30] for sure. Owen Bickford: Salt Lake was beautiful by the way. I was walking around the downtown was beautiful, having the mountains everywhere you look. Kalina Estango: Was that your first time here? Owen Bickford: Yes. Sundi, had you been there before? Sundi Myint: I had to think about it. No, I've never been to Utah. Wait, I'm thinking about it again. Why don't I remember where I've been? Yeah, I think it was my first time. Owen Bickford: Your best friend in Utah going to be like, wait a minute. Sundi Myint: No, he only moved there in the pandemic. So my friend, [00:03:00] yeah. I visited my friend who lives in Park City while I was visiting. And then... Yeah, no, I haven't been there. I will say I've never been there. Yeah. How do you like living in Salt Lake? Kalina Estango: I love it. I used to live in Southern Utah, that's where I was a process engineer and worked at a mine. Sundi Myint: We're going to talk about that one. Kalina Estango: And then we came here to visit my husband's in-laws, and I loved it here just because I [00:03:30] wasn't a software engineer yet, and it seemed kind of like 'tech hub' type place with a lot of fun startups, and just the hiking being so close, and then you have the lake, and it's like desert, but the forest as well, and then skiing and it's very outdoorsy is the place to be for people that like to be outside a lot. Not that I do a great job at doing that, but it's nice to have it. Owen Bickford: Hey, we all aspire to get outside once a week or more, right? Sundi Myint: Once a week, [00:04:00] oh my God, Owen. Yeah, no, I was like there was just something so amazing and humbling just to come outside and see a mountain that's a thousand times higher than anything that you could ever dream to touch. It was just, I felt very calm working next to water. When I had an office that was on the water, and I had a similar feeling, seeing mountains and I'm not from, or see, many mountains, but [00:04:30] this year I've seen a lot of mountains. Kalina Estango: Yeah, they're beautiful. It's nice to see them with the top with the snow, and it's really nice. When you're commuting, you have mountains on both sides and yeah, it just kind of sucks because the inversion gets bad. Sundi Myint: Inversion? Kalina Estango: Yeah. The kind of dirty air gets trapped between both mountain ranges and the air quality gets really terrible. I think one day last year, when the California fires were going on, all of that stuff comes over here. [00:05:00] I think we had the worst air quality in the world that day. Sundi Myint: Oh, wow. Air quality's not something I ever really think about until it's really bad, like bad enough for people to be talking about it. And they're like, "don't go outside today, the air is terrible to breathe." And I'm like, "are we living in a sci-fi movie?" Kalina Estango: I think we are here. Sundi Myint: Yeah. Okay. Got it. Noted. Inversion. Kalina Estango: Hopefully, this summer is better. There's less fires, I mean, I hope that we're all hoping for less fires, but yeah, that should [00:05:30] keep the air a little bit cleaner this summer. Because last summer it was like, couldn't do much outside because the air was so bad. Sundi Myint: Yeah. Yeah. I believe that. I did say we're going to jump all around, and since you've already mentioned it, I really want to know what a process engineer is. Kalina Estango: So, I actually went to school for chemical engineering, so I went to Virginia Tech and... Sundi Myint: Oh, so closer to my side of the planet. Kalina Estango: And the only thing I didn't want to do was work [00:06:00] in mining because my parents worked in mining and I was like, I don't want to live in a small town and work at a mine, and that's where I ended up because... Sundi Myint: In a small town and working in a mine? Kalina Estango: Yes. Sundi Myint: It's so funny how life works. Kalina Estango: But I also met my husband there, so it worked out. And it was a lot of fun. So I was a process engineer at a mining company, so I kind of just was over the process we used to make [get 00:06:26]. So we had a mine, we mined ore, and then we [00:06:30] extracted the copper from the ore into just copper plates, so from dirt to copper plates, we have two different plot processes. There's one called flotation, where you actually make the minerals float, believe it or not, and then you collect it into a concentrate, and then you ship that off. And then the other process is leeching, where you use acid to get the copper out into solution and then plate it in an electrowinning process, so that's what I worked on before I decided [00:07:00] to be a software engineer. Owen Bickford: Were you hands-on like hands in the bud, or in the mine? Or was this kind of overseeing, like playing Factorio and just making it all happen? Kalina Estango: Yeah, more like the second. Yeah. I actually just heard about Factorio, and I haven't played it yet. Owen Bickford: I've played not as a lot of time, it's been a few years actually since I've played, it was kind of fun, but for me, it felt a lot more like work. It just felt like it quickly turned into [00:07:30] another job because you're constantly problem solving and at the end of a long day, problem solving that's... Sundi Myint: I don't know. I think Wordle probably also takes a lot of brain power, Owen. Owen Bickford: Wordle, most days I'm 30 seconds. Maybe a couple minutes. Sundi Myint: Oh, man. That's so interesting. So what prompted the switch from process engineering to software engineering? Kalina Estango: Yeah. I was always [00:08:00] kind of between both, even when I went to school, I was about to go in computer science, but I was slightly intimidated by all the other people that had started programming since birth, basically, that they were in the program and I was like, oh no, I'm going to suck at it. But it always was back of mind, and then I was working at the mine, and I started taking some Ruby courses, and kind of did like a PHP website for our wedding, RSVP, [00:08:30] and had a lot of fun, and then I was like, I kind of want to do this all the time. And was looking at boot camps and stuff, but then I decided to just take a Ruby on Rails course on Coursera and completed it, and then I just sent code samples and started interviewing because if that didn't work, then I was going to do a bootcamp, but that ended up working for Nav, and then I've been here ever since, so... Sundi Myint: Oh, that's so good. We love a wedding website origin [00:09:00] story. I feel like that's not the first time that's ever happened. No, it was a dude who said he did MySpace. It was a few seasons ago. He made a Backstreet Boys website for his crush, and it worked? Kalina Estango: Wow. That's cool. Sundi Myint: Yeah, yeah, yeah, yeah. So a wedding website origin story, plus all the Coursera is obviously a great tool for you to use to teach. So did you pick up Elixir at Nav then? Is that how that kind of came to be? Kalina Estango: [00:09:30] Yeah, I started with Ruby, but then right about the time I started, there was someone that was very interested in Elixir, and it kind of seemed like the right fit for our marketplace application, so then it used to be a Ruby on Rails app, and then we wrote a Phoenix app, and that's how I learned Elixir, and I'm still actually maintaining that same application. I jumped around a lot at Nav between teams and stuff, but now I'm back in the marketplace [00:10:00] writing a little bit of Elixir. Sundi Myint: Yeah. Owen Bickford: Before we start getting into the stack of Nav, what is the business of Nav? What does Nav do? Kalina Estango: So Nav is basically a financial health platform for small businesses. We have personal reports, business reports available for them, for credit monitoring. And then we kind of use that data and self-provided data to match up [00:10:30] the user with their best financing option. We try to help out the customers by giving them the best option they qualify for, while also reducing the chance they're going to get into predatory lending and stuff like that, so the best you can qualify for is our goal, and we use data to make that happen. So yeah, helping small businesses, our mission is to reduce the [00:11:00] death rate of small businesses, so... Owen Bickford: Awesome. Sundi Myint: Cool. And then yeah, Owen, let us write there, so the stack is previously Ruby, but is now Elixir and Phoenix? Kalina Estango: We still have Ruby. It's hard to kill off the languages after you have the legacy applications written in them. So we actually have a lot of languages. We have JavaScript for and React kind of for the front end. We also need Node and Apollo for the middleware there. [00:11:30] And then back in we have Go, Python, Ruby, and Elixir. Sundi Myint: Woo. You got the whole suite. Kalina Estango: Yes. Owen Bickford: Sundi, is this the most polyglot stack that we've encountered on this polyglot season? Sundi Myint: Once maybe. We should have been keeping a count, a tally... Owen Bickford: A spreadsheet. Sundi Myint: ... a sticky note with the number of languages at once, because I mean, of course, we've talked to plenty of people who've worked in many languages over their career, but at the same time, [00:12:00] would you even categorize that as at the same time, are you writing all these languages at once, or are you flipping and flopping or do you... Is there a specialization thing that people are doing? Kalina Estango: Yeah, I think it depends. Currently, we do have a front-end team, so they'll do JavaScript and React and then we have a front-end platform team that does the Node and Apollo stuff, but I think they kind of jump back and forth. Then back in we... Python, we usually use it for more [00:12:30] the machine learning and data stuff, and then Elixir and Go and Ruby are kind of like what you would expect in a backing team. Sundi Myint: Yeah. Actually, I can't believe we hadn't thought of it, it took this far into the season, Owen, for me to think of this question. How do you keep yourselves up to date on all of these languages? Because that must be a massive endeavor. Kalina Estango: Yeah. I think we are slacking [00:13:00] Kalina Estango: A little bit, I don't think any of us that do Elixir Nav, brought up the conference. So I don't know if anyone's actually reading stuff about Elixir right now. I would say that Go is kind of our most... We have decided kind of as a company to continue with Go, rather than having Ruby and Elixir. At a time, it was Ruby and Elixir. But I think this last year we just decided to go with Go. Oh, sorry. I said, go [00:13:30] in Elixir. Sundi Myint: Go with Go. Kalina Estango: Yeah. So now just Go, just because it's hard. I was a manager actually last year and managing a team. I could see more of the problem. For me it was always easy... Not like easy, but it wasn't a problem for me to jump from Go to Elixir to Ruby. But when I was managing it, then I could see the problems that, not everybody can do that or wants to do that. Usually when someone joins the company, [00:14:00] they're told "you're going to do Go," and that's what they expect. And then if you switch it on them, "Oh, you also have to read Ruby and maybe a little bit of Elixir." They're like, "What?" So it's a little bit hard, and it's hard to jump between those languages and not having like an expert matter in all of those. So I think I got drilled from the original question. Sundi Myint: No, no, no. This is exactly what we want to talk about. Because even at SmartLogic, we are also polyglots in that we have a Elixir and Ruby and Flutter [00:14:30] and JavaScript, and it's all sort of mixed in there. And similarly, I actually love that aspect because I don't want to write one thing, kind of all the time, but that's me. I don't know. Owen, do you have a preference about the switching back and forth or the staying in one? Owen Bickford: I mean I would write Elixir all day if I could. I mean... but yeah, I'm comfortable writing JavaScript when I have to, so five [inaudible 00:14:56]. Sundi Myint: You said when you have to- Owen Bickford: Because I have to write more. Well, [00:15:00] I have to write JavaScript to do things sometimes, in a very vanilla way. So it's fine, but I can kind of hear exactly what you're describing. Say you're on a team and you've got two or three different backend languages. And if everything's broken out into microservices and you're context switching constantly, not only between the service itself and what the type of work you're doing, but also the language [00:15:30] and all of the packages or dependencies that go along with that, I can see that really being kind of... Adding a lot of friction to the development team. Are there other... so context switching sounds like a big reason to maybe, kind of distill things down into a more consistent stack. Were there other concerns about using multiple languages, at least on the back end? Kalina Estango: I think you [00:16:00] just kind of get more fluent when you're in one longer. I've been writing Elixir this past few months, but before that was doing Go and I feel like I was getting better at writing Go, and then you kind of lose that efficiency when you switch and you have to think about something differently. I think the other thing that we have, that I've seen is we used to have a GenServer and timer to update things. So the GenServer and supervisor thing is like [00:16:30] very Elixir. And usually when you're in another... Ruby or Go, you don't think about that stuff. So when you have that kind of special type of code in your application, and then someone comes from another stack and they're have no idea how that's happening, it's a little bit of a... They have to get used to it and learn about it. So it kind of races that curve there. Sundi Myint: Planning for ramp up time, I think, is definitely a difficult one. When you're talking about context, switching between languages, [00:17:00] how did you all come to the conclusion that Go was the one you wanted to move forward with? Kalina Estango: I'm actually not a hundred percent sure how we decided. I think a lot of the microservices that we started is splitting out, were written in Go. So at the time, it did seem like we had a lot more Go than Elixir. And I think we've almost seen a faster ramp up time in Go than in Elixir. I think [00:17:30] it's kind of just basic. I don't know. I prefer Elixir, personally. Sundi Myint: Folks, we didn't make her say that just because she's on Elixir Wizards. Kalina Estango: No, they did not force me. Full disclaimer. Owen Bickford: Are you seeing... I'm sorry, are you seeing more functional Go? Is Elixir kind of influencing the Go code that people are writing? Kalina Estango: I think I've seen it written more functionally, actually. [00:18:00] Even I forget when I'm writing in Go that it is not functional, and that you can mutate things, and that that might be a better choice just because if it's more like idiomatic. But personally, I kind of write a more function because it makes more sense, and I've seen others do the same, especially people coming from a more functional background. Owen Bickford: Just an idea, you should write a GenServer and a supervisor in Go, just to have a module in there that's called that at [00:18:30] least. Kalina Estango: Yeah. So people get familiar with it and then- Sundi Myint: You're confusing- Kalina Estango: But you already done it before. Sundi Myint: That's fun. I mean, in terms of resourcing and keeping up to date on Elixir conferences, ElixirConf is, at the time of recording in the future, in Aurora. So not too far from you in Salt Lake. Is Nav completely remote. Are you distributed across the country or the world? Kalina Estango: Yeah. With COVID, [00:19:00] we actually went fully distributed. There's quite a few of us that are in Utah and we do have an office in Utah, our headquarters isn't San Mateo, I think San Francisco somewhere in the east, in the west coast. But yeah, we do have the office here. So there's a few engineers that are still here, but mostly we've been hiring from Atlanta and everywhere, actually. We were more distributed than we've ever been and it's made it a little bit easier to hire. [00:19:30] Talent... It wasn't possible to find like a Go or Elixir engineer before, and now it's been a little bit easier. Sundi Myint: Although if I had to pick a place to find an Elixir engineer, it would be Salt Lake City. That's probably where I would find them. But yeah, SmartLogic also went fully remote, and in the pandemic, and we don't even have an office, but we do feel Baltimore based still. We're all... a lot of us are still in Baltimore, even though the office is no longer there. I recently [00:20:00] moved to Baltimore, which has been a lot of fun and it's been fun exploring, and I can't wait to meet people because there have been people I worked with for basically two years now, I've never met. Kalina Estango: It's fun to meet people that you've been working with and then you're never even them, and then you see them in person, you're like, "You're all different. You're taller than I imagined." Sundi Myint: We just talked about this at a company meeting last week, I think was it Owen, where we were like, everyone, this one person gives us 5'8 energy, but she's 5'3. And somebody else is actually 6'7 but we had no idea. [00:20:30] It's wild. Cannot wait for a company get-together. Have you had one since COVID started, or also you're a new mom, so you probably haven't traveled too much. But- Kalina Estango: I did go to a leadership thing we had last year, right before I went on leave and I got to see meet a lot of the people that I work with. It was a lot of fun. We actually had to make a video of, what was it? Beetlejuice. We had to replicate it. It was a team activity. And I had never [00:21:00] seen Beetlejuice before. Owen Bickford: What? Kalina Estango: And I got to meet some new teammates and we had a lot of fun. At first, I was like, "Ugh, why?" [inaudible 00:21:07] Had so much fun. Owen Bickford: I've got to hear what this Beetlejuice activity was. You were creating a home movie version of Beetlejuice or- Kalina Estango: Yes. Sundi Myint: No. Owen Bickford: That's awesome. Kalina Estango: You got to sign a movie. Some people got an easier movie, like Avengers or Frozen that people actually have seen and it's not old. [inaudible 00:21:28] pretty good. Owen Bickford: Have you seen Beetlejuice since [00:21:30] you made your home movie version? Kalina Estango: I did see it was available in one of the streaming services, but I still have not watched. Owen Bickford: It's a Michael Keaton classic. It's got... Man, I'm drawing a blank on names, but yeah, it's good. It's got some really memorable performances. Sundi Myint: Yeah. You could also like wait till Halloween. That's fine. It's socially acceptable. Kalina Estango: I think most of us hadn't seen it. So we just had to rely on one of our teammates' description of it. And then we kind of did a [00:22:00] coding twist on it. It was fun. Sundi Myint: Testing, testing, testing, and then all of the tests are written. There we go. That's how it works. Right? Kalina Estango: Yeah. We kind of played the TechDeck card in there, and that it was scary and yeah. It was fun. Owen Bickford: You got bugs just creeping up out of the cemetery of- Sundi Myint: Oh my God. No, we have to stop. We have to stop. I'm so squeamish. Okay. [00:22:30] So on a more fun note, I feel like the last time I was really aware of something you had done in the community was your ElixirConf 2020 talk, which I did attend virtually because that was the virtual one, but I had just started at SmartLogic, so my brain was all over the place, and I can't even remember too much of the conference itself, forget specific talks. So could you just give us a quick elevator pitch for what [00:23:00] that talk was? Maybe takeaways that you liked, maybe a good question that came from the audience. I know that was two years ago, this is a heavy ask. Kalina Estango: Yes, yes. When I read it, I was like, "Oh, what did I even say two years ago?" But the gist of it is, we had just... We had started using gRPC, maybe the year before or somewhere around that time. And I thought it was really interesting, how it worked for the polyglot type [00:23:30] of architecture. So what I did in my talk, is I kind of just introduced gRPC. We used to... and how Nav uses it, because we have GraphQL REST and gRPC at some point. And then we decided to just use gRPC for backend to backend communication, and then have GraphQL between backend and front end, and then just leave REST completely [00:24:00] out of the question. And we chose gRPC because it's fast and you could define the contracts. So with gRPC and protocol buffers, you can use them to define your types, what methods are available on the service. So then you have guarantees on what things will look like on the client and the server side. And the coolest thing is that with the protocol buffers, you can generate code [00:24:30] from them. We could generate an Elixir library, a go library, a Ruby library, a Python library, all from the same Proto definitions, and utilize those in the code and make it seamless, kind of in a way like you weren't dealing with different languages because you were using this generated code. So I go over that in the talk, and then kind of how we use it at Nav, because we have one repository where we keep all the protocol buffer definitions. And then I used [00:25:00] Pokemon because everybody knows Pokemon. Sundi Myint: I did appreciate that. I've also used Pokemon in a side project once. Kalina Estango: So easy. Owen Bickford: And notoriously, you have a Psyduck shirt that- Sundi Myint: Oh my God, it shrank Owen. It shrank, I can't fit into it anymore. If anyone from community.com was listening, Jeff, I'm so sorry. I shrank the Psyduck sweater. I'm legitimately [00:25:30] thinking about buying another one, but it came all away from Australia. Owen Bickford: That's great shirt. Sundi Myint: Oh yes, yes. We do like Pokemon in this house. Kalina Estango: Yes that's why I used it, cause it's like people love Pokemon and kind of use that as an example to find like a Pokemon struck, and then had like types of string and integer and all that and you can generate then the code in Elixir and Go. So we have the Repo with the definitions and then we have an Elixir Repo, a Go Repo, [00:26:00] Kalina Estango: Ruby REPL that gets updated from that and then you just import that into your project, and then you just have this module, all of a sudden that you, just have one function and then you just call it. So it basically feels like you're just like, you're not making, like a remote call anywhere. It feels like you're in the code, just calling a function in a module and getting data back. Owen Bickford: That's really cool. Kalina Estango: So it was just pretty exciting at the time and then, decided it was a good thing to talk about with Elixir and other [00:26:30] languages. So... Owen Bickford: How's the tooling around gRPC and protobuf and Elixir did you have to like build a new package or was there something already pre-made for them? Kalina Estango: No, we've been using the...the one that there is, has been sufficient. We have been running into issues with, with one of the dependencies gun. It's not like...I think it's used for the streaming part. It's not updated all the way, so there's gRPC [00:27:00] gun, but then another one of... We use LaunchDarkly for feature flags. That one has the old version of gun, and now it's like... So I feel like gRPC, it has like a warning on it that it's not exactly production ready, but we still use it in production. But yeah, I think the tooling has been it's been good. I mean, other than that dependency issue, which is not that small, the other one needs to be updated. It's been great. Owen Bickford: When [00:27:30] would you, since you've given a talk about gRPC, this is something I haven't... I've watched videos and kind of studied a little bit, I've not implemented a gRPC service yet, but... Is there a point where you've kind of outgrown REST and you need to reach out to gRPC? Or is there like a... How would you kind of decide when to use REST, when to use gRPC or GraphQL, or something else? Kalina Estango: Yeah, I think if you're making something lightweight, REST still makes sense. [00:28:00] But when you have a microservices architecture and you have all these services with different methods and different data, you have to kind of keep organized. That's why we're leaning into the protocol buffers. It's just, you can define your types and then we have like one house for all the types, you can do the same with GraphQL. We do use GraphQL for the front end and leverage Apollo tooling, because it's really good, but it's too [00:28:30] heavyweight for the backend. We felt you don't really need to query it. We just have the lightweight you're PC, you know, streaming. That's what was nice about it when I was...I usually don't get too deep into the technical things all the time...but that it has that lightweight aspect of it that you server and your client, know what the type and the interface is. In between the services, it gets sent into a small, [00:29:00] like lightweight binary and then it gets decoded and encoded on both sides because you have the definition of each... That's why protocol buffers have like the little number, the field numbers. I think that's the only thing that's sent over and then each side knows what the name of the field is and then can decode it, and do all their magic. But, I think GraphQL fuel is good for front-end querying. And then back-end, I will recommend gRPC just because it's easy to use, and you get a generation of [00:29:30] code if you have like a polyglot environment like we do. Owen Bickford: Right. So, on the back-end within nav, you've got, sounds like Elixir services, Go services, maybe some Ruby services, and they're all talking to each other through gRPC and they know how to talk to each other because of protobufs. Is that kind of like the... Kalina Estango: Yes. Owen Bickford: ...elevator pitch for gRPC and protobuf. Cool. And is protobuf like, so [00:30:00] I think it's the defacto standard for schemers, are there alternatives? Kalina Estango: I think you can use JSON as well. I think RPC just using JSON on XML, but I think the, for gRPC the protocol buffers are kind of like the standard there, the selling point, although I'm sure I could use JSON as well, that wouldn't be too bad. Owen Bickford: Right. And RPC [00:30:30] versus gRPC, I know "g" stands for, for Google. Right? So there's like a special, like customized version of RPC made by Google. Is that right? Kalina Estango: So honestly, I looked up the meaning of the "g" everywhere when I was doing the talk. In some places I said it was Google and then in other places I said...I can't even remember, but it said like something different so I could never actually conclude what it was and say it in my talk because I wasn't [00:31:00] sure. Owen Bickford: Grand RPC, maybe Speaker 1: [Crosstalk 00:31:02] it's like protocol buffers, like Google. Sundi Myint: I don't know. I kind of thought it might have been, I was going to say Go... Kalina Estango: Actually, it does have the similarity with Go that all the types, like they don't have a nil, you know how go doesn't have a nil. You need to use pointers to have nils, the default value for like a string is like "empty [00:31:30] string" and then for an integer it's zero, the same exact thing happens with protocol buffers. We actually had to make some like nullible types because we want to know the difference between a zero and null. You know, this is still not...zero is still a value, so you can run into that issue with the protobufs. I think the new version might have some sort of fix for that or not a fix, but... It's possible [00:32:00] to have no values. I think someone was looking into it here, but I'm not sure where that went. Sundi Myint: So I guess to reiterate this timeline, you gave that talk in 2020, what have you been up to since? So you've clearly like moved around, you've gone from Elixir there to Go, in some places you said you were doing managing, what has been your journey since then? Since that's the last time we kind of chatted about what you're up to? Kalina Estango: Yeah. [00:32:30] I think later that year a managing position opened up and I decided to try for it and ended up getting it, and then I was working in Elixir, and then I became a manager of a team with Ruby and Go, so for the last year I was doing that. I was getting a little bit familiar with Go and had like the Legacy application in Ruby that we have. So that was fun, if anyone finds that fun. But, and then I [00:33:00] was like managing people that, and then I needed to tell them, "Hey, you have to also look at Go", and then if you're a Ruby-ist, if you're a Go person, you also have to look at Ruby, and that was where I found that complication between having like multiple languages. I was managing that team, and then when I came back from maternity leave earlier this year, I went back to being a individual contributor, because I thought I needed the flexibility in schedule. I miss programming a lot [00:33:30] because as a manager, I thought I was going to be programming like 50% of the time. And it was more like five to 10 and it was really sad, but also at the time we started using eventing. We're using Amazon EventBridge and like SQS to do eventing now at NAV, and it's been pretty fun and exciting to add a new tool to our tool belt. Sundi Myint: That's a correct analogy. [00:34:00] That one works. I can totally empathize on the management versus coding. I've been managing for the last like eight months, and I think I only started writing some like heads down code this week. Kalina Estango: Really? Oh, that's so sad. Sundi Myint: But it's Elixir, it's Elixir guys, know everyone has been hearing me talk about clutter for the last like 5,000 years, but it has been Elixir, so that's been nice. And some things you remember how to do some things, you don't, some things [00:34:30] you do. Speaker 1: That's why we have Google. Sundi Myint: Yeah. Owen Bickford: Right. So I was kind of curious you said like, so I was going to ask... What was something surprising that maybe you picked up? Or something you discovered after becoming a manager that maybe...like a false assumption or something. So maybe you thought you had more time to code, that wasn't true. Were there other things that, as an individual contributor, you learned about being a manager during that time? Kalina Estango: Yeah. [00:35:00] I think I do feel more for my manager now. I try to help out more and kind of get rid of the blockers myself rather than like relying on my manager for that, because I know how busy you are and how you're looking at other things. I didn't realize how much you had to like look forward, as a manager, "what's the team going to do for like the next 12 months? [00:35:30] What are you going to do?" And balancing all these "asks" from account managers and product. Then you also have to balance your tech debt time, because I always was like, "when are we going to work on tech debt?" And "oh, it's my manager's fault, but we're not working on it." Really as a manager, you're being told like, if you can't fit it into like this like product thing that you can't like waste or not waste your time, but do it because it has to have like business value when you're in a startup, [00:36:00] you can't just clean up something because you want to, that was a big eye opener there and yeah, hiring is hard. Owen Bickford: I'm curious about something, same question. What, aside from being able to write less code as a manager, what are some other things you've kind of picked up from... Sundi Myint: In which, in which direction like... Owen Bickford: From switching from IC, individual contributor, to manager? Kalina Estango: [00:36:30] Yeah. It's, you get more empathy for like the holistic view of what all of your team members are working on when you see it. I think when you are head's down, it's so easy to just focus on your code, your code alone, maybe extending to your project, [Inaudible 00:36:55] in product team environment to your team. But, from what I've learned as [00:37:00] being a manager is just that there are other people at the company who are working on other things, you have to make it all work together. You know, there's some... Like this week we've had like a really crazy deadline on one project. So we've moved a few other things on others to make that a little more possible. I get that holistic view of the way that world works. I appreciate that because I can feel a little, I'm just somebody [00:37:30] who operates better when I have a better understanding of the greater picture. Definitely when you're just heads down in the code, you're writing, it's really hard to come up for air and make yourself look at everything like that. I think that's something that I've learned to do a little better, is keep an eye on things. Well now it's my job, but I don't think, I would've thought to do that without, without it. Owen Bickford: Cool. So Catalina, you're working at a startup, that's writing [00:38:00] microservices and at least at one point you were managing a team with... Was it a team with an assigned microservice or were people kind of tackling problems in whichever service needed help? Kalina Estango: Yeah. So last year we kind of had teams separated by domain and I was working on the customer account side and that involved having like the authorization app, like our accounts, like legacy app [00:38:30] and, well also the enterprise or enterprise applications in Go. So basically the two like legacy, big apps in Ruby and Go plus like small off-service and yeah, so we were divided kind of like by domain. I think now we have divided up the teams by like revenue stream trying something different and having...we were just back-end as well. We did have a PM, but no front-end. And [00:39:00] Kalina Estango: Now we're like a product team with front end, backend and PM, and then design, I think in design and marketing are separate, but. Sundi Myint: Cool. We did have a ginormous question for you. Something that Owen discovered about Nav that he must know more about. Oh, and I think you know. Owen Bickford: Oh yes. I was hoping we would get to this eventually. The profile page or not [00:39:30] the profile, the "about" like the team page, you're hugging or you're on a beach with a very large penguin and it looks like there's movie posters. What's going on there? Kalina Estango: I don't know. Honestly, when I joined Nav, they had that cool page and actually one of the things that made me want to join Nav with this was the cool page but they photoshopped you into something. [00:40:00] So when they asked me, I was super unprepared and I had no idea what I wanted. I was like, "I really like penguins". I had like a penguin shirt or something. And then that's what the girl that was doing this suggested and I was wearing a nautical type dress with the white and black stripes so it kind of made sense to do something from the ocean. Looking back, I wanted to do a Taylor Swift one with, I think there's a video where there's fire behind and she's walking, [00:40:30] that's what I should have done but I thought about it too late because that's what I do. Usually, I just come up with things way too late. Sundi Myint: Do you also order the first thing off the menu in the restaurant? I notice there's a correlation in that. Kalina Estango: I usually go to restaurants where I already know what I'm going to get. Sundi Myint: Ah, okay. Very prepared. I have an aunt who panic orders things like she'll be looking at the menu forever and she'll have an idea. She wants the shrimp and grits and then the waiter comes over and she goes, Caesar's salad. [00:41:00] Okay, so for people who are not looking at the Nav team page right now, everyone has got like a movie poster-ish "about" photo. Oh man, this is interesting. So I'm seeing sports movie, "we can do it" posters. Kalina Estango: It was very open-ended. Sundi Myint: This is very open-ended. Owen Bickford: And there's like a 007 poster. Sundi Myint: The Thomas, what is that [00:41:30] called? Why am I forgetting? Owen Bickford: Thomas the tank. Sundi Myint: Thomas the tank. Oh, okay, cool. I got that right. Owen Bickford: No, not the tank. The engine Sundi Myint: That can? The one that can? No. Is that something? Okay, we're failures at this. Owen Bickford: It's been 23 years since I watched it. Sundi Myint: I mean, this is just so fun though. I can see why this was, you looked at this and you were like, "ah, this looks like a fun place to work". I think the closest we have at Smart Logic is the fun emojis, we'll add emojis of people's faces on things. We've got multiple of one person [00:42:00] on, in dancing modes and we have a designer who just loves making emojis the second that you've kind of come up with something. I definitely also always show up to any slack party with my slew of rabbit emojis. I love my rabbit emojis. I need them. So yeah, this penguin was real cute. Owen Bickford: I got to say the Photoshop skills, whoever made all these it's like seamless. You could tell me these were screenshots of [00:42:30] an actual show or something. Kalina Estango: And these are from like 2017. I think we were supposed to get them updated because people have loved them so much that we were going to do another round with all the new people. Sundi Myint: Oh, I love that. Kalina Estango: Yeah. I never saw it. I think for that one I did pick the Taylor swift one I was like, "can you Photoshop me into Taylor swift somehow?" Sundi Myint: Yes. Amazing. Kalina Estango: So, no, but the penguin still lives. If I knew it was going to be out there for this long, I would've probably thought a little bit more about it. Sundi Myint: [00:43:00] But it lives on sort of like how, I don't know. I just leaned into potato life. I love potatoes. I love eating potatoes. I love being potato. I love everything about potatoes. And so I have this little light up. Hold on, I got it. Got this little light up potato. That sits behind me. Kalina Estango: Oh, that's so cute. It's still lighting up. Sundi Myint: Yeah. Yeah, yeah, yeah. Light up potato. So, [00:43:30] you never know what's going to stick. So if people know you as penguin lady forever, is that the worst thing? Kalina Estango: Yep. Sundi Myint: So good. Owen Bickford: Yes. Maybe it is. Sundi Myint: Okay. I am now trying to think so, I really hope that we do get to see you at another Elixir conference one day, although, it sounds like it might have to be a Go one, unless you can stick it out with us a little more. Kalina Estango: I have been doing a lot of [00:44:00] Elixir work this year, which makes me happy. Sundi Myint: Yes. That's awesome. Kalina Estango: We have no plans on taking out our marketplace out into Go or anything like that. So as long as we have a marketplace, we will have Elixir. Sundi Myint: Okay, awesome. We'll hold out hope for you and your happiness. Kalina Estango: Thanks. Sundi Myint: So, Catalina, are there any final plugs or asks you have from the audience? Anywhere that people can find you on social media or are you hiring right now? Any of that good stuff? Kalina Estango: Yes. So [00:44:30] we are hiring, I'm not very active on social media, but if you go to Nav careers, we do have a few positions open. We're currently, I think, focusing on engineering, managers and something else, but I conducted some backend interviews this week, so I'm sure we still have backend positions open and for our team we are doing Go and Elixir. So if you want to do both, that's great. Or if you're doing one [00:45:00] and want to learn about the other, then that's also something that'll work. Sundi Myint: Awesome. Thank you so much. Well, that's it for today's... Owen Bickford: Before we wrap up... Sundi Myint: Oh, yep. Owen Bickford: Oh, sorry. Sundi Myint: Go ahead, Owen. Owen Bickford: Did we just, cut this maybe, but did we already talk about the GraphQL scheme of validations? Kalina Estango: Oh no. Owen Bickford: Because that is a hot topic, a rant or something. So... Sundi Myint: Yeah, let's get that in there real fast. Owen, why don't you repeat the question? Owen Bickford: [00:45:30] Right. So I see here, we've got a note that we've talked about Proto Buff for validating schemas across GRPC and there looks like there's an interesting article about using GraphQL for schema validation. Can you tell us a little bit about them? Kalina Estango: Yeah. So some of our team members actually, I think, I don't know if it's got published is the right way, but we've been doing some pretty interesting stuff with eventing. We needed a way to [00:46:00] validate our event, payloads and kind of the same concept that we have for our proto repo, for the definitions of messages and methods on the services. We're kind of doing the same thing, but for events, but for this, we decided to do it in GraphQL. So we write the definitions in GraphQL and then our team created like generators in different languages. So this serves for polyglot environments [00:46:30] as well. You can generate Ruby, Python and Go right now. We haven't added Elixir because our Elixir app is not listening to any events right now. But it's pretty cool, you define your event at GraphQL and then it generates code and then you import that repo into your project and you can do a validation of the event to make sure all the fields are there before you publish it and on the receiving end, you can also validate [00:47:00] that the field, the event that you're receiving has all the fields necessary. It's been pretty interesting to work on that. I've never worked with eventing before, so it's new to us and we're learning a lot, but having that, using GraphQL to validate all. We're just using the GraphQL language, schema language not the whole shebang, but... Owen Bickford: When you say eventing, are we talking about the event driven [00:47:30] architecture or is this like a name of a service? Kalina Estango: Yeah. So event driven architecture. We're using Amazon EventBridge and SQS to handle kind of the eventing in the routing there. So just like account created and then whoever's interested in that can sign up for the receiving those events and then do application logic there. We thought it was kind of necessary now to have something like that and [00:48:00] it's been working out. Yeah, the team worked pretty hard making a library. So if you're interested, there's like a NavInc, Nav Schema Architecture project on GitHub you can check out. Owen Bickford: Awesome. I'll put a link to this blog post. This is from the past month. Yeah. Just from a few weeks ago. We'll have a link to this and the show notes. Kalina Estango: [00:48:30] I think so. Awesome. Sundi Myint: Well, awesome. So thank you again. It's been so great chatting with you today. That's it for today's episode of Elixir Wizards. Thanks again to our guest, Catalina Estango, for joining us. I'm Sundi Myint and my co-host is Owen Bickford. Elixir Wizards is produced by Hangar Studios and is brought to you by Smart Logic. Here at Smart Logic, we build custom web and mobile software. We work in Elixir, Rails, React, Flutter and more. Need a piece of custom software built? Hit us up. Don't forget to like, subscribe and leave a review. Your reviews help us reach new listeners. You can find us on [00:49:00] Twitter at Smart Logic or join the Elixir Wizards discord, where the link is on the podcast page and see you next week for more on Elixir in a polyglot environment.