Deciding when to use a new piece of technology

Welcome to No Compromises. A peek into the mind of two old web devs who have seen some things. This is Joel.

And this is Aaron. I want to give you a little bit of a behind-the-scenes look today about how Joel and I have a conversation sometimes. I don't know if we finished this conversation, but we can kind of restart it and maybe we can get to the end of it on the podcast today. Well, not the end but to a good resolution place. So we have a project using Bootstrap, the CSS framework, and we're going to be doing a bunch of changes and we'll probably move to Tailwind. And Joel had brought up something like, "We're going to maybe do some stuff in Livewire. Is this the perfect time to use Flux?"

I did bring that up.

Yeah. And just for people who aren't familiar, why don't you give a little bit of insight. What the Flux even is?

Okay. Flux is a component library that I think technically does require Livewire, but it's not primarily a Livewire thing. But it was released at Laracon this year and it's from the creator of Livewire. So it's a combination of a nice polished UI library that drops right into a Laravel Livewire app and also a way of supporting the creator, right? There's free options but to me, there's kind of two benefits there. And the reason I brought it up is because if we're going to... Well, we already are using Livewire on the project, but if we're going to be expanding that use, I thought it might be an interesting opportunity to try it out.

Yeah. And that's perfect sense because I, if you haven't figured out from listening to podcasts or if you're new, am more of the, "Oh, let's see. Let's just wait." I bring it back, I'm a little bit more conservative when it comes to new technologies that I might have to support. I like new things if I don't have to support them but if it's something that I'm responsible for, I'm like, "Let it bake for a while." I just kind of wanted to talk a little bit about that. Like, why I immediately was like, "No. No, no, no, no. I don't want to do that." And I think that was probably a surprise for you. Why do you think it was surprising when I right away said no?

No, I didn't. I've been shot down by you so many times nothing ever surprises me. Well, okay, it's not bleeding edge pre-release, which some people were diving in at Laracon and trying to use it that way in production. But it is 1.0. Maybe it's 1.1 now, I don't know. But it's within a few months of its initial official stable release. So it's not super risky, but at the same time, you're right, it hasn't baked. There are things that are coming that it doesn't have yet. So if we happen to need one of those things, then it might put us in a position like, well, do we just try to work around it? Or do we build our own version of that thing and then change it later? I wasn't surprised and I even sympathized with your approach. As I recall, I didn't even try to push back and argue because it's like I get what you're saying.

I remember you slamming down your keyboard and saying, "No, Aaron. No," and it was just scary.

This is over. The podcast is over, everything is over.

I think you hit it on the head. For me, there was there's a couple different calculations involved. One, we're already changing enough technology that's in the project, I was a little reticent of adding a newer one. It has nothing to do with the newness of the technology per se, it was we're switching to a new set of features, some other stuff. We're changing a whole look and feel and we're changing the technology for the CSS framework. I get it when you say, "Oh, well, this will save us some time," pop these things in, or whatever. To me, on the flip side, I look at, well, I'm going to switch to something brand new. I really kind of need to know the details about that thing I've switched to in the context of how it applies to this project before I want to put something new into there as well. I'm already changing a bunch of stuff, I don't want to put something new in there as well. Because then there's even more risk and I now have things I have to change and things I have to add. Which I find a little bit more hard versus let's change to the first sort of thing, let's add things on, move a little bit more iterative.

It almost sounds like it's not about the newness of that technology then, it's that there's already a big project to change everything. Even if this thing was version 8.0 and had been out for five years, if you had never used it, you would still consider it new because it's new to you.

Well, this is just the first reason.

Okay. All right.

So it doesn't undo the other reason that you just kind of mentioned. So, yes...

So it's an added risk component that the project as a whole is relatively new.

Well, for me it's the first step of the assessment of the risk. So you're right, it doesn't matter if the technology is eight years old or eight months old. The first thing I considered was, am I adding in another thing? It's almost likes scope creep from the client, you know, if you think about it. Like, "Well, if you're in there already, why don't you just do this?" It's like, "Oh well," when they ask we don't want to do that, but when I want to do it, yeah. Well, I mean-

And I'll throw one piece of context in here that maybe is relevant. Which is, this particular project already has a sizable scope and it has a fixed deadline. Like, it's months out but there's a launch date we have committed to hit so there is some baked in time pressure. This isn't just an open-ended... Like, "Ah, take as much time as you need," kind of project.

Right. So that was the first sort of risk that I looked at. The second, like you said, was actually the newness of the technology. I just kind of want to cover that is definitely something that's under 1.0, if people are doing semantic versioning, I don't want to touch. I'll follow, I might play around with it but I'm not going to put it anywhere.

Is that why you never used Elm? Because to this date, they still don't have a 1.0 release.

Oh. Stay or run from that discussion. Moving to 1.0, great, but I still kind of want to see that, like you said, bake a little bit. So even when we do the PHP upgrades, I know that it's probably frustrating to Joel. Because Joel's like, "Hey, it's PHP." I remember 8 came up, "Let's upgrade everything to 8." I'm like, "Let's wait till 8.0.10." He's like, "Why?" or like something that. That's because I want to see those patches go through. So since this is a newer technology, there's probably still, like you said, there's some features coming up, there's some patches and more and more people are adopting it. Now, if I was maybe doing this as a completely fun project, I might be one of those first adopters and be able to add in bug reports and stuff. But since this is a client project, I don't know if they're entirely happy with me using a technology that I feel might be a little less mature yet. So I didn't decide to ask the client if they're okay with that risk, but for me, based off of stuff I know about the client, I said, "This might be a little bit of a risk that I would find very difficult to explain to them if my tool suddenly changed a bunch and we have to now do more work."

They're not paying us to have fun.

Right.

Yeah, I think it's the unknown. Let me just turn it around a little bit. So this project, I'm trying to think of a way to characterize it, it's not an overly complicated UI, right? It's a pretty typical line of business application with forms and dropdowns and text inputs and there's nothing cutting edge or unusual about what it looks like. So I say that to try to preface this question. Which is, if you were confident that this thing actually could save a significant amount of time or result in a better end product. Like, we needed to have some fancy thing that Flux provides that we've never built on our own. Could that tilt it to the other direction or is it still just too much of an unknown to give it a shot?

Yeah, that's a great point. If it was, "Well, we absolutely need this," or, "If we built it, we don't even know if it's going to work and it's going to take us longer." Well, that's another thing that goes into that risk calculation, you're absolutely right.

I can't think of a Flux component, but let's say there's some multi-select thing with icons in it and we've never built one of those and they have it out of the box, that might tilt us a little bit in that direction. Or, I'm throwing one other thing at you, what if we used Flux just for a particular thing? Like, maybe it is dropdowns. Like, we like something about, "Oh, they have keyboard navigation," or something that or search ahead or whatever. Would that be a limited way? Because they use Tailwind so it's not like we have two separate design systems in there. Or is that still a little too risky to you?

Again, it kind of depends on if I need that functionality. If it's a great dropdown in all these different functionalities, but the client has never remotely complained about using a select dropdown, I'm not going to use a new technology because, again, I just don't know enough about it.

Yeah, that's fair enough.

But I would say there's another calculation that goes... Well, there's a couple more, but I'm just going to keep this short. Another calculation is a little bit of a tip of the hat to the programmer, is I know it's really difficult to launch a new product, to iterate on it, all these different things. So if I'm going to use a new product for... I want to use it on something that's a little less important, just for the fact that I don't want to accidentally put any pressure on them if I have a problem. So if I'm working with a client, our million-dollar revenue client, and this open-source tool has an issue. Again, not that programmer's fault and I shouldn't give them any problems either, but it might leak out of me. And then there's more pressure on them and all those different things. So I'm looking at that as saying, "Well, it's still a 1.0, so let's give it some more time. I'll support it." I want to use it but for more of the enterprise-level clients that we might be taking on, not a good fit yet.

Yeah. And just to be clear, there is a free version of Flux; I was proposing the commercial version. So I would say it's even more potential pressure on the maintainer. It's like, "I paid you for this, and this doesn't work in Opera Mini. What's going on here?"

Right. So I should wrap it all up and say, this is an example of how we have our conversations, right? I think that this idea of having Flux is a really cool idea, I am excited to follow the project. I want to see as it continues to build out but, again, I just haven't spent enough time with it. So there's nothing negative about a specific project, it's more so I just wanted to demonstrate how we think through, how one version of adopting new technologies might apply.

I don't think we've talked about this before but I like to read packaging and I just chuckle to myself sometimes the things that packaging will say. For example, I got some Amazon box, and inside the box was a bag, and inside the bag was the thing I ordered. But the bag said, "Plastic bag is not a toy."

Clearly, they haven't had dogs or-

I'm thinking maybe it's more for kids. Like, "Don't put this over your head. We don't want you to suffocate and die."

Can kids read?

That's a good point. And if a kid is old enough to read, they should probably already know not to put that on their head. Right?

Yeah.

Okay. So that was one of them. It's just like, hmm, but you see it all over the place. The other one is you open up, I don't know, some vitamins or something, and there's that little silica gel thing in it to keep it dry. And it's like, "This is not food." Again, like, "Got you. I wasn't going to eat it." And again, probably maybe geared at the kid that's old enough to read, but not old enough to know don't eat this random thing.

No, you've never had beef jerky and you're just mowing it down and then you're just like, "There's still a packet. Oh, what should I do with this? This beef jerky is so good. I just want to keep chewing."

Sometimes.

Oh, luckily it says, "This is not food." Oh, that was real. See we have different experiences in life.

Well, the beef jerky one's interesting because usually it's covered in the same flavor as the beef jerky too, so there's that.

I know. It's chewy beef jerky then suddenly crunchy.

So the last thing. The first two things I mentioned as observations, kind of a general pattern in society. But the third thing that I observed, I was at a candy store and they had candy in the shape and texture of Legos. You could even snap them together. And I'm like, "This is really sending a mixed message." Because a kid's going to be like, "Well, obviously I can eat any Lego I come across in life."

Right.

I don't know what's going on in the world today, Aaron.

So confusing. Well, if you're not like me and you have no qualms about people messing with your project and experimenting.

Ah, we still can't help you. We're just too responsible. But you can still talk to us. Give us a call, head over to nocompromises.io if you'd like to work with us.

No Compromises, LLC