9 ms·
Technology Choices for My SaaS in Retrospect
- mooreds 4y agoAlways fun to read reports from real life tech decisions. Hope you do a follow up in a year and share what you've learned then.
- schemescape 4y agoLooks like he’s storing data in the server’s file system, but I see no mention of backups. Hopefully there’s more than one copy of the data somewhere (or it’s not critical data)!
- threeseed 4y agoAlso the problem everyone makes with backups is that they don't regularly test them. At which point storing the files on S3 would have been far easier, quicker and safer.
- once_inc 4y ago"Nobody wants to backup, everybody wants to restore." This very much. For backups, the great crunchtime isn't when you set up the backups and see them appear where you want them. Crunchtime is when your system is in turmoil, and you need to recover what you've lost. I've seen so many people claim their backups are in perfect order, only to lose data because something broke between setup and recovery.
- lazide 4y agoAlso, time to restore for many peoples solutions can be days or weeks (if something goes wrong). Oops if that means you’re down for weeks. For some businesses (SaaS), there is no point event trying to come back from that.
- jaza 4y agoIndeed. In my experience, even if you don't use any other cloud service, do yourself a favour, and use S3 + Cloudfront (or equivalent) for static / uploaded files. Then, if and when you need to scale your web tier horizontally, you've solved what probably would have been your main blocker. Plus, as mentioned, there's your backups sorted. Plus, you'll never have to worry about running out of disk space. Plus, you're taking load off your web tier, for something it really doesn't need to handle itself. Plus, massive performance boost on serving those assets over a CDN. Plus, it's really cheap, most likely a fraction of the cost of your VPS(es) or dedicated box(es).
- human 4y agoI applaude you for keeping things simple, not over-engineering, and resisting the urge to use the latest tech.
- threeseed 4y ago> resisting the urge to use the latest tech They are using React, Tailwind, Typescript, Docker, FP etc. which is what you would find in many modern tech stacks. That's what I love about this "we should only use old tech" argument. There is no specifics, justification or technical basis for any of it. So you end up wondering how old should my choices be in order to satisfy the crowd.
- Existenceblinks 4y agoYeah, each of that requires extra cli/config/setup instead of just `import` libs. It's not about old or new, it's simple vs unnecessary deps (imply complexity).
- thraxil 4y agoReact and Docker are both almost a decade old (both released in 2013). TypeScript is from 2012. Functional programming is very, very far from being a modern concept even if it's (maybe, finally?) getting a bit more attention.
- herodoturtle 4y agoSo interesting seeing these perspectives on here. I’m in the same boat as previous commenter - React et al feels like new tech to me. But that’s because I’m an old fart who’s been using php for over 20 years.
- vikramkr 4y agoSo react's existed for almost half the time you've been using php. I think yhr distinction here is between tech that's new, and tech that's new for you
- davnn 4y agoOld-school monolith architecture with not-so-boring technology. I went the same path for a project, but in hindsight I would chose popular, well maintained, not necessarily boring, technology and a cloud architecture for most use cases I can think of.
- scarface74 4y agoDisclaimer: I work for AWS in Professional Services. I specialize in “application modernization”. Basically that means a focus on serverless technology. That being said, if someone who doesn’t know “cloud” and has a deadline just to get something done like the author asked for advice, even I would suggest they just throw a monolith on a VM. If they really wanted the optionality to go all in on AWS later, I would suggest AWS Lightsail - a simple fixed cost VPS that is easy to upgrade to full fledge AWS. In other words, I agree with his choice of just using a VPS.
- z9znz 4y agoI don't think he used a VPS; I think he just has a bare metal server (Linux). Hetzner has very performant, spacious servers for cheap. Provisioning time is usually less than 2 hours. In my experience using their servers over the last 5 years, they are reliable. And since he's using Docker and CI/CD, he can probably easily move to a new physical server if his died. Hetzner does offer VPS as well, but you pay more for the provisioning speed and the usage-based billing (assuming you run it 24/7). Plus they have much less space and performance compared to the physical servers.
- scarface74 4y agoEven better. You don’t have to worry about the “noisy neighbor” problem.
- davnn 4y agoI think the use cases where you do not need to „know cloud“ are quite limited. Where does knowing the cloud start? When you use a transactional email provider? When you start using an auth. provider? When you integrate an external monitoring framework? When you use a cloud-based object or key-value storage? In my opinion, cloud integration is almost inevitable, but you might realize that a bit later when starting with a monolith.
- personjerry 4y agoSpeaking of marketing, he probably could've plugged his product at some point in that article and leveraged the inbound traffic
- leetrout 4y agoSeemed like he was scared to share the idea.
- imron 4y agoOr maybe he wanted to write about the tech he used rather than write a prolonged ad for his product.
- leetrout 4y agoHe could have said something about what his business did. He went out of his way to not share anything and be vague.
- z9znz 4y agoI beleive he said it's a boring B2B SaaS. And it's probably a niche market such that possibly (likely?) nobody reading HN would be involved in and be interested in his product.
- leetrout 4y agoHighly unlikely given the diversity of this crowd.
- soulchild37 4y agoI did some digging and think you are right on this, and his product seems to require expertise on tax knowledge. From his LinkedIn, it seems like the product is https://taxaro.de https://taxaro.de
- leetrout 4y ago
- ofrzeta 4y agoI'd say this is quite biased, which is fine I guess, we all have our biases. Seems his choice of F# is set in stone, so you either go with Bolero or you have 1+1 languages in your stack. This is also reflected in his choice of Xamarin: he "doesn't like" Dart as a language, so he's forced to choose "dotnet MAUI as a platform [which] might not be as mature and capable as Flutter even today". Flutter as well "suffers from many bugs and problems". Is Flutter really that buggy?
- scarface74 4y agoI would never choose a Google specific cross platform environment. A cross platform mobile environment constantly needs updating to stay consistent with the vendor’s platform. I wouldn’t trust Google to give that much attention to Flutter especially seeing they are moving away from it internally for iOS development. https://9to5google.com/2021/10/10/google-ios-apps-native/ https://9to5google.com/2021/10/10/google-ios-apps-native/
- ofrzeta 4y agoSo .. what would you use?
- scarface74 4y agoWhichever JavaScript based mobile framework is the most popular. I’m not attuned to the mobile space. He said he already knew Typescript. https://bashooka.com/coding/javascript-frameworks-for-cross-platform-mobile-app/ https://bashooka.com/coding/javascript-frameworks-for-cross-...
- WHATDOESIT 4y agoReact Native, or React in a web view.
- xamde 4y agoGood link. So cross platform UI as an idea is dead.
- 4y ago
- scarface74 4y agoFirst for context, I’m far from a Microsoft hater. I spent 22 years exclusively in the MS ecosystem. I love C# and even now I’m the go to person when it comes to implementing MS solutions on AWS for my department. That being said, when I was a dev lead, the first things I thought about when choosing a technology were the ecosystem and the how hard it would be to find competent devs. You can throw a rock and find a good enough enterprise C# dev in any major city. I would not have chosen F#. As far as Flutter, Google has the attention span of a crack addled flea and I wouldn’t tie my horse to any platform with a Google specific language or runtime. Even Google is moving away from Flutter for internal apps. https://9to5google.com/2021/10/10/google-ios-apps-native/ https://9to5google.com/2021/10/10/google-ios-apps-native/ I’m very much a native framework snob. But I understand the need to have a cross platform mobile platform for a bootstrapped company. Why not use a JavaScript based mobile platform? He already new TypeScript and Typescript devs are a dime a dozen. Finally, why use Docker for Postgres?
- davidatbu 4y agoOne advantage of using docker for everything is reproducibility. Your dev and prod environmentsncan be almost identical.
- scarface74 4y agoIs it really that much easier than just installing the same version of Postgres and running SQL queries to create the schema/seed the data? You’re not going to be using the same data in production and dev.
- davidatbu 4y agoI personally definitely find it easier to use Docker than to setup the same versions of postgres across multiple OSes, or OS versions.
- Kwpolska 4y agoHow do I install the same version of Postgres if my dev machine and production run different OSes? Should I use Debian/Ubuntu repositories, or should I use apt.postgresql.org? Should I trust a third-party company (EDB) to provide me with a sane Windows installer and not upsell me on services later? Do I really need the arcane "cluster" setup in Debian/Ubuntu packages? How do I run Postgres in WSL2 if I’m using the Debian/Ubuntu packages? Or I can sidestep all these questions, and just use the same Docker image everywhere, which will give me the same version of Postgres and the same config. I agree it shouldn’t contain any schema/data.
- hknmtt 4y agoI am working on a new(again) project. I too will take the path of a monolith but later on i plan to add separate servers to handle chat, video(hosting and streaming), file hosting(ala cdn) and mailing(yes, i will write my own mailer). I write in Go, use protocol buffers to define the api but will handle it via http(manual routing, not grpc gateway), event sourcing for the domain entities, db will by good old mariadb(i never found postgres interesting with its "exotic" types and lack of ui tools), front-end will be written in quasar which i will also use for mobile app(my first). a lot of things can be done very easily and cheaply if one has the skill and time.
- switch007 4y agoWhat DB UI tools do you use with Maria that don’t have a postgresql equivalent or compatibility?
- deleted 4y ago[deleted]
- lmarcos 4y agoAs someone who's working on something similar (one-man project), what I struggle the most is with the infra details. Author mentions that there's a single machine for the api, db and nginx; this means the machine is publicly accesible to everyone, and so is the db (although the port the db is running could be only accessible to localhost). I don't really feel comfortable doing that (so I force myself to out the db within a vpc). How does the author provision the Hetzner machine? Manually? Terraform? Ansible? If something goes wrong with the single machine, how long does it take to rebuild everything from scratch? For me this is very important and I force myself to being able to rebuild everything with one or two commands (usually using Ansible). Agree with the lack of usage of k8s. For a one-man project, it seems a bit overkill. And finally, monitoring. After working for over a decade in the industry, I don't feel comfortable deploying stuff to production that is not monitored (e.g., Prometheus + grafana). Ok, there's also: backups, security updates, and a whole bunch of stuff that still delays my first deployment.
- monlockandkey 4y agoCheck out https://dokku.com/ https://dokku.com/ Dokku is basically open source Heroku. Put it on a server, and then just push your application to it.
- mr90210 4y agoThanks for sharing. This tool would have saved me hours and money.
- blumomo 4y agoIf you even don’t want to host the deployment environment, upload your docker images to https://fly.io https://fly.io. It brings your services online in minutes. Ship quickly today and once you have more time you can later run your docker images on your own infra w/o much or no changes at all to your images.
- zoomzoom 4y agoThere’s a universe of tools that aim to provide simpler abstractions over infra as code these days. One of them is provided by my company, withcoherence.com. While many of the advantages such as automated per branch ephemeral environments, accrue to teams, solo builders in some ways get more leverage from infra abstractions that let them focus on their own application.
- a_c 4y agoVery pragmatic. I would make very similar decisions as the author as well. I am very curious how does the SaaS perform
- michalbugno 4y agoOther than already mentioned backups I see no mention of: * staging environment for development * at least another baremetal machine for a copy of production and a loadbalancer in front of them, to prevent from 100% downtime in case your machine is down
- lbriner 4y agoThe article wasn't about infrastructure or resilience, it was about technology stacks. Maybe those other things were there, maybe they weren't but it wasn't about what you should do, just what he did.
- michalbugno 4y agoFirst of all there's literally a paragraph called Infrastructure. Then one of the arguments is how cheap it is. I don't find it fair to praise your tech-stack for simplicity and being cheap (awesome features btw) and fail to mention resilience. Unless you run a service that can be down 10% of time for example. Not the case here I guess since we talk about SaaS.
- lbriner 4y agoA useful read for sure. However, I wonder about the choice of React (or any SPA framework) if you say you are not designing for scalability. You said that the product is quite basic/boring and I have yet to see how this wouldn't be much easier to produce in any MVC server-side framework than any frontend framework. If you are used to .Net, you could choose dotnet core MVC (was that around then?), which is super fast and easy to deploy on Docker but also Ruby, PHP etc to suit your taste/experience. The SPA approach means a frontend and a backend developed separately and unless you have FB scale issues and want to move as much work to the browser as possible, the only time I would choose SPA would be if I was most familiar with React/Angular/Vue/Javascript.
- chrisweekly 4y agoAgreed that "SPA by default" is often a mistake. But (slight tangent / refinement), React != SPA. Next.js and Remix.run (even more so, in that you can deploy a Remix app with literally zero runtime JS) are examples of React frameworks that leverage a server runtime, to great effect. I've been building and improving websites / apps since 1998 and view Remix as a breath of fresh air, built from first principles.