Speaker 1: Welcome to React Roundup, the podcast where we keep you
Speaker 1: updated on all things React related. This show is brought
Speaker 1: to you by Void and top End Devs. Unvoid provides
Speaker 1: high quality design and software development services on a client
Speaker 1: friendly business model. Unlike all other software agencies, Unvoid allows
Speaker 1: clients to only pay after the work is delivered and approved.
Speaker 1: Visit unvoid dot com to learn more and reach out.
Speaker 1: If you know a company that needs more professionals to
Speaker 1: help with design and software development, that's u n void
Speaker 1: dot com and top end Davs helps you stay up
Speaker 1: to date with cutting edge technologies like JavaScript, Ruby, Elixir,
Speaker 1: and AI. Visit topandevs dot com to join their AIDV
Speaker 1: boot camp, weekly community meetups and access expert tutorials. I'm
Speaker 1: Lucas Paganini, founder of Onvoid and host of this podcast.
Speaker 1: Thank you for tuning in. Let's jump into the episode.
Speaker 2: Hello everybody, and welcome to another episode of React Round That.
Speaker 2: My name is TJ Van Tol and with me on
Speaker 2: a panel today is Paige.
Speaker 3: Meeting guts Hey everyone, and our.
Speaker 2: Special guest today is mirslav nick Love which hopefully I
Speaker 2: pronounced that correctly, but mirsta. Welcome to React round that.
Speaker 2: Why don't you tell everybody who you are, what you do,
Speaker 2: why you're famous, that sort of stuff.
Speaker 4: Thank you, hi, everybody. I don't think i'm famous, to
Speaker 4: be honest, I work as a UI developer mostly front
Speaker 4: ends so one dot com it's Danish company that is
Speaker 4: currently expelling, and what I do is basically react and
Speaker 4: in my free time, I try to maintain my block
Speaker 4: so turning my experience in some useful articles. That's like
Speaker 4: something like a hobby. And yeah, I'm a family guy.
Speaker 4: My wife, Panta, kids a boy, so that basically takes
Speaker 4: a hour all my free time, so I don't really
Speaker 4: have much time to spend on side activities.
Speaker 2: That's so fun. We were talking before. I'm very jealous Denmark.
Speaker 2: Copenhagen is a super beautiful area, so I'm very jealous
Speaker 2: of that. And your blog will drop it in the
Speaker 2: show notes as well. I like the design on it
Speaker 2: as well, and I know like reading through some of them.
Speaker 2: I know you wanted to talk a bit about testing
Speaker 2: and writing just human what you call human friendly REAC
Speaker 2: component tests. Do you want to outline sort of that
Speaker 2: whole concept and what you mean by that to sort
Speaker 2: of kick us off here?
Speaker 4: It's it's basically it's all about library called Unexpected Jays
Speaker 4: and it's I know it's not very popular, but what
Speaker 4: it does on what it adds on top of everything
Speaker 4: else we have seen is actually out of playing English
Speaker 4: when you when you write your tests. And I'm using
Speaker 4: that library basically for the past five years, and I
Speaker 4: just decided to write an article which is just a
Speaker 4: short introduction to what is possible with the library. And
Speaker 4: so I decided to write the article for cisys Tricks
Speaker 4: so that it's basically rich a little bit wider audience.
Speaker 4: And it was very surprising that I think right now,
Speaker 4: if you write React component tests or just React tests testing,
Speaker 4: that appears on the first page. But I believe this
Speaker 4: is because of the strong domain of cesys Tricks. So yeah,
Speaker 4: it's also brought some discussion because it seems like people
Speaker 4: prefer different style of testing and it's a little bit opinionated,
Speaker 4: but yeah, there are some there is some positive feedback
Speaker 4: as well.
Speaker 3: So can you expand a little bit about about what
Speaker 3: unexpected jas is because that's actually a framework that I've
Speaker 3: never heard of before. I'm interested does it work like
Speaker 3: with React testing library or is it Cyprus or is
Speaker 3: it both unit and and can you tell us a
Speaker 3: little bit more about it?
Speaker 4: Yeah, first just to say that I'm not a maintainer
Speaker 4: of the library. I'm using it, but as far as
Speaker 4: I know, it should be able because it works with
Speaker 4: plug ins. It should be able to use some of
Speaker 4: the plug ins with reg Testing library, so you can
Speaker 4: use REAP testing library and some assertions custom assertions on
Speaker 4: top so you can write your plain English tests and
Speaker 4: behind that it's React Testing library, so it should be possible,
Speaker 4: though I haven't tried. Yeah, and I also kept for
Speaker 4: a light version of the article on my block, just
Speaker 4: it's a little bit lighter without the introduction because currently
Speaker 4: it's a little bit controversial on how we tests, and
Speaker 4: I know the community is going strongly after reacticting library.
Speaker 4: So people are sometimes speaky when you present something unusual
Speaker 4: for you.
Speaker 3: Absolutely new things are not to be trusted.
Speaker 2: Developments don't have opinions and what you're talking about.
Speaker 3: So how did you first come across unexpected? You said
Speaker 3: you've been using it for a number of years. Now,
Speaker 3: did it somebody else introduce it to you or was
Speaker 3: it just something you stumbled upon and you really liked.
Speaker 3: How how it operated. Uh.
Speaker 4: To be honest, I didn't have choice because when I
Speaker 4: joined one dot com, they have already they already used
Speaker 4: have already using this library. And some of the people
Speaker 4: who are maintaining the library also work for the company
Speaker 4: at some point though they are no longer part, but
Speaker 4: we're still we're still using it internally.
Speaker 3: So that's a good reason.
Speaker 2: Is any did you get a little bit into I know,
Speaker 2: one thing you cover in your article is trying the
Speaker 2: right tests that are sort of a least say, human
Speaker 2: friendly or easily readable. Could you give like some examples
Speaker 2: of what you mean by that, And I know, like
Speaker 2: syntax is kind of hard on an audio podcast, but
Speaker 2: just like high level like how you approach structuring tests
Speaker 2: in a human friendlier, in a more readable way.
Speaker 4: So basically what we use is the usual arrange acts
Speaker 4: assert kind of thing, which is I mean you first
Speaker 4: arrange or test, then you act on it, and then
Speaker 4: you assert. So this is basically shared approach for I
Speaker 4: think for every testing library. But what Unexpected does a
Speaker 4: little bit different is the expect. Assertion is just a
Speaker 4: function expect and inside you pass as many arguments as
Speaker 4: you want, and these arguments are just plain strings, so
Speaker 4: you don't really have a JP relax syntax like dot
Speaker 4: dot equals or dot to be executed. You just play
Speaker 4: in English and usually the editor is colors that in
Speaker 4: the same color, so it's very easy to read. It's
Speaker 4: easy for the eye. Maybe not so straightforward to write
Speaker 4: it because your editor won't help you to auto complete
Speaker 4: different function goals, but it's it's it's really it's really
Speaker 4: easy for the eye. And we we are working in
Speaker 4: a in a team and it's basically usually not just
Speaker 4: one person who is working with these file testing files,
Speaker 4: So you want something expressive there.
Speaker 3: That's very cool. I'm looking at the article right now.
Speaker 3: I guess one question I have is how how long
Speaker 3: do you think it takes a new developer to get
Speaker 3: up to speed with using something like unexpected. Like most
Speaker 3: of us, if we've been working with React for a while,
Speaker 3: we're probably pretty familiar with just may be familiar with Enzyme,
Speaker 3: maybe familiar with React testing library. But how easy or
Speaker 3: difficult do you think it is to get up to
Speaker 3: speed with unexpected and then start to potentially integrate it
Speaker 3: into any existing testing frameworks that you might have.
Speaker 4: I think it's pretty easy, especially if you use examples
Speaker 4: as a real examples as a reference. Maybe documentation is
Speaker 4: not going to be the fastest path learning path, but
Speaker 4: if you use examples, it's really easy. And usually you
Speaker 4: have just you have several common assertions that you would
Speaker 4: like to use, and you don't really use so many
Speaker 4: different features, at least for the React components. You want
Speaker 4: to test if something has rendered, so usually you test
Speaker 4: you equate for an element and you test for its
Speaker 4: string that it contains. And also the other thing is
Speaker 4: testing function that is also straightforward. So apart from these
Speaker 4: two things presence of certain elements and executing functions, you're
Speaker 4: most likely rarely going to use other other like assercial
Speaker 4: So I would say, but it's it's very straightforward, at
Speaker 4: least for at least for me.
Speaker 3: It us as I remember, that's always encouraging. It's I
Speaker 3: remember when I was first learning React Testing Library. It
Speaker 3: was kind of a massive mind shift for me to
Speaker 3: go from the way that just an enzyme had been
Speaker 3: doing it to trying to reorient myself towards the way
Speaker 3: React Testing Library focuses on what's in the dom and
Speaker 3: interacting with that at a unit test level. So anything
Speaker 3: that is easier to get up and started with is
Speaker 3: definitely always good.
Speaker 2: Yeah, that's still something is like I'm not as in
Speaker 2: the weeds with unit testing libraries anymore, So sometimes a
Speaker 2: lot of this type of stuff goes over my head
Speaker 2: and I'm actually curious, like this, this is a question,
Speaker 2: I guess for both of you, is where is the
Speaker 2: React world at right now for in terms of like
Speaker 2: testing markup structure in your like individual unit tests, Because
Speaker 2: I know Miroslov in some of your articles you went
Speaker 2: in and you are like basically asserting against the exact
Speaker 2: dom structure. Is there some advantages of that or like
Speaker 2: versus like I'm if I want to test my component
Speaker 2: render something specifically, like how specific should your as search
Speaker 2: and be for I'm looking for this exact markup structure
Speaker 2: or do you just like try to pick out an
Speaker 2: individual string like I just care that it spit this
Speaker 2: out correctly. Like I'm kind of curious where the React
Speaker 2: world is at with that sort of setup right now.
Speaker 3: So for my understanding and what my team is doing
Speaker 3: today is that we're a lot more focused on this
Speaker 3: basically the same interactions that you would try and do
Speaker 3: in an end to end test in the unit tests.
Speaker 3: So it's a lot less about did this REDUCS dispatch
Speaker 3: happen or did this particular function mock get called? And
Speaker 3: it's a lot more of can I see this element
Speaker 3: in the dom? Can I click this button? Or is
Speaker 3: this button disabled? Did this list appear? And can I
Speaker 3: interact with it? Which, like I said, it's a little
Speaker 3: bit hard to get used to when you're coming from
Speaker 3: the old way of testing did this function fire? But
Speaker 3: I like it a lot more because it seems to
Speaker 3: me to be a lot more true to life and
Speaker 3: how as how a user would interact with our application.
Speaker 3: They don't care if the REDUCS dispatch fired or not.
Speaker 3: They just care that their list loaded and you know,
Speaker 3: they can click the button and go through their shopping cart.
Speaker 3: So that's kind of what we've been leaning towards. So
Speaker 3: not necessarily, you know, is there this particular H one
Speaker 3: tag with this ID? But can I see you know,
Speaker 3: my page title? Or can I see this drawer that
Speaker 3: is supposed to be there at the bottom and can
Speaker 3: I open it? Or can I click buttons? And you know,
Speaker 3: do different stuff like that within the component. So that's
Speaker 3: kind of the approach that we're taking. But i'd love
Speaker 3: to hear how other people are doing it as well.
Speaker 4: I would say that we're using the same approach at least.
Speaker 4: Comparing the dom structure is something that we use really,
Speaker 4: and I know that the communities pretty much with React
Speaker 4: Testing Library going away from that kind of assertions, So
Speaker 4: we use it really and we mostly unit tests and
Speaker 4: we have strong QATEAM, so the visual part is really
Speaker 4: for them, so it's not something that we really deal with.
Speaker 4: It's we focus on the unit tests and edge cases especially,
Speaker 4: so that's ourly.
Speaker 2: That makes a lot of sense. And because I remember,
Speaker 2: like you said, Page, the way it used to be
Speaker 2: is you would you would do things like ensure your
Speaker 2: marks we're here, or that your testing structure, but it
Speaker 2: felt like a lot of times you were just writing
Speaker 2: those tests to write those tests so that you get
Speaker 2: like better code coverage and such. I like that just
Speaker 2: because it feels like, I don't know, the test just
Speaker 2: makes more sense. And I feel like there's a lot
Speaker 2: better not just QA, but like visual testing tools now
Speaker 2: as well to catch some of these things, Like I
Speaker 2: think a lot of these like snapshotting tools are becoming
Speaker 2: a lot more popular as well to catch like if
Speaker 2: you did screw up some like markup thing in your
Speaker 2: buttons suddenly doesn't look like a button anymore. That there's
Speaker 2: some other test is going to catch that, so you
Speaker 2: don't need to like test your HTML parsing.
Speaker 3: Yeah, and actually that's something that I'd be interested to
Speaker 3: hear more about. Miroslav, you said that you've got a
Speaker 3: QA team who helps you with the visual portion of it.
Speaker 3: Are they using that you're awarever they using any particular
Speaker 3: tools because visual regression testing is something that my team
Speaker 3: has struggled with in the as, but we haven't really
Speaker 3: found a great tool that helps keep that up to date.
Speaker 4: Yeah, they have their own tools, but a lot of
Speaker 4: the testing is I think kind of ends to end testing,
Speaker 4: for example, adding a product to the shopping cart, and
Speaker 4: we follow the whole process up until the end. This
Speaker 4: is what is important for them. I know some people
Speaker 4: suggest to write user stories as the part of the storybook,
Speaker 4: and then you use something like cypress on top to
Speaker 4: visually compare your user stories your components. I haven't tried that.
Speaker 4: I think it is for our case, it's going to
Speaker 4: be too much of an effort if you really do
Speaker 4: your homework with the unit tests. At least our experience
Speaker 4: show that we don't really face production box and we
Speaker 4: are not really trying to have a full test coverage,
Speaker 4: just trying to test the fragile paths of our applications.
Speaker 4: So but actually we have a we have a product
Speaker 4: which was launched in somewhere October. It's heavily used, and
Speaker 4: we didn't have a single front and back for that
Speaker 4: product up until this moment. It was I think the
Speaker 4: team did a good job of testing and iterations. So
Speaker 4: it's I know, it's rare, something that's remarkable from time
Speaker 4: to time.
Speaker 2: Did you get an award?
Speaker 4: Like, Oh, I'm not sure if people notice that achievements.
Speaker 3: I don't notice until it stops working.
Speaker 4: That's the problem.
Speaker 2: Yeah, that's the thing about testing is like there's you
Speaker 2: don't get a if you do your job right, Like
Speaker 2: no one ever knows that you have all these processes
Speaker 2: behind it. It's sort of the good and bad thing
Speaker 2: about it. So I'm curious your stuff. What what made
Speaker 2: you want to write about this and start a blog
Speaker 2: and share some of this stuff.
Speaker 4: Yeah, I didn't do it before because I suppose that
Speaker 4: our time is such a resource that we basically it's
Speaker 4: not we cannot regain it, it's lost basically, so writing
Speaker 4: an article, I mean, junior developers, writing an articles is
Speaker 4: something that's at least I try to avoid because I
Speaker 4: don't think I had something to tell, something variable to
Speaker 4: take tell people, and reading my ten minutes article will
Speaker 4: be a loss of time. So I decided to start
Speaker 4: writing maybe after thirteen years of working with work applications,
Speaker 4: just because I feel a little bit more comfortable and
Speaker 4: maybe I have something important to say and people want
Speaker 4: to just spend there ten minutes and forget after that.
Speaker 4: It's a tricky area at least I feel uncomfortable. So yeah,
Speaker 4: that's the main reason I suppose. And I have a
Speaker 4: lot of ideas material during these years, so there's plenty
Speaker 4: of topics.
Speaker 3: I think after thirteen years you could be considered kind
Speaker 3: of an expert in development. That's that's a fair amount
Speaker 3: of time to see a lot of stuff.
Speaker 4: Yeah, yeah, explor six this was there back back then,
Speaker 4: I remember.
Speaker 2: But yeah, thirteen years is about where I'm at as well.
Speaker 2: I started. My first apps were i E six only
Speaker 2: corporate apps, so this is these are fun times.
Speaker 3: Yeah, oh I see here, Oh go ahead, please go ahead.
Speaker 4: I just wanted to say that writing an auto about
Speaker 4: to explore six is probably I don't know, what's not
Speaker 4: going to be very famous.
Speaker 2: I don't know. It's about time for like the nostalgia
Speaker 2: of that to kick in, because now now you can
Speaker 2: tell them it's like war stories right like back in
Speaker 2: the day.
Speaker 4: Yes, it's true. I mean today people are starting to
Speaker 4: react directly. I mean they don't even learn JavaScript. For them,
Speaker 4: JavaScript is now it's something like react and five six
Speaker 4: years ago, which was maybe je.
Speaker 2: Query so query Angular I think like and we're talking
Speaker 2: about testing too. The thing that amazes me nowadays is
Speaker 2: for the most part, when you write your code, you
Speaker 2: don't have to worry too much about your code just
Speaker 2: straight up not working and other browsers, which like sometimes
Speaker 2: sometimes you do catch little things like it's it's the
Speaker 2: sort of thing where you still do kind of need
Speaker 2: to test your code and other browsers, but for the
Speaker 2: most part you kind of don't anymore, Like especially on
Speaker 2: desktop browsers, Like chances are the code you write is
Speaker 2: going to work. And that's still like quite the mind
Speaker 2: shift from how it used to be. Where it used
Speaker 2: to be you wrote your code and like you opened
Speaker 2: your you just prayed before you opened all the other
Speaker 2: five or six browsers you needed things to work in.
Speaker 4: True, I to be honest, I don't think I go
Speaker 4: out of Chrome and I don't really test on other browsers. Yeah,
Speaker 4: and you're right because even qare they don't they don't
Speaker 4: find they don't find spucks often another browsers, So it's
Speaker 4: things things are working.
Speaker 3: So one question that I had is when I visit
Speaker 3: your website, the first thing I see is that you
Speaker 3: were previously a CEO and a CTO. So how did
Speaker 3: you go from being in charge of whole companies and
Speaker 3: whole divisions to back to a developer. Did you want
Speaker 3: to be less of a manager and more of a team,
Speaker 3: like an individual contributor or how did how did that happen?
Speaker 4: Yeah, it's uh, I think it happened naturally. Again, it's
Speaker 4: it's a small company where I was basically maybe I
Speaker 4: was a CEO. Actually I was doing everything because the
Speaker 4: owner were in a basic in Sweden and I was
Speaker 4: back in Bulgaria at that time, so I was managing
Speaker 4: the whole business plus development for the company. But it
Speaker 4: was relatively small one, so it's it's easy to manage
Speaker 4: and to have many responsibilities. Even accounting and things like that.
Speaker 4: But at that point I also started freelancing, So I
Speaker 4: was freelancing a little bit, then moved away from that company,
Speaker 4: and then I met my wife here in Copenhagen. It
Speaker 4: was related to one of our freelance projects. And Copenhagen
Speaker 4: is I mean, it's a really expensive city compared to Europe,
Speaker 4: it's probably the most expensive one, and you really need
Speaker 4: a full time job to survive here. So this is
Speaker 4: how I ended up in the company's web developer. Wow.
Speaker 3: So basically running a company wasn't enough for he had
Speaker 3: a dove freelance work on the side too. That's dedication.
Speaker 4: Yes, at some point it became too much, but yeah,
Speaker 4: you can do it for some time before you burn out.
Speaker 3: Yeah.
Speaker 2: So looking at the blog, is your blog built with Gatsby?
Speaker 2: What what did you use to create this?
Speaker 4: Yeah, it's exactly gets and I was I was inspired
Speaker 4: by Don abramovs bloke. It uses the starter team, so
Speaker 4: it's really just the start theme Starter team with some
Speaker 4: some tweaks. So I just wanted something simple up and
Speaker 4: running fast, and after that maybe I will figure out
Speaker 4: a better designed for it, but for now it's just
Speaker 4: it just works good.
Speaker 2: Yeah.
Speaker 3: I like the just the clean look of it and
Speaker 3: the fact that you have dark mode.
Speaker 4: Yeah, it's it's a default thing now, right everybody.
Speaker 2: And I also see you have a newsletter as well.
Speaker 4: Yeah, it's I'm trying to keep with. It's once a
Speaker 4: month and I'm trying to send I'm usually sending my
Speaker 4: new article, which at least I have time for one
Speaker 4: article per month. I can't really write more often. It's
Speaker 4: difficult with family and one article per month and some
Speaker 4: interesting thoughts and links maybe I have found, but at
Speaker 4: least I'm trying to write about the topics that you
Speaker 4: It was difficult to find a quick solution by just googling,
Speaker 4: So if I can't really find a solution, I would
Speaker 4: write about it. And I remember it was an article
Speaker 4: about something like a editorial on how to create a
Speaker 4: sticky table header but would react but by using just
Speaker 4: a normal table, not a deep based fleck or flax
Speaker 4: books based layouts. And it was surprising to me that
Speaker 4: actually there are not so many examples that you can find,
Speaker 4: and this article is without any is you always now,
Speaker 4: it's it's pretty high when you try to look for
Speaker 4: something like that. Who will.
Speaker 3: Oh, well, I just noticed because actually I clicked on
Speaker 3: that article in particular, I noticed that you have unique reads,
Speaker 3: and I was wondering how you did that, because that's
Speaker 3: a really cool little feature to have.
Speaker 2: Well, I don't think I know what unique reads are.
Speaker 4: Yeah, it's it's not Google Analytics, because it's so not
Speaker 4: straightforward to implement that thing in your blog.
Speaker 2: And I just I just saw it. Okay, you mean
Speaker 2: like I see it now, So yeah, this is in
Speaker 2: case anybody else here listening to this totally didn't understand
Speaker 2: it either. He has on each blog post the number
Speaker 2: of unique people that have viewed an individual blog post,
Speaker 2: and that is definitely interesting. I don't think I've ever
Speaker 2: seen anybody just like sometimes you see views, but I
Speaker 2: don't think I've ever seen anybody list unique readers.
Speaker 4: Yeah, it was read, but then I found many blocks
Speaker 4: which are just counting the visitors, so they have, for example,
Speaker 4: they display sixty thousand views. But that doesn't really make
Speaker 4: sense because I can reload my brother two hundred times
Speaker 4: and then it's not really useful. And I'm using a
Speaker 4: third party service that is just a counter, and whenever
Speaker 4: your component renders, I just put in use effect a
Speaker 4: call to this service, so it will count, but in
Speaker 4: the same time return back the number of unique roods.
Speaker 4: So this is the way how it's done.
Speaker 2: It's very simples, like.
Speaker 3: It might be worth a blog post.
Speaker 4: Yeah, it's one of these topics that are not very
Speaker 4: well covered. If you try to search how to add
Speaker 4: a counter and gets the block. It's all about Google analytics,
Speaker 4: and it's so difficult.
Speaker 2: It's funny though, how little things like that people can
Speaker 2: find useful. One of the most popular things I've ever
Speaker 2: written is I wrote like my blog is a little
Speaker 2: bit older, so it's written with Jekyl, and I came
Speaker 2: up with some way like it's like a one liner
Speaker 2: piece of code to have a jeckal like point to
Speaker 2: an external blog post. So if you wanted to list
Speaker 2: blog posts but include things that you wrote on like
Speaker 2: other places, and that thing gets like, I don't know what,
Speaker 2: but it's like a two paragraph blog post and it
Speaker 2: gets like it hit a sweet spot in Google. So
Speaker 2: it's funny how sometimes these things that you think are
Speaker 2: really little can be actually super valuable to people.
Speaker 4: Yeah, it's true. With today's situation, you can really easily
Speaker 4: create a serverless kind of service. And because it's so easy,
Speaker 4: and people don't really need to have a local database
Speaker 4: or to own the database. Yeah, they usually do something
Speaker 4: like Firebase and try to easily put together some third
Speaker 4: party services and vola. It works, but it's it's not really,
Speaker 4: I mean, so much effort for for such a simple job.
Speaker 4: It's at least I try to think about the simplest
Speaker 4: possible solution out there.
Speaker 2: I like it. I feel like that. It's funny because
Speaker 2: personal blogs or the one place where over engineering something
Speaker 2: is like not only okay, but sometimes almost encourage, right,
Speaker 2: because it's like a place that you can experiment and
Speaker 2: have some fun with.
Speaker 4: Yeah, it's it's especially when you are just starting, you
Speaker 4: can do a lot of experiments. I'm doing that a
Speaker 4: lot because I don't really have so many readers. It's
Speaker 4: it's it's yeah, it's now it's the time to do
Speaker 4: crazy things.
Speaker 2: When you get a lot of readers, then they came
Speaker 2: for the crazy things, and then you get.
Speaker 4: To yeah they can even see a four or four yeah.
Speaker 2: The yeah, go ahead page, We keep doing this, please continue.
Speaker 2: The other thing I'm wondering about, speaking of, like little
Speaker 2: implementation details, what are you using to implement the newsletter
Speaker 2: it's a.
Speaker 4: Mail Chimp for now. They I think they give one thousands,
Speaker 4: I think subscribers for free. So it's yeah, it's pretty
Speaker 4: say forward choice for me, but I may change it
Speaker 4: in the future.
Speaker 2: Do they give you the little like you have this
Speaker 2: little section in your blog post that encourages people to join.
Speaker 2: Is that something they provided or did you code up
Speaker 2: the design for that yourself?
Speaker 4: Do you mean the pop up the little.
Speaker 2: Thing says join a foreign end newsletter like little thing
Speaker 2: that entices people to subscribe to the newsletter.
Speaker 4: The form on the bottom, Yeah, the form on the
Speaker 4: bottom is just the custom made it's not really mail Chimp.
Speaker 4: I just post to their service, so it registered the
Speaker 4: email address and then I just so just play a
Speaker 4: conformed message. But it's not it's not Melchin.
Speaker 2: You've got a little bit of design talent, because that
Speaker 2: thing looks really nice. It's very I know you said
Speaker 2: you're using like the default theme and such, but I
Speaker 2: can tell you've tweaked this quite a bit. It looks
Speaker 2: really nice. I'm jealous and I might steal this.
Speaker 4: Yeah, it's it's an evolution.
Speaker 3: Are you hosting a newsletter on your on your website?
Speaker 2: TJ No, No, newsletter, but we do stuff for like
Speaker 2: kind to react and progress sometimes and definitely take some
Speaker 2: inspiration from this.
Speaker 3: Yeah, I implemented one on my own personal website, which
Speaker 3: I launched about a month ago. When we're recording this anyway,
Speaker 3: But I and I looked at all the different email
Speaker 3: providers like mail Chimp and mail gun, and I'm yeah,
Speaker 3: convert kit is a big one. I ended up going
Speaker 3: with one called Substack, though, and the thinking was that
Speaker 3: substack doesn't charge you based on the amount of readers
Speaker 3: you have. It actually charges you if you start to
Speaker 3: monetize your newsletter. Because my blog is exactly what yours is.
Speaker 3: It's just a personal one. I write tech articles, I
Speaker 3: post them, and if people want to get notified when
Speaker 3: I do, great, But I don't really see it ever
Speaker 3: becoming some sort of a monetized thing. And I even
Speaker 3: though I'm very early in my own website or my
Speaker 3: redo of my website, I guess the idea of crossing
Speaker 3: those subscriber thresholds and then having to pay thirty bucks
Speaker 3: a month, fifty bucks a month more than that just
Speaker 3: to send a newsletter probably once a month, just makes
Speaker 3: me really unhappy to even contemplate So that's why I
Speaker 3: decided to go with substack, because it seems like it
Speaker 3: doesn't matter how big your subscriber base gets, they will
Speaker 3: not charge you.
Speaker 4: So it's a little.
Speaker 3: Bit weird because it takes you off of my site
Speaker 3: when you subscribe. But my thought is I can write
Speaker 3: short blogs on substack that link you back to the
Speaker 3: blogs that I've written on my site. So it seems
Speaker 3: like a decent solution for the meantime. And then I
Speaker 3: guess I ever want to change it and start paying,
Speaker 3: or if I decide that I will not get a
Speaker 3: subscriber base that warrants that, maybe I'll go with something
Speaker 3: more sophisticated that keeps me, keeps users on site, like
Speaker 3: Mailchimp or or something in the future.
Speaker 4: YEA also heard about substack. I actually have seen Kent
Speaker 4: Beeck for example. He's using you as well, so and
Speaker 4: he's someone that will I think be immunities around him.
Speaker 4: So but he's posting in there. Oh well, that's.
Speaker 3: That's encouraging then to know that people who have big
Speaker 3: followings are using it to their advantage too.
Speaker 4: Yeah.
Speaker 2: Yeah, and all the cool kids have newsletters. What am
Speaker 2: I even doing with myself?
Speaker 3: It's apparently it's just like all the cool kids are
Speaker 3: starting tech podcasts. It's like there's more podcasts than there
Speaker 3: is time in the day to listen to them.
Speaker 4: Yeah, that's true.
Speaker 2: Is there things that we haven't covered, I know, anything
Speaker 2: about testing components that we didn't get to or ask you.
Speaker 4: Oh, I think we touched the basics and if we
Speaker 4: have to wrap up, it's just it's very controversial topic,
Speaker 4: and I think some sometimes people are too dogmatic about
Speaker 4: what we should use in terms of flabbraries. I think, Jane,
Speaker 4: it's all about it's all about what you really can
Speaker 4: do in your certain situation with your team, with your
Speaker 4: organizational structure, because something may work but others won't work
Speaker 4: in different organizations.
Speaker 2: Do you mean it's controversial in the sense that, like
Speaker 2: some people give the impression that like you have to
Speaker 2: use the popular thing or else you're doing it wrong
Speaker 2: sort of thing.
Speaker 3: Yeah.
Speaker 4: I mean, for example, if you do all of d
Speaker 4: comparisons in your tests and you are publicly doing that
Speaker 4: in a form of blog posts or maybe tweeting about it,
Speaker 4: you will get a lot of people commenting that this
Speaker 4: is definitely in the past and you should not do that.
Speaker 4: I see I have even heard that, okay, testing if
Speaker 4: a function is called by clicking something in your UI
Speaker 4: is also not a good idea. So it's some people
Speaker 4: could be really dogmatic about these things, but it's really
Speaker 4: what works for you in this particular situation, because sometimes
Speaker 4: don't comparison maybe required, and sometimes you want to test
Speaker 4: for a function call, especially if it's somewhere between conditional logic,
Speaker 4: So you should really think about, yeah, what works for you.
Speaker 2: Yeah, I feel like that's that's good advice for I
Speaker 2: mean React, testing for Reactor, just software development in general.
Speaker 2: Like it's it's good to have sort of best practices,
Speaker 2: but at the same time, like, don't yell at people
Speaker 2: on Twitter for for things that they're doing that you
Speaker 2: don't totally have the context for either.
Speaker 4: Yeah, that's why I don't have Twitter. Also, it takes
Speaker 4: too much of my time and I don't really have
Speaker 4: time to get into converse station since yeah, right and
Speaker 4: tweet about relevant.
Speaker 2: Cool Paige, did you have anything else?
Speaker 3: No, this has been a really interesting conversation though. So
Speaker 3: since you're not on Twitter, if people want to find you,
Speaker 3: where can they find you online?
Speaker 4: If you just go to my blog, you will find
Speaker 4: a few links probably the best ways. I just email
Speaker 4: and I have also linked and GitHub, so this is
Speaker 4: the way.
Speaker 2: Well cool, So why don't we move on to the picks? Then, Paige,
Speaker 2: you want to kick us off?
Speaker 3: Sure? So my pick this week is going to be
Speaker 3: a show that has been out for a while, but
Speaker 3: my husband and I have been recently rewatching it with
Speaker 3: one of our friends who hasn't seen it before, and
Speaker 3: is the Jack Reacher series on Amazon Prime. And I
Speaker 3: believe that it's Tom Clancy's Jack Reacher. It's based on
Speaker 3: the book Looks and it is just rewatching it after
Speaker 3: having seen it, you know, a year or two ago.
Speaker 3: It's still really well done. It just sucks you in
Speaker 3: and we can't stop watching it. So I would definitely
Speaker 3: recommend that one if you're looking for something else to
Speaker 3: binge as we slowly start to come out of the
Speaker 3: COVID Hayes of the past year plus, so I think
Speaker 3: that that is going. Actually I'm sorry that that is
Speaker 3: the movie with Tom Cruise. What I'm thinking of is
Speaker 3: Jack Ryan, another Tom Clancy novel. Please don't write into
Speaker 3: the show notes about that that I got it wrong
Speaker 3: the first time. But Jack Ryan is the series. There's
Speaker 3: two seasons. It's a great watch. I would definitely encourage
Speaker 3: it if you're, like, if you're into the spy, espionage,
Speaker 3: THEIA type of shows.
Speaker 2: Okay, I definitely remember seeing the the ads for this now,
Speaker 2: so I'll have to check it out.
Speaker 3: That's a good one. Cool.
Speaker 2: My pick for this week, I got a I've been
Speaker 2: getting my bike out a little bit more. It's been
Speaker 2: nicer here in Michigan, and I got a little thing
Speaker 2: that's just a quick and easy speedometer for it, which
Speaker 2: I kind of like. It's kind of fun to like
Speaker 2: challenge yourself to see how fast you can go without
Speaker 2: dying on Michigan roads. But it's a diet. A little
Speaker 2: bit of research and found one I liked, so I
Speaker 2: will drop that in the show notes, and I'll just
Speaker 2: pick biking in general if you're not a person that
Speaker 2: likes biking fun times, Mireslav, how about your picks?
Speaker 4: I think I have two. The one is I recently
Speaker 4: found out that Eric Crossmans and the person behind the
Speaker 4: Rep Final Rep Final Form, he also starts publishing his
Speaker 4: blog posts, and so right now he has a bloke
Speaker 4: and he's one of the people who I actually learned
Speaker 4: a lot and I think he has what to say,
Speaker 4: and it's it's good to if you if you really
Speaker 4: want to read something from the people behind React, because
Speaker 4: he's he's programming and React for quite some time, so
Speaker 4: you can you can visit his block based link. And
Speaker 4: then the other one is just an article I read
Speaker 4: recently from kempt dot's newsletter. But the article itself, I
Speaker 4: think it's not it's older one, it's not new. But
Speaker 4: basically he's talking about that in many situations, you don't
Speaker 4: really need a global state management solution for your application,
Speaker 4: for your React applications, and that is also the case
Speaker 4: with many of applicanials I have done. If you really
Speaker 4: care for you think about if you can do it
Speaker 4: just with React and maybe a little bit of context,
Speaker 4: then yeah, we don't really need three ducks. But the
Speaker 4: article could be controversial. I will just put that.
Speaker 3: Yeah, we've had many discussions in past episodes about that
Speaker 3: very controversial subject which you just mentioned. But Mark Erickson,
Speaker 3: who was a guest on the podcast a little while back,
Speaker 3: did a great job of kind of explaining the difference
Speaker 3: between REDUCS, which holds the global state versus context, which
Speaker 3: just passes state around the application. Isn't actually in charge
Speaker 3: of holding it, which made it a lot more clear
Speaker 3: to me kind of when you might need one versus
Speaker 3: the other. But I completely agree with you. We as
Speaker 3: engineers have way over engineered a lot of applications to
Speaker 3: use reducts when we probably didn't really need it in
Speaker 3: the first place.
Speaker 4: Yeah, it's true. Sometimes we inherit habits from previous applications
Speaker 4: and we tend to copy in to pace the same approach.
Speaker 2: Yeah well cool, Well, thanks Mary stuff for joining us.
Speaker 2: This was a lot of fun chatting with you. Thank
Speaker 2: you too, all right, Well, thanks everybody again and see
Speaker 2: you next week. Yeah, see you next time.