← Back
AI Engineer October 12, 2026 13m

Please… Enough with the Sloppy, One-Shot SaaS Replacements — Mahmoud Abdelwahab, Railway

Read full transcript 11 segments
  1. People have People have been saying for quite some time that SaaS is dead. been saying for quite some time that SaaS is dead. been saying for quite some time that SaaS is dead. At this point, this is At this point, this is At this point, this is n't even some n't even some n't even some sensational thought. sensational thought. sensational thought. Why pay Why pay Why pay someone to build someone to build someone to build and maintain and maintain and maintain tools when tools when tools when you can do it you can do it you can do it yourself? Just yourself? Just yourself? Just ask your ask your ask your agent to do it. agent to do it. agent to do it. For me, there is one For me, there is one For me, there is one missing element missing element missing element that is rarely that is rarely that is rarely mentioned: the vast mentioned: the vast mentioned: the vast gulf between working gulf between working gulf between working software created on software created on software created on the fly and software the fly and software the fly and software that I would actually that I would actually that I would actually use—software use—software that is that is that is enjoyable, enjoyable, enjoyable, polished, and polished, and polished, and enjoyable to work with. I enjoyable to work with. I enjoyable to work with. I actually set out on a actually set out on a actually set out on a journey to replace journey to replace journey to replace a bunch of SaaS products a bunch of SaaS products a bunch of SaaS products that we at Railway that we at Railway that we at Railway were using for were using for were using for marketing and just marketing and just marketing and just built a built a built a universal universal universal tool for us. tool for us. tool for us. This tool This tool This tool allows you to manage allows you to manage allows you to manage content for the content for the content for the Railway website, Railway website, Railway website, changelog, and changelog, and changelog, and blog. We can blog. We can blog. We can use it use it use it to send emails, to send emails, post to all post to all social networks at once, and social networks at once, and social networks at once, and manage the manage the manage the site's media files. site's media files. site's media files. There's even a mini-CRM There's even a mini-CRM There's even a mini-CRM so we can so we can so we can track work track work track work with external with external with external creators. There is a creators. There is a creators. There is a task tracking task tracking task tracking and and and launch planning system because you need to launch planning system because you need to launch planning system because you need to coordinate a lot of coordinate a lot of coordinate a lot of things and things and things and their release schedule. There's a their release schedule. There's a their release schedule. There's a calendar, as well as calendar, as well as real-time comments and editing, and it's all real-time comments and editing, and it's all built built built with agents. I with agents. I with agents. I would say I felt a would say I felt a would say I felt a breakthrough when GPT -6 came out breakthrough when GPT -6 came out and it all works on and it all works on and it all works on Railway. Everything is automatically Railway. Everything is automatically Railway. Everything is automatically deployed, and deployed, and deployed, and let me let me let me walk you through the walk you through the walk you through the principles I principles I principles I use to use to use to ensure that when I ensure that when I ensure that when I add a new feature, add a new feature, add a new feature, it's really it's really it's really polished and in polished and in polished and in harmony with the rest of the harmony with the rest of the harmony with the rest of the application. At the same time, application. At the same time, application. At the same time, these are principles that you these are principles that you these are principles that you can borrow and can borrow and can borrow and apply when apply when apply when creating your own

  2. creating your own creating your own tools. So, tools. So, tools. So, instead of instead of instead of speaking from my speaking from my speaking from my boring office, I boring office, I boring office, I decided to change decided to change decided to change the setting and do the setting and do the setting and do it outside. It's it outside. It's it outside. It's incredibly beautiful here. incredibly beautiful here. incredibly beautiful here. I'm in Edinburgh, I'm in Edinburgh, I'm in Edinburgh, Scotland right now and it's Scotland right now and it's Scotland right now and it's just unreal. I'm just unreal. I'm just unreal. I'm sitting on a bench, and this is the sitting on a bench, and this is the sitting on a bench, and this is the view I have. view I have. Definitely a great Definitely a great place. This format of place. This format of place. This format of the talk is a bit unusual for me the talk is a bit unusual for me the talk is a bit unusual for me , because I , because I , because I will actually tell will actually tell will actually tell you about the journey of you about the journey of you about the journey of creating our creating our creating our own internal own internal own internal tools and about our tools and about our tools and about our own conclusions, but own conclusions, but own conclusions, but I also understand that I also understand that I also understand that the landscape is changing the landscape is changing the landscape is changing very, very quickly. very, very quickly. So, everything I say So, everything I say could completely could completely could completely change in a matter of change in a matter of change in a matter of months. Who knows? So, I do months. Who knows? So, I do months. Who knows? So, I do n't know. Consider this n't know. Consider this n't know. Consider this my warning. my warning. my warning. But the time of recording is autumn But the time of recording is autumn But the time of recording is autumn 2026. It is 2026. It is 2026. It is October. That's it. So October. That's it. So , with that out of the way, , with that out of the way, , with that out of the way, let's move on to the first let's move on to the first let's move on to the first point: point: point: the technology stack the technology stack the technology stack still matters. still matters.

  3. still matters. Many people now say Many people now say that it doesn't matter that it doesn't matter that it doesn't matter what what what programming language or programming language or programming language or framework you framework you framework you use, because use, because use, because you can just you can just you can just ask your ask your ask your agent to create agent to create anything and they will do it. And anything and they will do it. And anything and they will do it. And while I agree to some extent while I agree to some extent while I agree to some extent , I've noticed , I've noticed , I've noticed this: when you this: when you this: when you build a tool build a tool that you'll actually that you'll actually that you'll actually use, and use, and use, and provide the agent with a provide the agent with a provide the agent with a proper codebase with proper codebase with proper codebase with solid solid solid abstractions, as abstractions, as abstractions, as a result, when working on, a result, when working on, a result, when working on, say, a new say, a new say, a new feature, you feature, you feature, you get a much more get a much more get a much more consistent consistent consistent result that looks like what result that looks like what result that looks like what you've already built you've already built you've already built before. The reason is very before. The reason is very before. The reason is very simple: the agent does not simple: the agent does not simple: the agent does not need to need to need to reinvent the wheel every reinvent the wheel every time it time it time it tries to add a tries to add a tries to add a new feature or new feature or new feature or implement new implement new implement new patterns. It patterns. It patterns. It will simply follow will simply follow will simply follow existing patterns. And existing patterns. And existing patterns. And as for the choice, as for the choice, as for the choice, I don't think it I don't think it I don't think it matters that much as long as matters that much as long as matters that much as long as you have a properly you have a properly you have a properly structured codebase structured codebase structured codebase . But my choice . But my choice . But my choice today is today is today is single- single- single- stack libraries for anything stack libraries for anything stack libraries for anything when developing when developing when developing web resources. And if web resources. And if web resources. And if you're creating anything you're creating anything you're creating anything content-related content-related , I would definitely recommend , I would definitely recommend , I would definitely recommend choosing Payload. Reliable choosing Payload. Reliable choosing Payload. Reliable experience, great experience, great experience, great abstraction. I once abstraction. I once abstraction. I once immersed myself in immersed myself in immersed myself in studying and studying and studying and comparing CMS because I comparing CMS because I comparing CMS because I don't think I don't think I don't think I should build one from should build one from should build one from scratch, even though I could.

  4. scratch, even though I could. scratch, even though I could. But then again, who But then again, who But then again, who knows? Maybe knows? Maybe knows? Maybe things things things will change in the future. But yes, that's the will change in the future. But yes, that's the will change in the future. But yes, that's the main first main first main first point I point I point I encountered. When you encountered. When you encountered. When you use use use a lot of SaaS products a lot of SaaS products a lot of SaaS products that you like and that you like and use every day , as a user, you , as a user, you , as a user, you don't don't don't notice a lot. But when notice a lot. But when notice a lot. But when you try to you try to you try to recreate such an recreate such an recreate such an experience, you quickly experience, you quickly experience, you quickly realize how much realize how much realize how much care and thought has care and thought has care and thought has gone into the various gone into the various gone into the various processes. For example, processes. For example, processes. For example, something simple like, "Oh, something simple like, "Oh, something simple like, "Oh, I want to be I want to be I want to be able to send able to send able to send an email or an email or an email or post something." post something." This is easy to do This is easy to do with a good old with a good old server-side rendering application and server-side rendering application and forms that you forms that you forms that you submit. But submit. But submit. But if you're trying to if you're trying to if you're trying to create something that's create something that's create something that's going to be used going to be used going to be used every day, that you're every day, that you're every day, that you're going to going to going to refer to often, you refer to often, you refer to often, you think, "Oh, it shouldn't think, "Oh, it shouldn't feel like this." There are a number of feel like this." There are a number of templates that templates that templates that I have noticed agents I have noticed agents I have noticed agents don't usually don't usually don't usually use unless use unless use unless you ask them directly you ask them directly you ask them directly , and here is my , and here is my , and here is my list. So we'll list. So we'll list. So we'll go through them go through them go through them one by one. And the first one by one. And the first is autosave.

  5. is autosave. is autosave. I've found that if I'm, I've found that if I'm, I've found that if I'm, say, creating say, creating say, creating some kind of some kind of some kind of document editor, document editor, document editor, autosave is a autosave is a autosave is a basic feature that I basic feature that I basic feature that I can't do without. So can't do without. So can't do without. So instead of instead of instead of manually pressing " manually pressing " save", you simply save", you simply save", you simply ask the system to ask the system to ask the system to automatically automatically automatically save your progress in the save your progress in the save your progress in the background so that background so that background so that it doesn't block your it doesn't block your it doesn't block your work; so you can work; so you can work; so you can keep keep keep typing and everything is typing and everything is typing and everything is saved saved saved automatically. Another automatically. Another automatically. Another step you can step you can step you can take is take is take is to prevent closing a to prevent closing a to prevent closing a browser tab browser tab browser tab if there are unsaved if there are unsaved if there are unsaved changes. So, it's like two changes. So, it's like two changes. So, it's like two layers of protection that layers of protection that layers of protection that ensure that what ensure that what ensure that what you're working on you're working on you're working on definitely won't get lost. You definitely won't get lost. You definitely won't get lost. You can also go can also go can also go further and add further and add real-time collaboration so real-time collaboration so you can you can you can edit a document edit a document edit a document simultaneously. And again simultaneously. And again simultaneously. And again , my agent , my agent handled handled adding this adding this adding this feature effortlessly. It was kind of a feature effortlessly. It was kind of a feature effortlessly. It was kind of a request, a request, a request, a discussion of how discussion of how discussion of how it would work, and it would work, and it would work, and then, 700 then, 700 then, 700 million tokens later, million tokens later, million tokens later, I had I had I had real-time mode.

  6. real-time mode. Overall, I would say this is the number one thing that agents agents do poorly in do poorly in do poorly in terms of product terms of product terms of product experience. Another experience. Another experience. Another pattern that pattern that pattern that agents completely agents completely agents completely forget about is forget about is forget about is optimistic optimistic optimistic updates. updates. updates. Instead of showing Instead of showing Instead of showing users a bunch of users a bunch of loading indicators for loading indicators for each action, you each action, you each action, you show them a show them a show them a success status—“ success status—“ optimistically”—and optimistically”—and optimistically”—and sync sync sync their changes in the background. their changes in the background. their changes in the background. If the synchronization If the synchronization If the synchronization or operation or operation fails for any reason fails for any reason fails for any reason , you simply , you simply , you simply cancel the action and cancel the action and cancel the action and tell tell tell the user, “Oops, the user, “Oops, the user, “Oops, something went wrong.” something went wrong.” something went wrong.” Of course, you shouldn't Of course, you shouldn't Of course, you shouldn't blindly apply blindly apply blindly apply optimistic optimistic optimistic updates everywhere. There are updates everywhere. There are updates everywhere. There are scenarios where it is better scenarios where it is better scenarios where it is better to show to show to show the user a the user a loading indicator and loading indicator and wait for wait for wait for confirmation that everything confirmation that everything confirmation that everything was successful. But was successful. But was successful. But overall, the overall, the overall, the optimistic optimistic optimistic updates make updates make updates make the interface much the interface much the interface much faster, more responsive, and faster, more responsive, and faster, more responsive, and it feels it feels it feels instantaneous. So I’m instantaneous. So I’m instantaneous. So I’m sure you sure you sure you can just can just can just ask your ask your ask your agent, “Hey, I want to agent, “Hey, I want to agent, “Hey, I want to implement implement implement optimistic optimistic optimistic updates where updates where updates where appropriate. "Let's appropriate. "Let's appropriate. "Let's make a plan." And it make a plan." And it make a plan." And it will suggest all the places where will suggest all the places where will suggest all the places where it makes sense. Again it makes sense. Again it makes sense. Again , it's not difficult for an agent , it's not difficult for an agent to build this. You just to build this. You just need to ask and need to ask and need to ask and know exactly what to know exactly what to know exactly what to ask for. In my ask for. In my ask for. In my opinion, an extension of opinion, an extension of opinion, an extension of the idea of ​​optimistic the idea of ​​optimistic the idea of ​​optimistic updates is to give updates is to give updates is to give users users users the ability the ability the ability to undo certain to undo certain to undo certain actions. For example, actions. For example, actions. For example, if you ask if you ask if you ask your agent to add your agent to add your agent to add the ability to delete the ability to delete the ability to delete records, they will usually records, they will usually records, they will usually create a create a create a delete button: you delete button: you delete button: you click it, a confirmation click it, a confirmation click it, a confirmation window may appear window may appear window may appear , you , you , you click “

  7. click “ confirm,” and then confirm,” and then confirm,” and then the record is deleted. the record is deleted. the record is deleted. But a much more But a much more But a much more pleasant experience pleasant experience pleasant experience for the user would be for the user would be for the user would be the ability to undo the ability to undo the ability to undo this action. So, they this action. So, they this action. So, they click "delete click "delete ", you instantly ", you instantly ", you instantly remove the element from remove the element from remove the element from the interface, but the interface, but the interface, but you tell them, "Hey you tell them, "Hey , you have a few , you have a few , you have a few seconds to change seconds to change seconds to change your mind." And if your mind." And if your mind." And if they don't they don't they don't do anything, it means do anything, it means do anything, it means they really want to they really want to they really want to delete the thing, and then delete the thing, and then delete the thing, and then you perform that you perform that you perform that operation. operation. operation. Otherwise, if they Otherwise, if they Otherwise, if they click "cancel click "cancel ", you just ", you just ", you just put everything back the way it put everything back the way it put everything back the way it was. It's as if you're was. It's as if you're was. It's as if you're performing an operation in the performing an operation in the performing an operation in the background. This is background. This is background. This is simply a deferred simply a deferred simply a deferred action that brings us action that brings us action that brings us to the next point to the next point —archiving. You —archiving. You —archiving. You should ask should ask should ask the agent to add the agent to add the agent to add the ability to the ability to the ability to archive records and archive records and archive records and unpack them unpack them unpack them back, because sometimes back, because sometimes back, because sometimes you need to completely you need to completely you need to completely hide something from hide something from hide something from the interface or, the interface or, the interface or, say, from say, from say, from search results, and search results, and search results, and archiving is exactly the archiving is exactly the archiving is exactly the way to do it. way to do it. way to do it. You shouldn't You shouldn't You shouldn't make make make the user think, " the user think, " Well, if I don't want to Well, if I don't want to Well, if I don't want to see this, I'll have to see this, I'll have to delete it." A much delete it." A much better experience is better experience is better experience is simply being simply being simply being able to able to able to archive recordings.

  8. archive recordings. archive recordings. Therefore, I believe that this Therefore, I believe that this Therefore, I believe that this pattern must pattern must pattern must exist. Another exist. Another exist. Another important point for me important point for me important point for me is the status of the is the status of the URL. You should URL. You should URL. You should ask your ask your ask your agent to store agent to store agent to store state in the URL when state in the URL when state in the URL when appropriate, of course. appropriate, of course. appropriate, of course. This is extremely This is extremely This is extremely useful because when useful because when useful because when you have, say, a you have, say, a you have, say, a list of records and you list of records and you list of records and you want to want to want to filter or filter or filter or sort them by a sort them by a sort them by a bunch of conditions, bunch of conditions, bunch of conditions, saving those saving those saving those parameters in the parameters in the URL makes it URL makes it URL makes it easy to pass them on to easy to pass them on to easy to pass them on to someone else; and then the someone else; and then the someone else; and then the other team member other team member other team member will be able to see exactly what will be able to see exactly what will be able to see exactly what you wanted to you wanted to you wanted to show them. And another show them. And another show them. And another small detail that small detail that small detail that agents don't implement out agents don't implement out agents don't implement out of the box is of the box is of the box is infinite infinite infinite scrolling. I don't want to scrolling. I don't want to scrolling. I don't want to keep clicking " keep clicking " load more" or the load more" or the load more" or the "next "next "next page" button. page" button. page" button. Data Data Data should should should load load load automatically when scrolling. I don't automatically when scrolling. I don't automatically when scrolling. I don't need to click " need to click " next page". And next page". And next page". And eventually I'll just eventually I'll just eventually I'll just see, "Oh, I've reached the see, "Oh, I've reached the see, "Oh, I've reached the end." It's a very end." It's a very end." It's a very small thing, but when small thing, but when small thing, but when you use you use you use something every day, I something every day, I something every day, I think it makes a think it makes a think it makes a huge difference. huge difference. huge difference. Another pattern that Another pattern that Another pattern that I've noticed significantly I've noticed significantly I've noticed significantly improves the result improves the result is explicitly instructing the is explicitly instructing the is explicitly instructing the agent agent agent to use to use to use existing pages as existing pages as existing pages as links. This links. This links. This applies to the applies to the applies to the interface, interface, interface, data retrieval, data retrieval, data retrieval, operating principle, and operating principle, and operating principle, and overall structure, overall structure, overall structure, which allowed me which allowed me which allowed me to define once to define once to define once what a what a what a quality result should look like, and quality result should look like, and quality result should look like, and then simply then simply reuse it reuse it for other functions.

  9. for other functions. To be honest, To be honest, sometimes even when sometimes even when sometimes even when you tell an agent, " you tell an agent, " Use the Use the Use the landing page as a landing page as a landing page as a template," they just template," they just template," they just don't do it. I don't don't do it. I don't don't do it. I don't know if know if know if models sometimes get " models sometimes get " stupider," but it stupider," but it stupider," but it really happens. really happens. really happens. However, overall, I would However, overall, I would However, overall, I would say that my say that my say that my success rate is success rate is success rate is higher when I ask higher when I ask higher when I ask the agent to "Use an the agent to "Use an the agent to "Use an existing page as a existing page as a existing page as a sample," as it sample," as it sample," as it provides a more provides a more provides a more consistent consistent consistent user user user experience. Yes, while experience. Yes, while experience. Yes, while using using using the program you think: the program you think: the program you think: "Oh, this definitely "Oh, this definitely "Oh, this definitely matches the rest of the matches the rest of the matches the rest of the application." application." If they share a If they share a If they share a common concept, common concept, common concept, for example, if the two for example, if the two for example, if the two parts of the application parts of the application are lists of records are lists of records are lists of records that can be created, that can be created, that can be created, updated, deleted, updated, deleted, updated, deleted, or viewed, then or viewed, then or viewed, then they should be nearly they should be nearly they should be nearly identical. This identical. This identical. This brings me to my brings me to my brings me to my next point: next point: next point: when you have your own when you have your own when you have your own preferences about preferences about preferences about something, it's worth something, it's worth something, it's worth formalizing them as formalizing them as formalizing them as agent skills. Then agent skills. Then agent skills. Then your agent, when your agent, when your agent, when creating something, will creating something, will adhere to these adhere to these skills quite clearly. While building skills quite clearly. While building skills quite clearly. While building all of our internal all of our internal all of our internal tools, I tools, I tools, I realized that I was realized that I was realized that I was most often drawn most often drawn most often drawn to three to three to three agent skills. Two of them agent skills. Two of them agent skills. Two of them relate to design relate to design engineering. The first made engineering. The first made engineering. The first made it easier to create it easier to create it easier to create better interfaces, better interfaces, better interfaces, fonts, layouts, and fonts, layouts, and fonts, layouts, and generally better generally better error messages. The second is a error messages. The second is a set of design engineering skills that make it set of design engineering skills that make it easier easier to implement better to implement better to implement better animation and animation and animation and things like that. And, of course, things like that. And, of course, things like that. And, of course, last on the list, last on the list, last on the list, but not least, are the skills of a but not least, are the skills of a Railway agent.

  10. Railway agent. Railway agent. Everything I've created for Everything I've created for Everything I've created for us at Railway runs on us at Railway runs on us at Railway runs on Railway itself, of course, Railway itself, of course, Railway itself, of course, absolutely everything. That is, absolutely everything. That is, absolutely everything. That is, buckets, databases, the buckets, databases, the buckets, databases, the application itself, the application itself, the application itself, the real- real- real- time server—everything. To enable an agent to time server—everything. To enable an agent to work effectively with Railway and work effectively with Railway and deploy everything you deploy everything you deploy everything you need, you simply need, you simply need, you simply provide it with provide it with provide it with Railway skills and it Railway skills and it Railway skills and it handles it. And handles it. And handles it. And so, once you so, once you so, once you have set up all the have set up all the have set up all the agent skills, in agent skills, in agent skills, in my opinion, the my opinion, the my opinion, the final and final and final and most important step most important step most important step is verification. So, is verification. So, is verification. So, agents usually, when agents usually, when agents usually, when you ask them you ask them you ask them to build something, say: " to build something, say: " Okay, I implemented Okay, I implemented Okay, I implemented the feature, the build the feature, the build the feature, the build succeeded, the tests succeeded, the tests succeeded, the tests passed, everything is good, passed, everything is good, passed, everything is good, right?" But I've right?" But I've right?" But I've noticed that when you noticed that when you noticed that when you actually actually actually check the check the check the result, you sometimes result, you sometimes result, you sometimes get a very get a very get a very unworkable experience. So unworkable experience. So unworkable experience. So when you have a when you have a when you have a validation cycle, the difference validation cycle, the difference validation cycle, the difference becomes striking because becomes striking because becomes striking because you literally see the you literally see the you literally see the agent say, “Okay, agent say, “Okay, agent say, “Okay, I built this. I I built this. I I built this. I tried it. It didn't tried it. It didn't tried it. It didn't work. I will work. I will work. I will fix it. And he fix it. And he fix it. And he keeps working, keeps working, keeps working, and at the end he says, "Okay, and at the end he says, "Okay, and at the end he says, "Okay, I've fully I've fully I've fully tested this." And I tested this." And I tested this." And I experienced this breakthrough in experienced this breakthrough in experienced this breakthrough in using using using the computer when it the computer when it the computer when it became really, became really, became really, really good. And now, really good. And now, really good. And now, whenever I want to whenever I want to whenever I want to add a new feature, add a new feature, add a new feature, I just say at the end, I just say at the end, I just say at the end, "Well, you have to "Well, you have to "Well, you have to test that test that test that the feature works from the feature works from the feature works from start to finish, start to finish, start to finish, using using using real real real infrastructure for infrastructure for infrastructure for end-to-end end-to-end end-to-end testing." And agents are testing." And agents are testing." And agents are quite capable of quite capable of quite capable of doing this. You just doing this. You just doing this. You just need to tell them.

  11. need to tell them. need to tell them. And when you have all of these And when you have all of these And when you have all of these elements, I would say elements, I would say elements, I would say you end up with robust you end up with robust you end up with robust internal internal internal tools that tools that tools that can be can be can be built quickly, that built quickly, that built quickly, that work work work properly and consistently. That's properly and consistently. That's properly and consistently. That's all. This was my all. This was my all. This was my list of principles list of principles list of principles that I use that I use that I use when creating any when creating any when creating any internal internal internal tools. tools. tools. I hope they were I hope they were I hope they were useful to you, useful to you, useful to you, but more importantly, but more importantly, but more importantly, inspired you inspired you inspired you to create your own to create your own to create your own internal internal internal tools that are a tools that are a tools that are a pleasure pleasure pleasure to use, that are to use, that are to use, that are perfect, and that perfect, and that perfect, and that bring joy. And bring joy. And bring joy. And I hope you I hope you I hope you can also become the can also become the can also become the SaaS tier of your SaaS tier of your SaaS tier of your company. With that, company. With that, company. With that, thank you for watching, and thank you for watching, and thank you for watching, and see you in the see you in the see you in the next video.

Summary

The discussion centers on the evolving landscape of SaaS and the practicalities of building internal tools using agents like GPT-6. The takeaway is that while agents can automate creation, the underlying technology stack and the principles of creating polished, enjoyable software still significantly matter for practical, long-term use.

View original episode ↗