Railsifying Refine, Torchlight, and the Myth of the MVP

July 23, 2021

Refine is getting more and more Rails-y, Aaron talks about Torchlight and the Hammerstone thesis, and we debate the merits of the "launch immediately" trope.

Transcript

Aaron
00:00:00 – 00:00:04
Okay. We're live. How was, your meeting with Colleen just now?
Sean
00:00:05 – 00:00:13
Good. So so what we talked about was what we talked a little bit about, she's gonna need to roll off. Right? Because she took this full time job.
Aaron
00:00:14 – 00:00:14
Mhmm.
Sean
00:00:15 – 00:00:38
And she took this full time job at my company actually. So now I'm now we are work colleagues. So, you know, she's not gonna she's gonna eventually wanna roll off, but she feels very invested in seeing how it turns out this client. That. Because she wants to see, you know, how it's gonna go with their datasets and everything.
Aaron
00:00:38 – 00:00:39
Mhmm.
Sean
00:00:39 – 00:00:51
We did. We talked about how, like yeah. Basically, it's it's feature complete from our perspective. Like, we ported the Laravel version over and added a few new things that we knew that they were gonna want. Mhmm.
Sean
00:00:51 – 00:01:06
But sorry. I was drinking a carbonated beverage right before this. That's a mistake. So anyway yeah. So we're feature complete, like, as far as what we said we would do.
Sean
00:01:06 – 00:01:35
But, you know, obviously, we're around for, like, helping them with integrations, and I really wanna see how it works in real life and then see how that goes. So that means that she wants to roll off, so we need to roll somebody else on. So I'm talking with somebody to try and get them on board. So we talked about, like, what what we could give them. So give them to do that way if they have enough kind of meaty thing to work on to, like, wrap their heads around it.
Sean
00:01:35 – 00:01:37
And that's the challenge because there's not much left.
Aaron
00:01:37 – 00:01:38
Right. So I
Sean
00:01:38 – 00:01:52
think we're gonna have them, whoever we get work on doing the docs, and then she only had a few tests left that she didn't that she didn't do. It's kind of boring work, but it would help them get their head around it. And then
Aaron
00:01:52 – 00:01:53
for sure,
Sean
00:01:53 – 00:02:04
set us up for when this client wants something else, then we'll be able to do it. And then also when we launch this, we'll have somebody, you know, backing us up on the rail side with that with that knowledge.
Aaron
00:02:05 – 00:02:29
She had mentioned to me that she had a big, like, railsification of it in mind that she kinda wanted. And I I told her you should, like, you should be the architect on that and have this new person, like, be the implementer so that she can still kind of, you know, see her vision come to fruition. Was that talked about at all, or is that further down
Sean
00:02:29 – 00:02:41
the road? But that's a fantastic idea. I think what's going on with that is that she just I'm putting words in her mouth now, but I suspect I could talk with her later. Like, I suspect that she just really wants to do it. Yeah.
Sean
00:02:41 – 00:02:43
So because you guys That's what
Aaron
00:02:43 – 00:02:43
she told me. Yeah.
Sean
00:02:43 – 00:02:51
I had offered some other stuff to do today because I was like, I got I got a few things on my plate left, which she could do. There's no reason not.
Aaron
00:02:52 – 00:02:52
Mhmm.
Sean
00:02:53 – 00:03:06
But she was like, I don't know if I'm the right person for that slash I don't want to. I wanna do this other thing that I was hoping to spend today on. Yeah. Yeah. That's really cool.
Aaron
00:03:06 – 00:03:19
We talked a little bit, I guess, last week, just over Slack. And she was like, is it weird that I'm sad, like, to be leaving this project with you? And I was like, no. It's great. I'm so like, I'm happy that you enjoy it.
Aaron
00:03:19 – 00:03:57
And we talked a little bit about how, like, the, like, the problem really gets in your head. Like the complexity of what we're doing, it really like burrows its way into your mind and you end up thinking about it a ton and it becomes like, it becomes like a lot of fun. And so I think she wants to see it through to, see it through to like proper railsification with the whatever is the DTL and stuff. And she has a vision now that she has, like, the whole framework in her head and also knows rails really well, she has, like, the vision for what it should be.
Sean
00:03:57 – 00:04:01
Yep. Yep. Exactly. Alright. Hang on.
Sean
00:04:01 – 00:04:03
Get a DM from a client.
Aaron
00:04:04 – 00:04:05
I also just got a DM.
Sean
00:04:05 – 00:04:06
What is this?
Aaron
00:04:07 – 00:04:14
No worries. So I'll cut I'll cut all that out. We were talking about Colleen and having the whole thing in her mind and wanting to rail supply it.
Sean
00:04:15 – 00:05:01
Yes. Which I think is great because I think that, first of all, our client is going to want things to feel more Railsy. I think they'll mostly be interacting I don't know. We I think that will include changes to the API that developers using this will, you know, interact with, I suspect. But I think that she also is talking about some changes to the kinda like the algorithm, and doing it in more of like a Ruby ish type way, which actually it's funny because it's like the same conversation that we've had with except on the JavaScript side where it's like the the flat blueprint thing is like it, like, it's very hard for me to wrap my head around that on the client side.
Sean
00:05:01 – 00:05:30
It's also, like, not the way we think about things in Ruby and stuff. So, like, she's got, like, a different data structure in mind. It will still not it will not change the blueprint format whatsoever from however we for an interoperability. But then in terms of, like, when somebody goes to maintain the code and read it, it will be more what they would expect to see from the Ruby side, and then it'll be the same. I I do stuff like that on the JavaScript side too.
Sean
00:05:30 – 00:05:47
So it's kinda just like the same thing, which is which is fine. I think, like, we got that portable data format. So it makes sense that you could take that and, like, just write a little thing to change it into what makes sense to you through your algorithms, and then you just run it through that. Yeah. So I think that's I think that's fine.
Aaron
00:05:48 – 00:06:03
Well, I would love to have her, like, railsify it. I don't know I don't know where that fits in, you know, our timeline or her timeline or if the client even cares about that. But at some point, to have her kinda oversee that and maybe have the new person
Sean
00:06:04 – 00:06:05
She's doing it today.
Aaron
00:06:05 – 00:06:09
Execute it. Oh, great. Fantastic.
Sean
00:06:09 – 00:06:28
And we're we're gonna we're gonna build a client because we talked about it. We're like Great. Is this build a client or not? And I think we I think it is because, like, they want to they wanted to they just want a port from, like, Laravel to to Ruby on Rails. And we've done that, but in such a direct way that it's not Yeah.
Sean
00:06:28 – 00:06:49
It's it's they're not gonna love it. And I just know, like, as much as invested as they are into the Rails ecosystem and doing things the Rails way and Yep. Having this nice Ruby centric world of view, then Mhmm. I think this is probably more like what they would expect. So we gotta make sure we do what they expect.
Sean
00:06:50 – 00:06:57
They haven't really interacted with the API much yet. It's gonna happen soon, probably in a few weeks. Yeah.
Aaron
00:06:57 – 00:07:09
Hopefully, you you would hope. I mean, it seems like a big feature they need to get on. And I would, I don't know. I would even argue they don't really want a port from Laravel. They just got lucky that we had already done it.
Aaron
00:07:09 – 00:07:18
What they want is like like you said, the rails way to do this. So Yeah. We're getting there via a port, but that's they don't care about that.
Sean
00:07:18 – 00:07:23
Yeah. So I think, like, the most straightforward thing was to do a port. We did that. Functionality is there. Boom.
Sean
00:07:23 – 00:07:36
But now now Colleen's got it all in her head so she can make it, you know, it's gonna be much more maintainable because it like, we do own the IP, but I mean, they also have a license to this code and could do whatever they want with it. They could Of course.
Aaron
00:07:36 – 00:07:36
Yeah.
Sean
00:07:36 – 00:08:04
Run with it They could just work it out. Developers maintain it and do their own thing. And in that case, I'm sure they would much prefer it if we, you know, cleaned it up and did something that was easier for them to understand. So I think I think that it makes sense for us to to build them for that especially since I think I think it's reasonable that she gets it done today or at least close or at least an improvement or at least we'll know if it's possible. So so that's cool.
Aaron
00:08:04 – 00:08:36
I don't think we planned this necessarily upfront, but I feel like this is the ideal way to do it. It. Like, do a one to one port so that she and I are speaking the same language the whole time, and all the tests, you know, the Laravel test look like the rails test. We get everything working, and then she takes another step, and she's got all the tests as coverage, and she can change now she knows everything. She can change the style of everything instead of trying to, like, take those 2 steps at once and leave me in the dust while she has no idea what's going on.
Aaron
00:08:36 – 00:08:38
Like Yep. This is perfect.
Sean
00:08:39 – 00:08:50
Yeah. I think so too. And then Cool. Yeah. So so, yeah, I'm gonna so that means I I felt like it made sense that she just do that because she was really you know, I don't know.
Sean
00:08:50 – 00:09:04
I could tell it's one of those, like, okay. I finally have my head around this. I got excited about how I oh, now I see how I could actually, like, do this in a way that, you know, makes sense, and I really wanna do it. I know that feeling.
Aaron
00:09:04 – 00:09:05
Yep. That's great.
Sean
00:09:05 – 00:09:06
So I'm like, alright.
Aaron
00:09:06 – 00:09:07
Follow that energy, man.
Sean
00:09:07 – 00:09:23
Just do it. So that's cool. And then so I'm working on I don't have much left, but it's more than I would ideally like to have left. The problem is, like, the implementation that I did, like we've discussed, they wanted Hotwire. I did this Hotwire thing.
Sean
00:09:23 – 00:09:52
I figured out a kind of a clean way to do it even though it's a bit of a stretch because it doesn't map very cleanly to this, like, form builder that we have essentially. It's a little bit of a stretch and like a front end framework would have been a better fit, but I figured it out and I got sort of this clean approach that works. The clean approach though uses a lot of forms. So, like, each criterion in our query is its own form, which makes sense. It's not that's that makes sense.
Sean
00:09:52 – 00:10:22
Like, when you look at it, like, each one looks kinda like a form. Then there's, like, one other one for the delete button, and then there's one, and that's and that's it, basically. So then as you type stuff, you, you know, make changes to the query builder. It submits this form via JavaScript, and then it just re renders the whole thing, and then turbo frames does its thing and only replaces the thing that changed because it's within that frame. So that's a really nice thing.
Sean
00:10:22 – 00:10:47
And so it basically means I have just like a little bit of JavaScript to connect, like, updates to the blueprint, right, to hidden fields SmithForm, done. So it's pretty simple. Problem is they've wanted to put it in 2 places so far in the app. They've wanted it integrated into 2 places, and both places were nested within a form. And so you can't have forms nested within another form, which okay.
Sean
00:10:47 – 00:11:23
I I mean, I guess I should have thought of that, but also, I don't know. Like, it does make sense with the way they want to use the query builder that it would be nested within a form and the way they think about things on the rail side. So the workaround has been well, in one case, I just rewrote their page to, like, pull my thing outside of the form, and it meant that the the the, form button was switched. The order was switched. So instead of being the first button, it was the the filter the filter builder button was the second designer there was like, why are you doing that?
Sean
00:11:24 – 00:11:24
Why is my end?
Aaron
00:11:24 – 00:11:26
You don't wanna know. Yeah. And I
Sean
00:11:26 – 00:11:36
was like, just trust me. I had to do it. And then the other workaround was in Andrew's case. We're just popping it into a modal in bullet train. So that gets around that problem.
Sean
00:11:37 – 00:12:04
And they could do that in other places. They could pop it into a modal. But I think what I gotta do is I gotta take a look at like doing it a different way without forms, which is kind of only one other way to do it. And that is I've got the, like, right to the source attributes of the, like, frame that's being updated. Which is weird, but that is the only kind of way to get around it, I think.
Sean
00:12:05 – 00:12:06
Or I maybe use patches.
Aaron
00:12:09 – 00:12:09
Interesting.
Sean
00:12:09 – 00:12:19
I could look into using in there the patch thing. Maybe. But over overall, I still have to, like, make a change. I have to, like, sub patches won't work. Right?
Sean
00:12:19 – 00:12:45
Because, like, they have to do the and the way how it works is, like, if somebody has to do something, like, you can't it doesn't work with, an AJAX request. You have to submit a form or write to a source. Like, that's how the page updates. Because it's assuming you're taking it works beautifully when you're taking, like, a crud app designed with Rails that's, like, form based, and then you add this on top of it for the interaction. Works great.
Sean
00:12:46 – 00:12:46
But
Aaron
00:12:47 – 00:12:48
But for everything else.
Sean
00:12:48 – 00:12:56
For everything else. Yeah. So like, it's pretty cool, because I could submit a form and it could send some patches and update different parts of the page. That's great. I still have to submit a form.
Sean
00:12:56 – 00:13:11
There's gotta be a form. And that's my problem. I can't use that. So then I'm gonna write to a source, and then I'm not sure that patches would apply the way I would expect if I'm writing to a source inside of another. Turboframe, I'll have to check it out.
Sean
00:13:11 – 00:13:18
But either way, at that point, I'm writing to a source. I might as well just update the little frame pieces that I need to. So anyway, overall
Aaron
00:13:19 – 00:13:21
Basically doing it manually. Yeah.
Sean
00:13:21 – 00:13:32
It it's not a great fit. The technology is not a great fit for the query builder. I'm just, like, making it work. But yeah. So I gotta do that.
Sean
00:13:32 – 00:14:00
I still gotta add the inline errors because Colleen added them to the the model, and I just gotta add them to the form. And then they have one other little bit of UI that they want, which is, like, kind of like an English only, like, plain text, view of the filter. So instead of you know, like, the filter builder kinda reads like English sometimes, like, if we have it set right. You know, like, show me products show me customers who bought products in the last 5 days, and that reads in the form format, but they would just want that to be in just, like, text.
Aaron
00:14:00 – 00:14:02
Yeah. That makes sense.
Sean
00:14:02 – 00:14:18
So I'm gonna do that. And then there's a few, like, fiddly UI things that I gotta that I gotta work out, which are, again, weird side effects of the Hotwire thing. So I gotta get those dialed in a little bit. Yeah.
Aaron
00:14:18 – 00:14:27
And then and then we still have not heard a thing from their data team, have we? No. Besides the last meeting Colleen and I had with them. Goodness gracious.
Sean
00:14:27 – 00:14:47
I mean, I think a lot of their stuff is gonna be in a regular Postgres database, but then they have these other things which are huge, like their events table. Right. Right? Like every single thing that anybody does on any of these any of their users do on any of these pages. It's huge, massive, billions of records, I would imagine.
Sean
00:14:49 – 00:15:09
So that's like its own special beast that they're designing, which is not compatible with our SQL query format that we spit out. So it's like, there's probably some way to do it, but it's like, they had to take like the SQL and then turn it into some JSON format, which they can run on whatever, you know, high like
Aaron
00:15:09 – 00:15:10
Timescale thing.
Sean
00:15:10 – 00:15:19
Exotic database that they're using. But yeah, they haven't talked to us about it in a while. I don't even know what's happening with that. No idea.
Aaron
00:15:19 – 00:15:22
As long as we continue to make ourselves available, I feel good about that.
Sean
00:15:23 – 00:15:32
Yeah. Yeah. I mean, hey, we're ready, man. We'll, it's up to them to really derisk it. Like, I I think we've pointed out plenty of times, like, yeah, we're generating SQL.
Sean
00:15:32 – 00:15:38
Like, if we need to do something else, we kinda need to know what we're doing. They haven't told us, so okay. That's that. Yep.
Aaron
00:15:39 – 00:15:44
Yep. That is that. I feel good about where we're at. Great. Okay.
Aaron
00:15:44 – 00:15:48
How do you feel about the whole thing just besides Hotwire, just like in general?
Sean
00:15:49 – 00:15:58
Oh, great. Yeah. I think, I'm I like we have we have what we wanted at the end of this. Like, we have a product. We could
Aaron
00:15:58 – 00:15:59
I know. We could
Sean
00:15:59 – 00:16:01
sell it on rails. You know? Like, it's
Aaron
00:16:01 – 00:16:04
We have a product and we have money, which is crazy.
Sean
00:16:04 – 00:16:06
Yeah. It worked out. It's like what we want.
Aaron
00:16:06 – 00:16:07
Worked out.
Sean
00:16:07 – 00:16:14
Yeah. So here we are. And then you've been doing such a great job keeping the the buzz live over on the Laravel side that will have somewhat of a launch over there, I think
Aaron
00:16:14 – 00:16:14
Mhmm.
Sean
00:16:15 – 00:16:15
Which is cool.
Aaron
00:16:16 – 00:16:36
Yeah. So I feel I'm glad to hear that because I feel pretty good. I feel pretty good about it. It's obviously been a long road, but I don't, I don't think I would, I've I'm happy with how we've done it. I don't know if I would do it differently because we learned so much from a second implementation.
Aaron
00:16:37 – 00:16:54
You know, in a first, like, I guess a second client implementation because I did it first and then that we brought it all back to Laravel, all those improvements. And, like, the Laravel product is better now. We have a rails product now. We have money. I've had time to do some open source stuff.
Aaron
00:16:54 – 00:16:58
Like I feel pretty good about it. I feel like we're, we're doing the thing we set out to do.
Sean
00:16:59 – 00:17:12
Yeah, it was a good call. I don't think I'd redo it. I think we did it the way we could. I mean, then hiring Colleen was obviously the only Yeah. I hoped it was possible because of her.
Sean
00:17:12 – 00:17:13
And then
Aaron
00:17:13 – 00:17:14
Yeah. For sure.
Sean
00:17:16 – 00:17:29
Yeah. I'm I'm looking forward to having it off my plate. You know, it's like Of course. In US, like, every week I have to figure out something for this client that I gotta do. I tried to hand off I handed off our meeting last week to Andrew
Aaron
00:17:30 – 00:17:31
since we had just done the bullet
Sean
00:17:31 – 00:17:38
train integration. I was like, I mean, that's our update. So could you show him like the bullet train integration and then just didn't go? I'm trying to like step away.
Aaron
00:17:39 – 00:17:43
Yeah. Did you get any, did he circle back and tell you how that went?
Sean
00:17:44 – 00:17:50
No. He didn't. No? But it's fine. I think that they all got other stuff going on.
Sean
00:17:51 – 00:17:56
Like we will know when they start doing query builder stuff because our DMs are going to blow up.
Aaron
00:17:57 – 00:18:03
Yeah. Yeah. That's true. Yeah. We don't we don't need to poke that sleeping bear right now.
Sean
00:18:03 – 00:18:21
No. But that means, like, that's why I am, like, I gotta get somebody else up to speed. So that way, when that does happen, you know, like, we can, like, triage and then hand it off. Yeah. Because I think did I say this last week that I'm taking another job?
Sean
00:18:21 – 00:18:22
Did I say that?
Aaron
00:18:22 – 00:18:34
You did. Yeah. You kind of you kind of explained what you had thought it would look like, and then you DMs me with some potential updates. So do you kinda wanna go into how that shifted a little bit?
Sean
00:18:34 – 00:18:58
Yeah. It did I mean, it's overall, it's like my job is the yeah. That conversation continues with my boss, and it's going really well. And I'm very excited about the new sort of, like, role that I'll be doing. And, yeah, the thing that we're still, you know, sorting out is, like, the title and what it is.
Sean
00:18:58 – 00:19:37
But I think that that that doesn't matter to me at this point because the job is exactly what I want, and I very much am I have never ever been in alignment with the mission of a company the way I am here, and then also that I very much like the people that I work with. I think I have an amazing team, and it's not like I'm at some nonprofit. I actually get paid, you know, a real developer salary. It's pretty amazing. So I'm very excited to, like, take on more responsibility and ownership there.
Sean
00:19:37 – 00:20:03
It makes so much sense to me. And then also career wise, it makes sense to me because it's a good step away from the individual contributor Mhmm. Spot that I've kinda been in forever, which I definitely want to like, we talked about this a little last week too. I I am seeing I see programming more and more as a means to an end. Frankly, it would be kind of, like, awesome to have a job where I'm not programming.
Sean
00:20:03 – 00:20:25
And then once again, programming can be this fun thing that I actually like to do, and it's not like my grind that I have to have to do. So that could be awesome. As it stands, our company is so small. There's no way that I'm not programming, which is totally, totally fine. But anyway, yeah, I I am very excited about, you know, pretty much everything about it.
Aaron
00:20:26 – 00:20:37
Well, that's fantastic. I'm glad, even if it changed a little bit, I'm glad it still sounds like almost entirely positive, which is great. Mhmm.
Sean
00:20:38 – 00:20:38
Yeah.
Aaron
00:20:39 – 00:20:43
Good. Well, things in Shanland are pretty good.
Sean
00:20:44 – 00:20:46
Yeah. What about what about Texas?
Aaron
00:20:48 – 00:20:56
Good. We the past, I think, the past 3 nights, the babies have more or less slept through the night.
Sean
00:20:57 – 00:21:02
Wouldn't you say that different people have different definitions of sleep through the night?
Aaron
00:21:02 – 00:21:13
Yeah. I've I've definitely learned that. So the what's happening is we put them down. We feed them at, like, 6:15, 6:30. Put them down at 7:15, 7:30.
Aaron
00:21:14 – 00:21:35
They go to sleep. We don't wake them up at 10:30, but we feed them again at 10:30, like, in their swaddles, in the nursery, with the lights off, everything. And then put them down, you know, at 11 when they're done eating. And then the past 2 or 3 nights, we have not fed them again until 7 AM in the morning.
Sean
00:21:35 – 00:21:37
That's sleeping. We've had Beautiful.
Aaron
00:21:37 – 00:22:18
We've had maybe, like, 3 or 4 times where they've, like, woken up and you go over and you kinda, you know, soothe them and they go back to sleep. So that to me is just totally game changing, and it's been, oh, it's been so nice. And Jennifer and I switched up the way we do shifts. It used to be like, if you're on duty, you start kinda after the 10:30 feed, and you go until the middle of the night feed, which used to be, like, 3, 4, or 5, whatever. And as those got later, it was like, you're basically on duty all night, and it's possible that they're fussy all night and you just don't sleep.
Aaron
00:22:18 – 00:22:34
So now we do, like, 4 hour, 4 hour. Every night, we just switch 4 hour, 4 hours. So nobody gets, like, a real bum shift. Like, if your 4 hours are bad, you know, at least you've got 4 hours of sleep coming up. So that has been amazing.
Aaron
00:22:35 – 00:23:11
Being able to sleep a little bit more again is just it's the best. So that's been really good. And then stuff in the Laravel world is is going really well, continues to go really well. I I put out a couple I put out a blog post yesterday about how Laravel does database locking, which I found just extremely interesting and super clever. And I just like was reading the source code and saw how they did it.
Aaron
00:23:11 – 00:23:38
And I was like, that is insane. And so I wrote, I wrote an article about it and posted it and other people found it super interesting. And so I'm trying to do like, I'm trying to be out there more and more, and it seems to just continue to continue to work. And so that's really encouraging still to, like, have a little bit of momentum going. So that that's been really nice.
Aaron
00:23:40 – 00:24:10
And then the other thing that we didn't get to talk about last week that I kinda wanna talk about a little bit today is the torch light syntax highlighting stuff. So while I was on paternity leave, that kind of unexpectedly, like, took off, within our, you know, little community. A couple people, I gave them, like, early access to it. I gave them just, like I made some tokens for him and said, here here you go. Like, good luck.
Aaron
00:24:10 – 00:24:26
There aren't any docs yet, but, you know, you can try it. And to my surprise and delight, they started tweeting about it. And they were like, hey, I'm using this new thing. Y'all should all use it. And so then my, you know, DMs started blowing up.
Aaron
00:24:26 – 00:24:38
We're like, hey. Can I get a token? Hey. How do I use this? And, the biggest one was probably Laravel News started using it, like, took it from, hey.
Aaron
00:24:38 – 00:24:55
Can we give it a shot to, hey. It's live in production in maybe 3 hours, 2 hours, something like that. Meanwhile, meanwhile, I'm on paternity leave and feeding children every 3 hours and not sleeping and that, you know, the service is not ready. There are no docs, and everybody's like, great. I love it.
Aaron
00:24:55 – 00:25:05
It's live in production. Take a look. Like, what are you doing? I wasn't ready for this, but it's a good thing. Like, it's a forcing function, and, you know, now it's out there.
Aaron
00:25:05 – 00:25:40
And I did finally set up an early access list, like a proper, you know, put your email here, using reform, which is another, you know, bootstrapper product, which is awesome. And we've got like a 130 people on the list right now. So I will finish. I'll probably finish the docs today or this weekend just enough, publish those, and then send out send out a batch of, early access invites to to some people and, you know, see see what they think. So
Sean
00:25:41 – 00:25:41
Super cool.
Aaron
00:25:42 – 00:25:57
Yeah. It's been it's been kinda wild. It's really between Torchlight and Sidecar, I feel like I'm just kinda being pulled along by people who really like the idea and the product. And it's really it's a lot of fun.
Sean
00:25:58 – 00:26:05
It sounds like also where you have developed a little bit of a road map for a refined launch.
Aaron
00:26:07 – 00:26:11
Tell me what you're seeing. Like, what what what's the road map you see?
Sean
00:26:11 – 00:26:16
Well, I mean, you're you're kind of doing a launch for Torchlight. You sort of True.
Aaron
00:26:16 – 00:26:16
Yeah.
Sean
00:26:16 – 00:26:36
Like, everything that you've done, you're building anticipation. You have a landing page, which is rock solid. I saw you got a lot of good feedback about that. So it's doing its job. And then you have built up a launch list of people to launch to.
Sean
00:26:37 – 00:26:44
And, you've made connections kind of in the community with people that are, you know, hyping it with you.
Aaron
00:26:44 – 00:26:45
Early fans. Yeah.
Sean
00:26:45 – 00:26:47
Yeah. And then you've got Yeah.
Aaron
00:26:47 – 00:27:13
That's I I agree. I was just curious because it's a lot I think it's harder for me to see from the inside exactly what all has happened. But, yeah, I think I think that's a a great roadmap that we can follow. I think I think the like, I feel like building in public is kinda cliche, and I don't know. I I feel like building in public has helped a whole lot.
Aaron
00:27:13 – 00:27:48
Like, I have been tweeting out screenshots and challenges and wins and losses with torchlight and, you know, being being an indie with a full time job and stuff like that. And people really, like I feel like that has been a good a good way to get, like, get people's attention at the very, very top of the funnel. Like, hey, look at, like, look at what I'm doing. I'm gonna be talking about it. It's gonna enter your consciousness, and you're gonna go check it out.
Aaron
00:27:48 – 00:28:01
Of course, it has to be backed by the landing page and the early access list and a, you know, a real product, but I feel like that is that I know I see now why people are doing that so much. Like talking about what they're building all the time.
Sean
00:28:01 – 00:28:18
I think that if, well, 2 things, one that if it's the, the right audience. So if you're building in public and your audience for building a public is bootstrappers, but then your software is for hair salon.
Aaron
00:28:19 – 00:28:19
Right.
Sean
00:28:19 – 00:28:24
Yeah. You know, like, stylists. Yeah. It's useless. Utterly useless.
Aaron
00:28:24 – 00:28:28
Just, yeah. Just you get a lot of people that want to follow along, but no customers.
Sean
00:28:29 – 00:28:36
Right. So awesome. I now am but I mean, useless for sales, not so useless maybe for feeling like you're in a community.
Aaron
00:28:36 – 00:28:37
Right.
Sean
00:28:37 – 00:29:06
So, you know, has has a point. But then the other thing is it's also useless for a long term growth of a product. It will be helpful for an initial spike, which is super good and important, but then it's not a long term growth channel. Yeah. At least I I don't I don't think it is.
Sean
00:29:06 – 00:29:30
I think you can make it a long term growth channel, but then probably turns into a job you don't want. Right. Yeah. At least that was my experience with SketchUp CSS and and the Angular escape plan and that stuff. It was, like, very exciting to write things that connected me with famous people in the community that I was super I was so excited about that, and that also made a lot of sales for me.
Sean
00:29:30 – 00:29:45
But then the sales would go up and then down, and then we'd be like, what's the next thing you're gonna do, Sean? What's the next cool thing you're gonna write about, Sean? What's the next cool thing that's gonna connect with everybody? And then I started to resent that whole process. Treadmill?
Sean
00:29:46 – 00:29:52
Yeah. Exactly. It's this content treadmill. So anyway yeah. That's my I know you know that.
Sean
00:29:52 – 00:29:53
I was just for podcasting.
Aaron
00:29:53 – 00:29:54
Oh, no.
Sean
00:29:54 – 00:29:57
No. Yeah. That's my that's my general feeling about that stuff.
Aaron
00:29:57 – 00:30:40
No. You're you're intimately acquainted with with this process. I think I I hope that so I feel like we're kind of as Hammerstone, we're kind of, like, building this universe of of things with with refine and torchlight and maybe some, like, documentation stuff and all of this stuff around, you know, the developer experience and that kind of stuff. Sidecar is in there as well. And I feel like each of them helps the other and kind of feeds the other, which is just wonderful.
Aaron
00:30:40 – 00:31:31
Like, every time every time we write an open source package for Laravel people in the Laravel world use it. They read the docs on the hammer stone website Underneath the pretty code highlighting, they see code highlighting powered by torchlight, which takes them to torchlight. Over on torchlight it says hammerstone product, which points them back. And so I'm hoping that with some of these, like, avoiding the content treadmill by having, not evergreen content because that's not what it is, but having tools that continue like, their life continues on in usefulness. Like, the the initial hurdle is big, granted, but then the main the maintenance hurdle is a lot lower than writing a new, you know, 4,000 word article every month or something.
Aaron
00:31:31 – 00:31:41
Right? People are continuing to use Sidecar, and it's continuing to actually pick up Steam instead of, like, we launch this blog post and then, you know, the the ride is over.
Sean
00:31:42 – 00:31:45
Yes. Exactly. I think you're so right. So
Aaron
00:31:45 – 00:32:13
yeah. I'm hoping that that can be like you talk about a a roadmap. I'm just kind of, you know, crystallizing it here now, but I'm hoping that can be kind of a continuing roadmap. And what I wanna wanna stay away from is, like, we have 50 open source packages, and they're all kind of like middling and maintenance heavy. What I would like to stay towards is we have, you know, 5 open source and, you know, 3 paid or whatever.
Aaron
00:32:13 – 00:32:30
The open source are really good and they're kind of meaty, but we don't have 50 little guys that are sucking up a long tail of our time and attention, that kind of thing. So that's kind of the balance I'm trying to strike is like, do open source just enough, but not, but not too much.
Sean
00:32:31 – 00:32:42
Right. I, I, I think that's exactly what's happening too. I'm thinking back to like our original scheming about this, and this is basically what we were thinking, you know? Yep. Yep.
Sean
00:32:42 – 00:32:46
So it is actually, it is actually working, which is exciting.
Aaron
00:32:47 – 00:33:04
Yeah. Yeah, it is. And just kind of another random topic. One of the things I've been thinking about, and be curious your take on it, is, you know, I see all the time, like, just push something out the door. Just like Yeah.
Aaron
00:33:04 – 00:33:17
Just just get it out there. Don't worry about anything. You're gonna it's gonna be crap. Just launch it. And I'm like, I I understand I understand the sentiment behind it.
Aaron
00:33:17 – 00:33:46
Like, don't fiddle with perfection until you never launch it or launch something that nobody wants. Totally get it. Great. I wonder if we've swung too far into, like, just launch anything you can as soon as you can even if it's crap right now and iterate on it. Because I personally feel like some of the stuff that we've put out and are going to put out does so well because it's thought through and polished and complete.
Aaron
00:33:46 – 00:34:07
Like, we have a full set of docs for sidecar, and sidecar does these really nice things, like sets up all of your credentials in AWS so that you don't have to do it because that's miserable. And so I I wonder if we've swung too far as, like, a, you know, bootstrap or indie community to just launch immediately. Can you build it in 12 hours when it's like, wait. Wait. Wait.
Aaron
00:34:07 – 00:34:13
Woah. Woah. Hang on. Do something really, really well and then put it out there. But I don't know.
Aaron
00:34:13 – 00:34:14
What do you think?
Sean
00:34:16 – 00:34:24
Yeah. I agree that we have swung too far in the direction of the MVP. Right? That was the thing
Aaron
00:34:24 – 00:34:24
he
Sean
00:34:24 – 00:34:39
used to say. Get your MVP out there because, but I think it's obviously it's like you said, it's because we're, people are afraid to launch their stuff. And so sometimes Be included.
Aaron
00:34:39 – 00:34:40
So I'm not going to that.
Sean
00:34:41 – 00:35:31
They'll, they'll use the, the excuse that their product is incomplete to avoid facing the fear of launching the product. I think that it's rude to other people. It's sort of inconsiderate to launch an incomplete product and just expect that it, that they're gonna like, you know, be, be fine with it. So there's there's degrees here though, because the the it is also rude and inconsiderate to not launch a thing that's, you know, incomplete to people that want it because there are sometimes people that are like, hey, I would like whatever you have right now, and it will be good to me. You know?
Sean
00:35:32 – 00:35:56
And there's so there's a time and place for that. Like, our friend, Michelle, who is writing a book, who is afraid to prelaunch it. I was talking to her about that, and I was like, you know, like, it's kind of inconsiderate to people to not want to quote when all these people are like, please give me what you have already. Mhmm. And they'll know like that it's incomplete and that, but they, but they want it.
Sean
00:35:56 – 00:36:07
So that's a different story, but usually the people that are needing the advice to like launch it already, they need to launch it because they need to realize that people don't want it sooner.
Aaron
00:36:11 – 00:36:14
Yeah. Brutal. Accurate.
Sean
00:36:15 – 00:36:30
Yeah. And so, like, for us, you know, okay. Refine's taking forever for us to launch either version, And I probably like you, I would imagine both the same wish it was going faster
Aaron
00:36:30 – 00:36:30
Mhmm.
Sean
00:36:31 – 00:37:00
To be like it launched as a product. But at the same time, I recognize that patience in this in this case is the right thing to do, because we were able to say yes to this other opportunity, which is we were just talking about earlier, set us up for bigger things that we can do. Mhmm. And Yep. And I don't think that we have the problem of validation.
Aaron
00:37:01 – 00:37:02
I don't. I agree.
Sean
00:37:02 – 00:37:16
Right? Yep. So if we don't have the problem of validation, then why are we why are we rushing? Other than there are other people that would come up with maybe, like, you know, come up with a competing product. Sure.
Sean
00:37:16 – 00:37:24
Though that's, like, that's totally possible, but also we we both know how hard it is. So it's like Wow.
Aaron
00:37:24 – 00:37:25
Hard. Yes.
Sean
00:37:26 – 00:37:37
Yeah. So, you know, fine. Eventually, there will be competitor for this. So but then that's totally fine. I'm not I'm not really sweating that.
Sean
00:37:37 – 00:37:47
But yeah. I mean, there's, like, a timeline. We we can't just, like, put it off forever, but we have limited resources. We have to, like, balance it with, like, our own sanity. Yep.
Sean
00:37:47 – 00:38:02
And we're not procrastinating because we're afraid of launching. We're not procrastinating. Like it's like very strategically deliberate. And we have, I don't feel uncomfortable. Like, I the product is validated.
Sean
00:38:02 – 00:38:36
We've been paid tens of 1,000 of dollars to build it and have had lots of people expressing interest in buying it without even remarketing it whatsoever. So I think that that's just like, and, and also like I, just our own experience with seeing other places using like, even at my job, my boss is, like I was telling him about it and he was like, oh, okay. I think just give me a demo. Like, he wants a demo of it so that way you could see because it would make sense. We could just drop this thing in there.
Sean
00:38:37 – 00:38:45
There's tons of times where clients where, you know, our clients are asking for like different reports and be able to see different things and we could just let them build their own.
Aaron
00:38:45 – 00:38:46
Do it themselves. Yeah.
Sean
00:38:46 – 00:39:00
Do whatever they want. Yeah. So anyway, in conclusion, yeah. That's I totally agree with you. Like, that we've swung too far and that there were lacking the nuance in that conversation of, like, well, why are we telling people to push it out and launch it?
Sean
00:39:00 – 00:39:11
It's because they need to validate, and there's other ways to validate other than like putting out a shitty product. I think that's that's my take on it.
Aaron
00:39:11 – 00:39:30
Yep. I think you're right. I think we've lost the context of why we were as a, as a group telling people to launch early in the first place. It was, so you don't build something for hair salons and then finally launch and then find out people at hair salons don't want to use software. Like that.
Aaron
00:39:30 – 00:39:41
That was the, I feel like that's the original story. I remember from micro comp, like, right. Don't spend 2 years building hair software before you talk to or get someone to use your software.
Sean
00:39:41 – 00:39:42
Right.
Aaron
00:39:42 – 00:39:55
And now it's just like any idea you have, it should be done in 12 hours and you should tweet the whole thing. It's like, well, that's a little bit too far the other way. So glad you feel that.
Sean
00:39:55 – 00:40:10
Dan I know now that I feel it now that I've done this enough times with enough products and enough companies and my own products and etcetera, like I really do think that building a product to validate an idea is just dumb. Like, you don't you do need
Aaron
00:40:10 – 00:40:12
to the hardest way to do it?
Sean
00:40:12 – 00:40:25
Yeah. Absolutely. You do you don't need to build a single thing to know that, like, people are gonna buy it. You could probably find if it's a thing, people will pay you to build it. I mean, and that's so obvious to me now.
Sean
00:40:25 – 00:40:43
And I've seen that happen with other people too so many times. That happened with us on this project. Right? Like, I think, and then, and then realizing that it's really like this ongoing converse. A product is like an ongoing conversation with your customers and people that are going to use it.
Sean
00:40:44 – 00:41:03
It's not, it's never ending. And like you could start the conversation before the product exists. You could start learning and understanding like well before. And then it's just not that hard to connect the dots between like, will people pay for it or, or not? So I'm saying this, and then we'll see we launch, and then nobody wants to nobody wants to buy it.
Sean
00:41:03 – 00:41:06
I will eat my words. That's not gonna happen. Not gonna happen.
Aaron
00:41:07 – 00:41:08
It's gonna be great.
Sean
00:41:10 – 00:41:16
Yeah. I still think that it won't be like a huge swarm of license purchases at first.
Aaron
00:41:18 – 00:41:26
What okay. So this is interesting. What do you think is huge? When you say you don't think it'll be huge, more than let's do it. Let's do it over under.
Aaron
00:41:26 – 00:41:37
When we first, like, launch it, you know, what do you think in the first month we'll sell in in Laravel licenses?
Sean
00:41:37 – 00:41:38
Half a dozen.
Aaron
00:41:39 – 00:41:40
Half a dozen. Okay.
Sean
00:41:41 – 00:41:43
What do you think?
Aaron
00:41:43 – 00:41:51
I think in the 1st month, we will sell I think, double that. I think we'll sell a dozen.
Sean
00:41:52 – 00:41:56
Okay. I mean, we're both kinda in the right order of magnitude, I guess.
Aaron
00:41:56 – 00:42:05
Yeah. I don't think we'll sell a 120, but No. And honestly with if we sold half a dozen, I'd kinda be like, okay. This is this is working.
Sean
00:42:06 – 00:42:16
Yeah. Oh, no. Half a dozen half a dozen is a 100% to me success. I wouldn't call that not a success at all. That's an absolute success.
Aaron
00:42:17 – 00:42:18
That's a good spot to be in when
Sean
00:42:18 – 00:42:19
But I still think like it's
Aaron
00:42:19 – 00:42:21
that launch is good.
Sean
00:42:21 – 00:42:25
And then we're figuring out our long term, you know?
Aaron
00:42:25 – 00:42:28
Then we're figuring out repeatable channels and stuff. Yeah.
Sean
00:42:28 – 00:42:47
I think word-of-mouth will be important, and we have to figure out how to get the word-of-mouth you know, getting people to know that it exists. So that way, when it's time to build a thing like that on your project, you can remember, oh, yeah. I could use refine. I think that work you're doing on the open source projects is like bright in line with that.
Aaron
00:42:48 – 00:42:49
So I think that'll help.
Sean
00:42:49 – 00:42:56
Yeah. To me, everything is really lining up. It seems it seems really good. I do think yeah. I'm so excited to get to that point where we start working on that stuff.
Sean
00:42:56 – 00:43:05
You know? Mhmm. Like, I'm my hypothesis right now is that integrations is gonna be, like, our best channel, but we'll see. Yeah. We'll see what happens.
Aaron
00:43:05 – 00:43:31
I think it'll be integrations, agencies. Maybe integrations and agencies will be, I think, 2 of the top one. Like, if we can get in with 5, 10, 15 agencies and they have, you know, 5, 10, 15 projects each, I feel like that'll be really good because it is a very common problem like we've talked about. Yeah. But, yeah, integrations will be huge if we can pull that one off.
Sean
00:43:31 – 00:43:46
Yeah. Well, like, the bullet train integration. Right? Like, so so you already have somebody that's buying software to increase their development velocity. And now I want to add this feature for my customers and I can just click a checkbox and pay us a $1,000 and it's done.
Sean
00:43:47 – 00:43:57
Like, that's why I think the integration thing makes a lot of sense. Yeah. I'm I'm, like, wondering about our pricing. How do you are you feeling confident about our pricing still?
Aaron
00:43:57 – 00:44:13
Yeah. I do. I honestly think it makes it feels less like an open question on the rails side, because, you know, the integration if we're talking integrations, bullet trains, $1,000. Right? Or 9.50 or something.
Aaron
00:44:13 – 00:44:21
And on the Laravel side, Laravel Nova is $99 And so it's like, well, there's a, you know, there's a disparity there.
Sean
00:44:23 – 00:44:23
Yeah.
Aaron
00:44:24 – 00:44:48
But I wonder if I don't feel like pricing it monthly makes sense, but maybe like, I don't know, denominate or showing how much a month it is. Cause how much a month it is is like less than an hour of a freelance time a month. Yes. And so I I feel really good about the value we provide for a $1,000. I feel like the value we provide is tens and 10.
Aaron
00:44:48 – 00:45:11
Obviously, we're being paid that much. Yes. You know, 5 figures, of 1,000 of dollars. So I feel I feel really good about it, but I think that will I think that's part of what's gonna lead to selling between 612 at the beginning, is people are gonna look at it and filter out like, oh, I really need this right now. Or, oh, it's $1,000.
Aaron
00:45:12 – 00:45:15
I will, you know, look at it again when I really need it.
Sean
00:45:15 – 00:45:16
Exactly.
Aaron
00:45:16 – 00:45:30
Which is fine. It's fine for me because that, like, we don't really want a flood in the beginning because we want to be able to talk to those 5 or 6 people and be like, what'd you run into? What was good? What was bad? What do we need fix?
Aaron
00:45:30 – 00:45:32
That kind of stuff.
Sean
00:45:32 – 00:45:55
Yeah. Yeah. So that's for me. So for me, the pricing is the one thing that I'm like, I don't know because, and not because again, I'm right with you. The value for a $1,000 it's a no to me as a business owner, it would be a no brainer if I was going to like do this feature, build versus buy and I could just, you know, pay a $1,000 and done.
Sean
00:45:55 – 00:46:14
I just dropped this in and like a few lines of code and I've got my filter, my query builder. Yeah. That's absolute no brainer price wise, because you know, you look at it and as soon as you see what it is you're gonna have to actually build, you're just like, no. There's no way. It's gonna cost you so much money to have a developer do that for you.
Sean
00:46:14 – 00:46:22
There's different lines you could draw, though. Like, you could say like, well, I don't need this full query builder. I just need this one report, so we're just gonna bang out this one off For sure. Thing.
Aaron
00:46:22 – 00:46:23
Yep.
Sean
00:46:24 – 00:46:59
And then it starts to make more sense. Having conversations with my boss made me realize that, like, there's there's definitely a way to show people that, like, this is a feature that you can add to your app, but that is very valuable. Like, there's some people that don't even realize, like, I could do something like this. So that it's not obvious that you could even do something like this. And then when you do see what you could do, you're like, Oh, that would be useful in so many different ways.
Aaron
00:46:59 – 00:47:00
Yeah.
Sean
00:47:00 – 00:47:10
And then I wonder if the pricing aligns with that. And also we're anchored in Laravel by Taylor Otwell's $100, you
Aaron
00:47:10 – 00:47:12
know Empire. Yeah.
Sean
00:47:14 – 00:47:18
Yeah. I mean, a $1,000 is like you're running a real business.
Aaron
00:47:19 – 00:47:20
Yeah.
Sean
00:47:20 – 00:47:25
You know, at least 1 or 2 people are pay paying their bills with whatever this business is and
Aaron
00:47:25 – 00:47:33
Yeah. This is not, at least a start, aimed anywhere near, like, the indie hacker bootstrap or
Sean
00:47:33 – 00:47:34
No.
Aaron
00:47:34 – 00:47:44
Now your your plans are $9 a month, and you're gonna turn around and pay us a 1,000. I just don't think that I don't think that's gonna happen right now, which again is great. I'm fine with that.
Sean
00:47:46 – 00:47:52
Yeah. Yeah, totally. Well, that'll be part of us, like discovering and figuring out this market will be that pricing thing.
Aaron
00:47:52 – 00:47:52
Yeah.
Sean
00:47:52 – 00:47:57
That'll be a big that's the big that's a big question in my mind. I think it's right to try that first, but yeah.
Aaron
00:47:58 – 00:48:07
Yeah. I think so. Yeah. I'm totally open to backing it off to 500 or whatever, making it up in volume. But, yeah, start at a1000, see what happens.
Aaron
00:48:07 – 00:48:11
Mhmm. Anything else?
Sean
00:48:12 – 00:48:13
Mm-mm. Nope. Nothing else.
Aaron
00:48:14 – 00:48:17
Okay. Well, let me go ahead and call it there. Sounds good?
Sean
00:48:17 – 00:48:18
Cool. Alright.
Me

Thanks for reading! My name is Aaron and I write, make videos, and generally try really hard.

If you ever have any questions or want to chat, I'm always on Twitter.

You can find me on YouTube on my personal channel or the Try Hard Studios channel.

If you love podcasts, I got you covered. You can listen to me on Mostly Technical.