These are very good. I take phone-free walks around the neighborhood, to the store, downtown for a festival. It feels weird at first, then it's nice.
I took an internet-free vacation last spring, and it was lovely.
While planning the trip, I made sure my old TomTom's built-in maps seemed accurate to what I was seeing online; there wasn't a lot of road-building activity there in the last decade or two. Then I turned off my phone and locked it in the glovebox, there in case of emergency.
Then I took a deep breath, started the car, and headed north.
It was awesome just knowing there was no way a notification could ding, nobody could call me, no news headline could pop up and harsh my mellow. Even if those things didn't actually happen constantly, simply existing in a state where they could was stressful, apparently, and turning the damn thing off was remarkably cathartic.
Just one more YAML bro I swear trust me bro just one more meta level will solve everything just one more yaml please I promise you it's not bad just write yaml it's simple and clean just some more yaml man just one more yaml file you will certainly not regret it just add one more yaml
(Congratulations on the launch, looks interesting!)
Unsexy tech business making roughly $6-7k/mo. I partnered with a local janitorial company that targets industrial clients with recurring nightly cleaning needs and I make roughly 7% of gross revenue as a recurring weekly payment as long as the client stays on w/o much work. I help do some client support, SEO, and pay for things like Apollo.AI to reach out to customers but other than that it is pretty hands off. I feel very fortunate.
No iOS version as the other comment mentioned, but if you want to contribute, try Every Door ( https://every-door.app/ ) for now.
It doesn't have points and badges like Street Complete, but you can easily add/update/fix amenities, update addresses, add info about buildings, and fill in the same data using the "micromapping mode". I started with Street Complete, but now use this for most things.
>The Valid method takes a context (which is optional but has been useful for me in the past) and returns a map. If there is a problem with a field, its name is used as the key, and a human-readable explanation of the issue is set as the value.
I used to do this, but ever since reading Lexi Lambda's "Parse, Don't Validate," [0] I've found validators to be much more error-prone than leveraging Go's built-in type checker.
For example, imagine you wanted to defend against the user picking an illegal username. Like you want to make sure the user can't ever specify a username with angle brackets in it.
With the Validator approach, you have to remember to call the validator on 100% of code paths where the username value comes from an untrusted source.
Instead of using a validator, you can do this:
type Username struct {
value string
}
func NewUsername(username string) (Username, error) {
// Validate the username adheres to our schema.
...
return Username{username}
}
That guarantees that you can never forget to validate the username through any codepath. If you have a Username object, you know that it was validated because there was no other way to create the object.
For SAAS companies that do B2B it's important to remember two arms of the company:
1. Sales -> You can hire a lot of sales people if they're generating enough business to cover their own salaries
2. Customer Support -> Big enterprise contracts generally have support written into them. Thus, for every enterprise customer Docusign may need anywhere from 0.1 -> 3 (or more) FTEs. If you price this right it's always worth it to keep growing the org this way.
Docusign has a lot of opportunities to upsell customers on legal services they provide.
You should also consider the scaling cost of internal support. For every 10 FTEs, add a manager. Also add on HR, accounting, janitorial, etc. Easilly 20% of the company might be these sorts of internal support roles.
If you like the idea behind this advice, have a look at The Job Seeker’s Script by Judith Humphrey.
If you want to read it before buying (or borrowing) it, have a look at some of the articles on fastcompany.com that excerpt parts of the book, particularly the hiring/career articles: https://www.fastcompany.com/user/judith-humphrey
Agreed with most of this but I’m skeptical of the rsc.io/script dsl approach. I’ll try it, though, because Russ is often right.
shameless advert: do you wish testify was implemented with generics and go-cmp, and had a more understandable surface area? Check out my small library, testy https://github.com/peterldowns/testy
shameless advert: do you want to write tests against your postgres database, but each new test adds seconds to your test suite? Check out pgtestdb, the marginal cost of each test is measured in tens of milliseconds, and each test gets a unique and isolated postgres instance — with all your migrations applied. https://github.com/peterldowns/pgtestdb
I've worked in many analytics projects across a number of companies as a consultant. I'm a big believer in "decision support systems". Find out what decisions your customers need to make, repeatedly, to their job. Quantify the heuristics and visualize that information (and that information only) in an easy to consume manner. More often than not that's an email or PDF. Another advantage is that by supporting the business users they feel less threatened by the changes or technology.
I think "self-serve" analytics is silly, the idea that you put all of the data in front of people and they'll derive "insights". That's not how normal people or data work. We just had a discussion on HN the other day about Facebook's Prophet, and its pitfalls. Meanwhile we expect Joe in sales to be able to identify useful trends on a chart he made. Every company needs to forecast, regardless of their sophistication. That stuff needs to be defined by the right people and given to the users.
Of note, we do run our own javascript client on the pages. Our users can opt into hitting our backend API instead of running JS code, but many just use our client directly.
We currently serve the ads on our own domain. We could implement the ability for our publishers to proxy the ad views to our domain (this is generally called "ad cloaking"), but it hasn't felt like the right thing to do.
We are also on the Acceptable Ads non-tracking list, so our domains are unblocked for people who choose that in their ad blocker. If we use a publishers domain, they will be unblocked for some period of time, but then their domain gets added to the ad blockers, and we lose this Acceptable Ads traffic.
It took me 20 years to have an important realization about version controlled dotfiles: what I wanted to do was manage a set of sensible, personalized, non-standard behaviours for each tool I used, and have a way of distributing those across systems.
What I didn’t need at all, after all, was anything that installed different things on different hosts or classes of hosts.
Luckily, every tool I want to configure has a config file option to include another file, so I have a working copy of my version controlled defaults here:
~/.config/defaults
…and a one time installation script that makes various tool’s config files look like this:
# begin defaults
source ~/.config/defaults/tool.conf
# end defaults
local specific config here
I am quite happy managing the local bits by editing files on local machines. All my configuration stuff splits into either “used everywhere” or “used just on this one host”, so that makes it easier.
As soon as I figured this out I had to pinch myself as to why it had taken so long to come up with this idea.
I used to rip the audio of my favourite movies and listen to them like audiobooks. Because I was usally familiar with the visual parts, I could enjoy the dialogue and the music in a different way.
I was #5 at Etsy back in the early days. Three co-founders (who actually bought the site from some other dude, they didn't create Etsy), Jared Tarbell, and then me. (There were some other folks, support staff who technically worked for the investors IIRC)
It's pretty much my only "impressive" job of my career, in terms of name dropping at parties. But in terms of technology and business it was a madhouse. I remember thinking "Nothing like a business was happening at Esty." when they fired me. (I was going to quit, but my girlfriend at the time convinced me not to, and then they fired me a week or two later anyway. Long story.)
I always figured someone would eventually show up and want to interview me about it, but that's never happened so far.
I've forgotten most of the wild stuff.
All the business logic was in stored procedures in the DB so as you can imagine it was always on fire. Upgrading didn't help because our growth rate was ridiculous.
The frontend PHP guy was a newbie to programming. He barely knew what he was doing but he could nail those beautiful UX designs pixel-perfect. The guy's probably a millionaire now.
The backend sysadmin, DBA dude was a total Master-Blaster. If he didn't like it he would literally throw a fit and scream at the CEO and shut things down until he got his way. He used to lie to the CEO all the time if he didn't want to implement something he'd just say "it's impossible".
They built a skateboard half-pipe in the office even though none of us skated.
It was pretty nuts.
I found out later on that they hired me because my resume was the first one on craigslist that had Python on it. Then during the interview they found out I used Devorak layout on my laptop and that's why they hired me.
The "middle layer" they had me write was pretty much useless. It basically passed requests from the webservers to the DB. Over 80% of the API was empty methods, literally just a docstring, with all the processing happening in a decorator.
I implemented a cache in there (early use of Memcache. Glyph hisself wrote a Twisted interface to it in front of mine eyes! They were like "We want to hire a networking consultant. What about this guy?" Me: "You want to hire Glyph and I get to hang out with him and learn from him!? Yes. Yes, please." So that was nice.)
The thing is they didn't turn on the cache. It just sat there. The investors pushed this Sid person onto us to try to get some semblance of adult supervision. ... I've told this story before, Sid wanted some information on long-running requests, and I had to switch it (the cache) on in prod myself to show them that the required logging was already there.
There there was the other Sid who wanted to rewrite everything in Java. (First Sid wanted to rewrite in C++.) "Project Phoenix" he called it, that didn't go over well.
(Recall that the problem wasn't the implementation language of the server code, it was that all of the business logic was in stored procedures in the DB so rewriting the server code was never going to help.)
I’m going to let you in on a little secret. I spent almost a decade in public sector digitalisation in Denmark, and those politicians who look like they don’t know what they are doing in the media, well, they absolutely know what they are doing. Not only that, but they get advice from a bureaucracy full of well educated, really smart people, who also know what they are doing and have known so for decades. One of the things that struck me going in was just how much people know exactly what they are doing, and, to my own discredit, just how engaged and well meaning those people are. What eventually led me to leave the public sector is that there is a very big difference between knowing what you’re doing and doing the “smart/right” thing, especially when you’re held accountable by an entire country, if not the world.
I’ve seen the same sort of thing in the private sector. Once you zoom out enough to understand decisions from the perspective they are being taken from, they very often make perfect sense. That doesn’t mean those very same decisions aren’t a load of bollocks from a lot of perspectives, but they are rarely just “fake it till you make it” sort of deals.
I think this author suffers from childhood delusion in that the author still thinks adults are supposed to have the answers for everything, which isn’t true. There is a lot to be said about figuring things out a long the way, but it’s not like people don’t know what they are doing, because we learn, we adapt and we very often plan ahead. I mean, the author even sort of contradicts the title or the article in the discussion on whether to do more SEO, YouTube, and/or, networking because that is already knowing a lot, just not everything.
A more accurate way to view the world would be that most people don’t know exactly how they are going to execute their long term plans, but almost every successful adult I have ever met did have both a plan and a genuinely good idea on how to execute it. From everything to their careers to raising their children, and I think it’s very easy to see when someone actually doesn’t know, because often they are either drowning, looking for help or both, or, alternatively never even beginning on the thing they want.
I firmly believe that there is only one production-quality makefile that has ever been written from scratch. Every other makefile has been copied from an earlier makefile, dating back to the one Ur-makefile, and modified to suit the author's purpose.
When I launched my former bitcoin casino in 2011 (it's gone, but it was a casino where all games, even roulette tables were multiplayer, on a platform built from scratch starting in '08), I handled all web requests through a server in Costa Rica that cost about $6/mo. Where I had a shell corporation for $250/year. Once the front end -- the bullet containing the entire casino code, about 250kb -- loaded, from Costa Rica, and once a user logged in, they were socketed to a server that handled the gaming action in the Isle of Man. Graphics and sounds were still sent from the Costa Rica server. I didn't have a gaming license in the IoM, though - that was around $400k to acquire legally. So I found a former IoM MP who was a lawyer, who wrote a letter to the IoM gov't stating that we didn't perform random calculations on their server, thus weren't a gambling site under IoM law. Technically that meant that no dice roll or card shuffle leading to a gambling win or loss took place on that server. So the IoM server handled the socketed user interactions, chat, hand rotation and tournament stuff. Also the bitcoin daemon and deposits/withdrawals. But to avoid casino licensing, I then set up a VPS in Switzerland that did only one thing: Return random numbers or shuffled decks of cards, with its own RNG. It was a quick backend cUrl call that would return a fresh deck or a dice roll, for any given random interaction on the casino servers. The IoM server would call the Swiss server every time a hand was dealt or a wheel was spun; the user was still looking at a site served from a cheap web host in Costa Rica. And thus... yeah, I guess I handled millions of requests a day over a $6 webserver, if you want to count it that way.
I'm the founder of a company that is ~250 people, remote first, and still fully remote. We do have an office in SF, but ~10% of our employees are present, almost no full teams are centralized, and all our processes revolve around remote work. Important to note that we're a US-founded company (this comes along later).
I'm going to use this comment as a way to talk about remote hiring generally, rather than respond directly to your comments. I want to help others understand some of the challenges it has been being one of the larger (relatively) fully distributed companies.
I think there is a common misconception that the world is mostly flat and that our company can hire from anywhere. I am commonly criticized when tweeting job postings (almost always remote) when the countries we can hire from is limited to a select few. "Not real remote" "first world remote only" "remote != 8 countries" etc. are common criticisms.
Disclaimer for the remainder: I am not a lawyer and my exact details because of that may be wrong. Please consult your own legal team.
When hiring remote, there are a few things to keep in mind:
1.) You have to adhere to employment laws within the country you're hiring from. Employment laws vary widely between countries and getting them wrong can be very expensive. For example: vacation time will vary, holidays will vary, the ability to let someone go will vary, what you can/cannot expect from an employee varies. In one country, emailing an employee outside of work hours is legally considered harassment; when working with multiple timezones that's a challenge because "in work hours" for one country may be "out of work hours" for another country.
2.) To employ someone full time, many countries require you to have a legally entity within that country. Establishing a legal entity takes a lot of time and a lot of money.
In the past 12 months, we've had at least one member (more now) on our HR/finance teams establishing legal entities _full time_. I've had my signature on at least 8 incorporation documents in the past 6 months. By the way, most incorporation documents require a "wet" signature so if you're remote like we are, be prepared to be FedExing a lot of sensitive legal documents around.
Beyond just paperwork, there are often requirements to establish a legal entity: a real, physical, local address is one. In one country, we had to pay out of a local bank account in local currency (which has its own red tape), and this country also required we maintain a minimum balance to pay 3 months salary in the local account in local currency at all times. For a startup, that much cash "not working" can be problematic depending what stage you're at.
In one country we're establishing an entity in, the process just takes a LONG time. We've been responding to any inquiries and sending paperwork immediately and we're 8 months in and still probably 2 months away from completing the process. Meanwhile, we still can't legally hire there.
A lot of legal paperwork is understandable in the local language of where you're creating the entity. This means that you also have to pay lawyers fluent in that language to vet the paperwork. We employ full time lawyers, but primarily in English, so this requires us to go to expensive outside counsel.
Finally, this is all expensive. There are fees to creating entities but also recall that we have multiple full time employees that spend their entire day establishing legal entities. So we have our own full time salary costs plus filing costs plus legal costs.
3.) Hiring contractors DOES work around some issues, but has its own downsides. First, we can't offer options/stock to contractors and we'd like all our employees to benefit from this. Second, we often can extend the same full time benefits we want all our employees to share such as healthcare, 401K, etc. Put another way: we want all HashiCorp employees to be employees, we don't want to create second class citizens.
Legally, some countries have legal limits on the hours a contractor can work or length of time they can be contracted before they're considered an "employee" by default and regardless of what you SAY the relationship is, the country will consider it employment and points 1 and 2 above all take effect immediately.
So we certainly DO hire contractors but our point of view is that we intend to hire those people full time over time. We'll often hire contractors if we know that we'll have a legal entity established to hire them within X months, and we're up front with the new hire about this. We'll also pro-rate option/stock vesting for their contractor period when they are hired.
4.) We prioritize countries where we have the most interest. We get asked a lot "please hire in X" but if the number of times we've heard X is much lower than Y, then we'll prioritize Y first.
This creates somewhat of an imbalance, since more countries with a more established tech ecosystem generally have more qualified candidates and therefore get prioritized higher.
We WANT to hire from everywhere, but as a startup with constrained capital and timelines, we have to be pragmatic about choosing the locations where we'll probably be able to hire the most roles while we continue to expand our entities.
5.) We are also open to relocating employees into countries where we do have entities. We've done this multiple times, we pay a relocation fee, and its a great way to hire someone from a country where we can't [yet]. Also note they're "relocating" but are still working remote.
Of course, this is highly dependent on the individual and it is unfair of us to ask or force someone to do this if they have an established family, friend circle, and generally just a life in their existing country. So this only works some of the time!
6.) Despite building process around remote-first, we try to a keep a healthy timezone overlap in each of our teams (3 to 4 hours out of the working day is best). We find that teams that have a team member with a non-overlapping TZ struggle for multiple reasons. So, even though we can hire in many countries now, we'll restrict some job postings to certain countries so we can have that overlap.
EDIT, some additions:
7.) Each US state ALSO requires a legal entity in addition to adhering to state-local employment laws, taxes, and more. At this point HashiCorp has entities in ~30 US states.
Further, there is a tax consequence to the business outside of employment taxes. If you hire an employee in a state, you also now have to pay sales tax on revenue from there. You may argue for/against whether that makes sense, but for a startup this can be VERY expensive.
Our corporate tax obligation would be hundreds of thousands of dollars [less] if we didn't employ people in New York state. We've had to weigh this in cases because the tax obligation from hiring _one_ individual could suddenly be that you can't afford to hire _multiple_ other individuals.
Note we don't want to avoid taxes, that's not what we're doing. But startups are capital constrained and we have to determine long term how we continue to grow and hundreds of thousands of dollars can make a difference.
Finally, I want to note that we're 100% dedicated at HashiCorp to remaining fully remote. We WANT to hire from everywhere. We're establishing the entities and process to hire in new countries full time. 18 months ago we could only legally hire in 2 countries, today we can hire in 8. By the end of the year it should be at least 4 more. We'll continue from there.
I could write a LOT more about culture and process within the company. But this comment is already getting very long and I think I'll keep it to this. Maybe in the future I'll write more about "chat literacy", the importance of decision inclusion, things that definitely don't work, keeping people motivated/happy, managing people you can't physically see, the lack of body language for signaling, and a lot more.
I achieve this using https://brid.gy/ (or https://fed.brid.gy/ if you want your blog to appear as a first class member of the Fediverse), though in my case I just syndicate out to Twitter. I then collect the webmentions using https://webmention.io/.
The nice thing about this is I get a breadth of methods for receiving comments/reactions across multiple platforms, including anything that directly supports webmention (such as https://micro.blog/, where my posts are also syndicated), without having to do any of the platform-specific wiring myself.
This is a topic I'm somewhat obsessed over. I think it's a real problem these days, we are bombarded with things competing to make us into short-attention-spanned dopamine addicts and it screws up our lives badly. The Matthew Crawford books "The World Beyond Your Head: On Becoming an Individual in an Age of Distraction" and "Shopcraft as Soulcraft" are super interesting reads on this topic.
I'm biased, being a musician, but my experience and many of my colleagues is that musicians are often excellent coders, and I credit this to the fact that you need to master your attention to become a good musician. There is no other way than getting good at putting yourself alone in a room with no distractions and practicing in a focused manner. I remember when I hired a friend of mine (pro bass player) as a junior coder and it was so obvious watching him learn.
Personally my top tips for getting better at attention management would be:
- Take up an instrument or some other hobby involving regular, quiet, uninterrupted, solo deliberate practice. Do it daily. It becomes your rinse cycle.
- Adopt the pomorodoro or other similar technique of doing 20-30 minutes of completely focused, uninterrupted work at a time and then taking a real break for a few minutes. This is both how I work and practice.
- Read a lot, on paper.
- Run - IMHO way better than lifting for overall mental effects and mental focus
I took an internet-free vacation last spring, and it was lovely.
While planning the trip, I made sure my old TomTom's built-in maps seemed accurate to what I was seeing online; there wasn't a lot of road-building activity there in the last decade or two. Then I turned off my phone and locked it in the glovebox, there in case of emergency.
Then I took a deep breath, started the car, and headed north.
It was awesome just knowing there was no way a notification could ding, nobody could call me, no news headline could pop up and harsh my mellow. Even if those things didn't actually happen constantly, simply existing in a state where they could was stressful, apparently, and turning the damn thing off was remarkably cathartic.