I have been running a company like this for ~6 years, we are only engineers, and, I'm the only one handling sales.
Getting started is the hardest part, like many are saying, its simpler when you can rely on your network.
Everything is about trust, by this, start reaching out to people who already trust you, there is a chance that this will get you either a project or a referral. Once you build a portfolio, you will keep getting these referrals.
In my case, I have got most of our contracts by sending cold emails, I have got a few customers through the "Who's looking for freelancers" posts + many others by just talking to people.
Lately, market is flooded with AI-generated stuff and fake job seekers which is causing people to distrust others, it seems harder to get contracts through cold outreach and the referrals we have got have done wonders.
Not everything needs K8s, over the years I have worked with many different deployment approaches, the way I do deploy hugely depends on the kind of work I'm doing but my rule is to keep it as simple as possible.
In my own projects I have stayed the longest with Ansible, once the scripts are built, you can use them to deploy most web apps in the same way and stuff rarely breaks.
For websites I have switched away from ansible to simple shell-scripts ("npm run build && scp ..."), I have also done this for web apps but it starts getting a bit more complex when doing healthchecks/rollbacks.
In general, most of my work involes web apps and I start with this and grow from there:
- Monolith backend + Postgres + same language for backend and frontend with shared code.
- Small Linux server within a cloud with fixed pricing (like DigitalOcean) with backups enabled.
- When the project allows it, postgres is installed in the VM (backups help to recover data and keep the price small).
- Use nginx as the entrypoint to the app, this is very flexible once you are used to it, for example, you can do caching + rate limit with simple configuration.
- Use certbot to get the SSL certificate.
- Use systemd to keep the app running.
- A cheap monitoring service to keep pinging my app.
- Deploys are triggered from my computer unless it is justified to delegate this to the CI.
It's been a while since I have found Ansible to be too slow and I have been willing to complete building my with a general-purpose tool for deploying webapps this way but I have no idea if I'll be ever done with this.
Perhaps the most important project I used to run with this approach is a custom block-explorer API which indexed Bitcoin + a few other cryptocurrencies and it scaled well with a single-VM (nginx aggressive caching for immutable data helped a lot), this means that the postgres storage required more than 1TB.
I’m also a DigitalOcean user, but I prefer managed K8s and don’t think there will ever be a reason to go back to having to deal with host OS things again. I’d rather just pay for my CPU/RAM, and give it Docker images to run, than worry about all that. And DOKS (DigitalOcean K8s) doesn’t cost any more than bare DigitalOcean boxes.
Cert-Manager is a CertBot-compatible K8s service that “just works” with deployed services. Nginx ingresses are a pretty standard thing there too. Monitoring is built-in. And with a few API keys, it’s easy to do things like deploy from GitHub actions when you push a commit to main, after running tests.
And perhaps most importantly, managed Kubernetes services let you attach storage for DB and clusters with standard K8s APIs (the only thing provider-/DigitalOcean-specific is the names of the storage service tiers). Also the same price as standard DigitalOcean storage with all their standard backups… but again, easier to set up, and standardized so that if DigitalOcean ever gets predatory, it’s easy enough to migrate to any of a dozen other managed K8s services.
When I was younger I used to believe that nothing serious could happen because I don't use Windows and "I was smart enough" to not execute malware (yeah, I didn't care on downloading it; how wrong I was).
Someone already mentioned zero days but let me elaborate a bit on what can happen when visiting a website:
- Without zero days involved, you are already disclosing digital information, ip address, browser fingerprint, precise location access could be granted with relaxed browser settings, etc.
- As a dev, you may have services running locally, let's say, postgres, web servers, etc. -sometimes we install stuff and forget about it- the malicious website could access these.
- It could try using your sessions for other websites.
- It can also interact with your browser extensions, many of these do not take precautions for this.
- It can also try using your hardware, camera, microphone, bluetooth, we now even have webusb.
- It can also try to use your CPU/network for cryptocurrency mining or attacking other servers, it could even use you as a proxy while you are on the website.
It definitely took a while for most libraries to catch-up with Scala 3, now, I don't see anything is missing in the main area I work with (web development), playframework already works for Scala 3.
While the tooling isn't perfect, it has improved considerably over the last years, I remember when IntelliJ couldn't deal with Scala 3 but now, it rarely complains.
Related to Python 2->3, I don't see how Scala 2->3 compares, there are clear migration guides + tools to help re-writing to switch between the new/old syntax, I have done many migrations and I have used these tools since the time when Scala 3 was launched (I admit that I reverted a migration at that time).
This is a super cool idea, in fact, its been a few months since I have been thinking on making something like meet.hn + findkismet.com, let the people share in which city they are and make introductions to people from the same city.
I have done this, it can work with some kids, still, its too much work.
At this age, I think it is more important to keep them motivated and find ways to use their creativity than to get them through the pains of debugging and learning too many technical concepts, even simple details like learning about image formats, how to reference them, case-sensitiveness are just obstacles against meeting their goals.
I feel like we don't give kids enough credit. Game devs who started in the 70s and 80s learned BASIC and all the technicalities of their platforms back then, some eventually moving to Pascal, C, or Assembly. The platforms had fewer variables back then (code running in real mode, your machine was identical to others of the same platform), but kids were still able to learn the minutiae of the Apple II or Commodore 64.
Getting started is the hardest part, like many are saying, its simpler when you can rely on your network.
Everything is about trust, by this, start reaching out to people who already trust you, there is a chance that this will get you either a project or a referral. Once you build a portfolio, you will keep getting these referrals.
In my case, I have got most of our contracts by sending cold emails, I have got a few customers through the "Who's looking for freelancers" posts + many others by just talking to people.
Lately, market is flooded with AI-generated stuff and fake job seekers which is causing people to distrust others, it seems harder to get contracts through cold outreach and the referrals we have got have done wonders.