# Please… Enough with the Sloppy, One-Shot SaaS Replacements

Mahmoud Abdelwahab · AI Engineer NYC 2026 · October 13

[Watch recording](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13720s)

[03:48:40](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13720s) People have been saying that SaaS is dead for a while now.

[03:48:43](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13723s) It's not even a hot take at this point.

[03:48:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13725s) Why pay someone to build and maintain the tools you use when you could just do it yourself?

[03:48:50](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13730s) Just ask your agent to do it.

[03:48:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13732s) And for me, there's one missing piece that rarely gets mentioned.

[03:48:56](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13736s) And it's the fact that there's a gap, a big gap between working software that got one-shotted

[03:49:01](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13741s) and software I would actually use.

[03:49:04](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13744s) Software that sparks joy, that is polished, that feels good.

[03:49:07](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13747s) And I actually went on a journey to replace a bunch of SaaS providers we were using internally

[03:49:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13751s) at Railway for marketing purposes.

[03:49:13](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13753s) And I just built an all-in-one tool that we use.

[03:49:16](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13756s) The tool allows us to manage content

[03:49:17](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13757s) for the Railway website, change log, blog.

[03:49:20](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13760s) We can use it to send emails,

[03:49:22](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13762s) post on all of our social platforms at the same time,

[03:49:25](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13765s) manage the website's media.

[03:49:26](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13766s) There's even a mini CRM so that when we're working

[03:49:29](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13769s) with external creators, we can keep track of that.

[03:49:32](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13772s) There is task tracking, launch planning,

[03:49:34](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13774s) because you wanna coordinate multiple things

[03:49:36](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13776s) and when they'll go out, there's a calendar.

[03:49:38](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13778s) and at the same time there's like comments real-time editing and it's all built using

[03:49:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13785s) agents i would say i felt the breakthrough when gpt6 came out and all of this is running on railway

[03:49:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13792s) everything just auto deploys and let me essentially now walk you through the principles i use

[03:49:58](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13798s) to actually make sure that when i want to add a feature it's you know actually polished and

[03:50:04](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13804s) matches the rest of the app and at the same time the principles that you can pull from and apply

[03:50:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13811s) when building tools of your own so instead of doing my talk from my boring office i decided to

[03:50:16](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13816s) switch things up and do it outside it is absolutely beautiful right now i'm in edinburgh scotland

[03:50:21](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13821s) and it's just unreal like i'm on a bench outside and this is my view definitely a 10 out of 10

[03:50:30](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13830s) bench. Now, this type of talk for me feels a little bit different than what I'm used to, because

[03:50:36](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13836s) I essentially will walk you through the journey of me building our own internal tools and the

[03:50:42](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13842s) opinions I've developed. But I also understand that the landscape changes very, very quickly.

[03:50:48](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13848s) So like anything I say might change completely in like the span of months. Who knows? So I don't

[03:50:57](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13857s) know consider this my disclaimer like but the time of recording is fall 2026 it's october and

[03:51:04](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13864s) yeah so anyway with that out of the way uh let's talk about the first point which is text acts don't

[03:51:12](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13872s) matter now a lot of people say that it doesn't matter what programming language you use what

[03:51:17](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13877s) framework you use you can just ask your agent to go do anything and those are able to do it

[03:51:21](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13881s) And while I agree to some extent, what I found is when you're building a tool that you will actually use, when you give the agent a proper code base with solid abstractions, what ends up happening is whenever you're working, let's say, on a new feature, you end up with a much more consistent result that is similar to what you've already built before.

[03:51:44](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13904s) And the reason is, like, it's very simple.

[03:51:47](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13907s) The agent doesn't need to reinvent the same, like, wheel every time it tries to add a new feature,

[03:51:53](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13913s) or it doesn't need to introduce new patterns.

[03:51:55](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13915s) It will just essentially follow existing patterns.

[03:51:59](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13919s) And when it comes to, like, what you choose, I feel like it kind of doesn't really matter

[03:52:03](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13923s) as long as you have a code base that is properly structured.

[03:52:08](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13928s) But my go-to choice today is, one, TanStack libraries for anything when building on the web.

[03:52:15](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13935s) And if you're building anything content-related, I would say definitely go with payload.

[03:52:19](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13939s) Solid experience, great abstraction.

[03:52:21](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13941s) I went down a big rabbit hole of comparing CMSs at some point because I don't believe that I should build it from scratch, even though I can.

[03:52:30](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13950s) But again, who knows?

[03:52:32](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13952s) Maybe the future will change.

[03:52:33](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13953s) but yeah and that's kind of like the main first item that i kind of ran into

[03:52:44](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13964s) when you use like a lot of sas products out there that you actually love they use every day

[03:52:49](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13969s) when you're a user there's like a lot of things you don't notice but when you actually try to like

[03:52:54](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13974s) replicate an experience you quickly find out how much care and thought goes into different flows

[03:53:01](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13981s) So something as simple as, oh, I want to be able to send an email or to publish something.

[03:53:09](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13989s) You can easily do it by having a good old server-side rendered app with forms that you submit.

[03:53:18](https://www.youtube.com/watch?v=akEqiXFo3GM&t=13998s) But if you try to build something that is going to be used every day that you will reach for

[03:53:23](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14003s) a lot, you're like, oh, it shouldn't feel that way.

[03:53:27](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14007s) And there are kind of like a bunch of patterns that I found that agents don't typically do unless you explicitly ask them to.

[03:53:35](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14015s) And this is my list. So we'll go through them one by one.

[03:53:39](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14019s) And the first one is like autosave. I found that if, like, let's say I'm building some form of document editor, autosave is kind of like a table states feature.

[03:53:49](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14029s) So rather than manually clicking save to save things, you just ask it to automatically save progress in the background and to make sure that it's like a non-blocking action.

[03:54:02](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14042s) So that you can, let's say, as you're typing, you're able to type and then it just automatically saves.

[03:54:08](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14048s) And one other kind of like step further that you could do is to also prevent the browser tab from closing if there are unsafe changes.

[03:54:20](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14060s) So it's kind of like these two layers that kind of guarantee that whatever it is that you're working on is just not going to be lost.

[03:54:27](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14067s) Now, you can also go a step further and to add like real time collaboration so that you can have like concurrent edits.

[03:54:35](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14075s) And again, my agent didn't struggle at all with adding the feature.

[03:54:39](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14079s) It was like, I don't know, asking about it, reviewing how it would work.

[03:54:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14085s) And then once that's done, just 700 million tokens later, I had real time.

[03:54:50](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14090s) So I would say in general, this is the first thing that I find agents just don't do well from a product experience perspective.

[03:54:58](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14098s) Another pattern I found that agents completely forget to implement is optimistic updates.

[03:55:02](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14102s) So rather than showing your users a bunch of loading spinner whenever they're taking any action,

[03:55:07](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14107s) you essentially show them the success state optimistically.

[03:55:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14111s) And in the background, you're going to sync whatever change they made.

[03:55:15](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14115s) Now, if the sync or the operation fails for whatever reason,

[03:55:19](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14119s) you just roll it back and then tell them, like, oh, the operation didn't work.

[03:55:23](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14123s) Now, of course, you shouldn't blindly have optimistic updates for everything.

[03:55:27](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14127s) There are some scenarios where you want to show the user a loading spinner

[03:55:31](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14131s) and they're going to wait to check that everything worked properly.

[03:55:35](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14135s) But in general, having optimistic updates

[03:55:37](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14137s) makes the overall experience feel significantly faster,

[03:55:41](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14141s) much snappier, and it will just feel much more instant.

[03:55:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14145s) So pretty sure you can just ask your agent like,

[03:55:49](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14149s) hey, I would like to implement optimistic updates where it makes sense.

[03:55:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14152s) Let's come up with a plan and it will tell you all the areas

[03:55:54](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14154s) where it makes sense to do.

[03:55:55](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14155s) Again, it's like it's not difficult for the agent to build it.

[03:55:58](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14158s) you just need to ask and know exactly what to ask for. Now an extension of optimistic updates in my

[03:56:04](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14164s) opinion is giving users the ability to undo certain actions. Now for example if you ask your agent to

[03:56:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14171s) implement the ability to delete records what it will typically do is it will give you a delete

[03:56:16](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14176s) button you click it might show a confirmation dialog you hit confirm and then it will actually

[03:56:21](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14181s) do the deletion. But a much nicer experience is actually allowing the user to undo that action

[03:56:28](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14188s) so they could delete you immediately remove the item they want to delete from the ui but you tell

[03:56:34](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14194s) them like hey you have like a couple of seconds where you could change your mind and if they don't

[03:56:40](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14200s) do anything that means you actually want to delete a thing then you actually implement the operation

[03:56:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14205s) otherwise if they hit undo you just bring back the change so it's kind of like you do the operation

[03:56:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14212s) in the background as well it's just kind of a delayed action which kind of ties into the next

[03:56:57](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14217s) point, which is archiving, you should tell your agent you want the ability to archive records

[03:57:03](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14223s) and be able to unarchive them. Because sometimes you want to hide something from the UI completely,

[03:57:09](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14229s) or let's say from search results, and archiving will be the way to do it. And you shouldn't

[03:57:14](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14234s) force your user to be like, well, if you don't want to see this, you have to delete it.

[03:57:18](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14238s) Any much better experience is just the ability to archive records. So I think it is a pattern

[03:57:24](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14244s) that should definitely exist.

[03:57:26](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14246s) Another big one for me is URL state.

[03:57:27](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14247s) You should ask your agent to persist in the URL

[03:57:30](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14250s) whenever it makes sense, of course.

[03:57:31](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14251s) And it's so useful because whenever you have,

[03:57:33](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14253s) let's say, a list of records

[03:57:34](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14254s) and you want the ability to filter or sort them

[03:57:39](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14259s) and you just have a bunch of conditions,

[03:57:42](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14262s) maintaining these things in the URL

[03:57:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14265s) makes it trivial for you to give them to someone else.

[03:57:47](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14267s) And then, let's say, another team member

[03:57:49](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14269s) is just going to be able to see

[03:57:51](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14271s) exactly what you want them to see.

[03:57:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14272s) Now another small detail that agents don't implement out of the box is infinite scroll.

[03:57:56](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14276s) I don't want to be clicking on lobe more over and over and over or like a next page button.

[03:58:02](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14282s) As I scroll, I should just get the data.

[03:58:05](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14285s) I shouldn't need to click next page.

[03:58:07](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14287s) And then in the end, I'll just see that, oh, I've reached the end.

[03:58:09](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14289s) It's a very minor thing.

[03:58:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14291s) But also when you use something every day, I think it makes a huge difference.

[03:58:15](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14295s) Now another pattern I found that made the output significantly better is telling the

[03:58:20](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14300s) agent explicitly to use existing pages as references when it comes to the ui the data

[03:58:26](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14306s) fetching and how it works and how the thing is overall structured and that made it possible for

[03:58:32](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14312s) me to essentially define what good looks like once and then just reuse it for more features now

[03:58:39](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14319s) to be completely honest sometimes even when you tell the agent like hey use page x as a reference

[03:58:46](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14326s) sometimes it just doesn't follow it i don't know if models like get dumber sometimes but sometimes

[03:58:52](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14332s) it does happen but overall i would say that my success rate is higher whenever i tell the agent

[03:58:57](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14337s) to like well use an existing page as a reference because you also just end up with a more consistent

[03:59:03](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14343s) experience so like as you're using your app you're like oh this just matches the other part of the

[03:59:08](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14348s) app if they both share like the same concept so like if two parts of the app are essentially

[03:59:14](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14354s) lists of records that you can create, update, and delete and list. Well, both of these parts

[03:59:21](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14361s) should be pretty much identical. This list kind of brings me to my next point, which is whenever

[03:59:26](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14366s) you have opinions about something, they should be packaged as agent skills. And then this way,

[03:59:30](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14370s) your agent, whenever it's building something, it will actually follow those skills pretty closely.

[03:59:36](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14376s) And as I was building all of our internal tooling, I found myself reaching for three agent skills.

[03:59:41](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14381s) two of them are related to design engineering so one made it easier to have better ui better

[03:59:47](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14387s) typography better layouts as well as like better error messages in general and the second one was

[03:59:53](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14393s) a set of design engineering skills that made it easier to just have better animations and other

[03:59:58](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14398s) things like that and then last but not least is the railway agent skills of course so like

[04:00:02](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14402s) everything that i built for us internally at railway runs on railway of course like everything

[04:00:09](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14409s) So like buckets, databases, the app itself, the real-time server, everything.

[04:00:14](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14414s) And for the agent to effectively work with Railway and be able to deploy everything,

[04:00:19](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14419s) you just give it the Railway agent skills and it was just able to do it.

[04:00:23](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14423s) And yeah, so like once you have all of your agent skills and everything,

[04:00:27](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14427s) in my opinion, the final step, and I think the most important step, is verification.

[04:00:34](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14434s) So the agents typically, whenever you ask it to build something,

[04:00:37](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14437s) it's going to be like, okay, I implemented the feature.

[04:00:39](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14439s) build pass, test pass, all good, right?

[04:00:42](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14442s) But what I found is when you actually try out what happens,

[04:00:46](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14446s) you sometimes end up with just like a very broken experience.

[04:00:51](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14451s) So once you have like a verification loop in place,

[04:00:54](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14454s) it's like a nine day difference

[04:00:55](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14455s) because the agent, you can literally see it,

[04:00:58](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14458s) be like, okay, I built this thing.

[04:01:00](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14460s) I tried it.

[04:01:01](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14461s) It failed.

[04:01:01](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14461s) I'm going to fix it.

[04:01:03](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14463s) And it just keeps going.

[04:01:04](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14464s) And then in the end, it's like, okay, I fully tested it.

[04:01:06](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14466s) And I felt this breakthrough with computer use once it got really, really good.

[04:01:11](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14471s) And now every time I want to add a new feature, I literally just in the end say, well, you should verify that the feature works end-to-end and use it by actually running infrastructure and to test things end-to-end.

[04:01:26](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14486s) And the agents are very capable of doing this.

[04:01:28](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14488s) You just have to tell them.

[04:01:30](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14490s) and once you have all those pieces,

[04:01:32](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14492s) I would say you will end up with solid internal tools

[04:01:36](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14496s) that you can build quickly,

[04:01:38](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14498s) that work properly and work in a consistent way.

[04:01:40](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14500s) And that's it.

[04:01:41](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14501s) This was my list of principles that I use

[04:01:43](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14503s) whenever I'm building any internal tools.

[04:01:44](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14504s) Hope you found them useful.

[04:01:45](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14505s) But more importantly,

[04:01:47](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14507s) that you're inspired to build your own internal tools

[04:01:50](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14510s) that feel good, that are polished and spark joy.

[04:01:54](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14514s) And I hope that you too can become your company's SaaS layer.

[04:01:57](https://www.youtube.com/watch?v=akEqiXFo3GM&t=14517s) And with that, thank you so much for watching, and I'll see you in the next one.
