< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #130 - August 29, 2021

Here are the top threads of the week, happy reading!

Top comment by Leftium

I live in Korea. Some months my total expenses are as low as $400 while living comfortably. If I spent $1000 in a month, I spent a lot of money. I'd say my average monthly living expenses are $600-$800. My main expenses are food/entertainment, and I eat out a lot (50% of meals).

Housing is probably the biggest living expense. I take advantage of Korea's interesting rental system called Cheonsae:

Basically, if you put down a huge deposit (like $90,000: 50% to 90% of the value of the property), you don't pay any monthly rent and get the entire deposit back when you move out. My place has a $50 monthly management fee, but that includes high-speed internet. (So I joke that I get free housing with my internet.)

Of course, there is an opportunity cost because that deposit could have generated interest, but I figure the break-even point is 12% APY. (It is possible to lower the deposit by increasing monthly rent.) So it's advantageous to take out a bank loan at 2-4% interest to pay for the deposit.

There is a small risk you won't be able to get your deposit back if the owner mismanages their finances. I believe the Korean government actually guarantees housing deposits up to $50,0000 or so. In Korea, the tenants actually do background checks on the landlords! The minimum deposit is usually $10,000, so landlords usually don't scrutinize tenants.

Top comment by Fornax96

I run a file sharing / content delivery platform called pixeldrain: https://pixeldrain.com

The system serves 4 PB of data to 60 million visitors per month. I have served 30 PB and 700 million file views since I started tracking usage somewhere in 2018.

I'll go from front to back:

- Most of the frontend is plain HTML, CSS and JS. I have started transitioning some pages to Svelte. I like this framework for its speed and simplicity

- Cloudflare Analytics to get basic info like which pages are popular and where my users are from

- The structure of the website (page wrap, menu, footer, etc) is managed with Go's template system

- Constellix for Geo-DNS. This automatically sends users to the server closest to them by doing Geo-IP lookups on the nameservers

- The user-facing servers are dedicated 10 Gbps Leaseweb servers, stuffed to the brim with SSDs in RAID6 for caching. Each of these servers cost €1200 per month. The storage servers are from Hetzner's SX line.

- The OS is Ubuntu 20.04 server edition. I use Ubuntu over Debian because it ships with TCP BBR

- The API is written in plain Go. The only HTTP libraries I use are httprouter for routing and Gorilla Websockets

- The storage system is custom built to spread files over multiple servers. I call it pixelstore, it's not open source (yet)

- The database is ScyllaDB. I landed on this one after going through multiple other systems with severe bottlenecks. I started with MySQL which was limited to a single location, so other locations had high latency. Then I tried CockroachDB, but it kept hanging under the load no matter how much hardware I threw at it. ScyllaDB is very fast and relatively reliable.

- UptimeRobot for monitoring

- Mailgun for account e-mail verifications

Feel free to ask me more questions :-)

Top comment by rbetts

As managers, we've had many individuals tell us "everything's fine; I like it here..." and then leave because "I'm ready for something new." So we often hear "I'm fine" and translate that to "I'm bored/unhappy/disengaged but I'm not telling you that because I don't think it's in my interest to reveal dissatisfaction to my manager."

The first step is creating enough trust and openness in the relationship to get past this communication impasse.

Promotion ladders are one (of many) tools for expressing what the company desires of its employees. For employees seeking advancement, they also work as a tool for discovering an employee's motivation. If promotion isn't the motivation - express what is the motivation. Figuring out that someone loves the puzzle of debugging, or takes pride in being the expert, or is a 9-5 journeyman who wants a stable, competitive salary for their contribution can be the key to having a fruitful conversation.

Once both sides are honest about motivation and satisfaction (the manager obviously also needs/wants something from the employee...) then there's space for adult-to-adult conversations about how and if those motivations line up.

In my experience, managers rarely turn away skilled, drama-free, reliable contributors. But we know our employees aren't totally truthful/open with us about these sensitive topics - so we don't take "I'm fine... leave me alone" at face value.

Top comment by brendanmc6

I came late to the software and web development game. I just wanted to prototype a tool I needed and ended up becoming a full time developer.

After grasping HTML and CSS basics, prototyping my heavily interactive tool seemed impossible with JS alone, until I learned React. React solved real problems for me. Create-react-app with a firebase backend got me VERY far with zero formal education.

But I struggled with SEO, load times, and needed a sprinkle of server-side logic. Next.js solved those problems, and more.

As my prototypes grew into products, complexity was hard to manage. Refactors were impossible, even with small, modular components and well tested functions. Enter TypeScript. The single most important tool in my toolbelt. I refuse to work in plain JS now.

I'm several years in now, at my 2nd full-time dev gig and working on my 3rd side-business. My stack is Typescript, Next, vercel, firebase. Both at work and at home. Hardly any third-party dependencies needed beyond these (stripe, coingate, mapbox). I write most my CSS by hand with css grid because its the least verbose way I've found so far. I auto-format with Prettier.

I can use types and tests across my stack, I can enforce bespoke auth/permissions behavior, all kinds of queries, media upload, pretty much everything I'll ever need outside of real-time collaboration. I can build and maintain profitable products by myself. I've done it.

This also happens to be a very popular stack. What's insane about it? Every alternative I've looked at looks way less sane. Multiple languages and repos for one app? No thanks. Managing server instances and databases migrations myself? I hope I never have to. Software is fun, but I like making products more. JavaScript just happens to be the best way I've found so far.

Top comment by alangibson

I've been around the horn a few times on this. Anything short of a commitment to pay for the product (up to and including prepayment) is just noise. It's not so much that people lie about what they say they would do, but that it's too easy for you to lie to yourself about the signal you're actually getting.

Here's a good example:

> Though a lot of people I spoke to sounded "excited", I got very few signups. (They're not my target audience, so I didn't ask them if they'd pay for such a product)

Those people weren't in your target audience, and you didn't ask them to pay, but I presume you take it as a positive sign that this particular audience was "excited." But it's not. It's not anything since they're not even potential customers. That's how we subtly deceive ourselves.

Talk directly to people in your target audience (contact on social, then move convo to email, then move convo to telephone) and try to get them to put some skin in the game. One popular tactic is to offer a free feature request for a refundable prepayment.

Top comment by roca

I use debuggers a lot, although I'm a special case because I also build debuggers. But I became a debugger builder because I was an unsatisfied debugger user (as Mozilla developer working on Gecko, in particular).

A traditional forwards-in-time debugger like gdb sometimes beats print debugging, but often not or not by much. OTOH a reverse-execution-capable debugger like https://rr-project.org (disclaimer: I'm a maintainer) enables much more powerful debugging strategies like "set a data watchpoint and reverse-continue to where the value was written", which trumps print-debugging strategies in many cases (e.g. memory corruption). I use rr a lot to debug my main project, Pernosco. FWIW Pernosco is written in Rust, and it does have a fair bit of logging built into it, but I still find rr very useful there.

Pernosco itself is a new kind of debugger (see https://pernos.co --- let me not be uncouth by promoting it too hard here). I don't use Pernosco to debug itself that much, partly because that's challenging for technical reasons, but also because it is certainly true that debugging tools are more valuable for large complicated projects you don't fully understand and Pernosco is not such a project (yet).

Top comment by Zealotux

I'm using AWS' presigned URLs to let my users upload directly to an S3 bucket, with a lambda function to generate thumbnails, I keep track of the user's uploads through my app's database. This is as close as I imagine an "affordable API for audio, video, and images".

Top comment by codingdave

I have a few canned responses that I send, the majority of which are polite and grateful for them contacting me, with explanations of what type of role I'd consider.

It shuts most of them down effectively, but also keeps the door open in case they really would have an opportunity that would work for me. And over the course of a decade or two working in the same town, it built a network that I can call up when I do want work, letting me drive the process on my next search.

Top comment by bernulli

Excellent advice here on tools.

My biggest piece of advice, that resulted in my biggest push of productivity, was a daily routine tailored to how your performance varies over the day.

For me

(1) sitting down and writing (anything: paper, thesis, proposal, blog) first thing in the morning, before emails. You want the habit of writing, and feeling weird if you don’t. This is my peak performance for the day, the hardest thing for me.

(2) celebrate your writing with a nice coffee and find a nice place on campus to study a paper. My 2nd most demanding task.

(3) Lunchbreak with colleagues. Socialize, discuss ideas but also just fun.

(4) My low point after lunch, I’ll try to have meetings here or do some routine stuff (forms, reimbursement, news, internet).

(5) Exploratory research, programming, planning, ideation, discussions, brainstorming.

(6) Exercise, sport.

(7) Later in the day my programming would come back strongest towards the evening.

(8) If you have family, go see them and have dinner with them. If not, I’d get another coffee and see how far I can go.

EDIT: (9) Write the todo list for the next day and open the document you want to work on the next morning. You don’t want to waste any brain cycles in the morning deciding what to work on.

Of course this is different for everyone, but matching your productivity to the task will make it a habit and much more effective.

Top comment by juanuys

I was in the same boat a few years ago. Been a web dev since 2002. A first step was to start freelancing/contracting (since 2013), so I had shorter engagements that I can move on from after a few months.

With the increased wages, I could afford to take summer holidays off and spend it with my family, and work on passion projects.

That's when I really got into game dev (2015). I made a bunch of small games, a lot of them throw-away/unpublished. I then started learning game design (from books, Coursera), but really thought I'd benefit from doing it with others, so right now I'm half-way through an indie dev masters [0] (Falmouth flexible).

The masters has been great, because it's self-directed learning, and I've built a great network of collaborators. I've just set up a Patreon this week, and will be slowly building up a sustainable indie dev living. (I'm already down to 4 days a week on my usual career.)

I've read so many stories of folks saving up a year or two's runway, only for it to not work out in the end, so I'm trying to be as prepared as possible. I'm learning as much as possible right now about finding repeatable success as a game dev.

I'm 42 this year, and not the youngest in the cohort, but surprisingly also not the oldest. (Got a couple 50+, and a few other 40+).

This is just my story. I sincerely hope you find something that you can fall in love with again. Good luck!

0. https://www.falmouth.ac.uk/study/online/postgraduate/indie-g...