Show HN: CommitAsync – $100K+ dev jobs 100% remote only
commitasync.com
commitasync.com
Arguably a $100K+ is what someone in the US would assume to be the case in the first place, but still it hits the nail on the head being *exactly* what many people outside the US (and maybe a few more countries with similarly high salaries), including me, would want.
i.e, from the perspective of someone outside US: 'Now that remote work has put all potential candidates in the pool, let's also put all the salaries in the pool'.
The website is simple and has sensible search filters, especially for the location, e.g. "Worldwide".
As another person mentioned, "vetted" can feel a bit undermined by postings like this one
https://www.commitasync.com/jobs/mid-software-engineerjava-i...
and this one
https://www.commitasync.com/jobs/senior-software-engineer-ob...
where actual salaries are much lower than the stated ones, but I have a feeling that whoever posted the job assumed PLN (Polish) and SEK (Swedish) currencies, respectively, which would seem reasonable.
Given that you've just launched, if these details are polished out in the near future, I'm sure we could all forgive a little "fake it 'till you make it" being thrown in the mix.
All in all, well done.
I've created it from a pain point I've experienced myself: it's hard to find $100K+ fully remote dev positions when you're outside the US.
For the point with the actual salaries being much lower than the stated ones, you're right it's because the job assumed local currencies -> I've put it down on my todo list to fix it!
Again, thanks for taking the time to share your feedback I really appreciate it.
While I can get using the EU flag, which is also the Council of Europe flag, for Europe, it really makes it unclear whether the jobs listed as "Europe" are EU only (or maybe EEA?), all of Europe, and which countries are included... It'd be good to make that clearer. Somehow. Europe is difficult.
E.g. one job marked as Europe lists UK as a location they have staff, while another lists EU specifically in location.
Also: Currencies matter. While I'd happily work for a US (or EU) company, and have before, my salary expectations would be much higher if the salary is *actually denominated in USD (which I have done once), because of the currency risk I'd incur... As a shortcut while launching it's fine, but if you're going to grow this outside the US you'll need for people to be able to know what currencies are "on offer".
For similar reasons, you'd also want it to be clear to people which country they'd be employed "from". A lot of places it'll complicate things if the entity you're hired by does not have a local company for you to formally sign an employment contract with, so I'd want to know. E.g. if I'm going to sign up with a US company (I'm available; see profile) I'd generally just as well contract via my limited company instead as being hired by one gives me few benefits over just contracting, while conversely being hired by a UK company gives me (eventually, anyway) assorted legal protections that make it preferable to a contract unless the contract rate is much higher than the salary.
I understand your frustration about the Europe flag, it can be a bit vague. I'll improve it as I've written it down too.
I'll have to think about the country of employment. I'm going to look if that's easy to implement, maybe for some jobs that will be harder but in any case, if I can provide this information that can be useful.
Also the currency glitch should be fixed now for new jobs, starting tomorrow.
It's a rough pill to swallow, but the rise of remote work is inevitably going to pull things down to a "national median" somewhere in this area. There will always be the coastal tech hubs where top tier folks can go to make real salaries. But for the most part we (in the US) are going to be lumped together and forced to accept something in the range of 2x the average income instead of 3-4x, similar to how things are in Europe. Particularly when you consider the amount of LatAm/Canadian nearshoring going on right now, and the absolute glut of junior/midlevel devs on the market.
There are _plenty_ of jobs in the range I'm looking for. This site doesn't allow me to find them. That's all.
Do they?
Also there aren't that many jobs to sort through, they could just look through all of them.
This is from the OP / site author.
Seems they appreciated the feedback.
In practice there are constraints that limit job markets geographically, e.g. time zone differences or legal obstacles to hire foreigners.
Remote has nothing to do with it.
Which is it?
There are lots of working and extremely skilled specialists that don’t bother to blog and do talks and self-promote that don’t have widespread name recognition that can and do still bill $200-500/hr.
The skills just aren’t there. I run interviews and struggle to find anyone, anywhere, that can actually program. English proficiency is also hard to come by. This wouldn’t be an issue in most of Canada, but I’ve yet to see a Canadian remote applicant.
It have made hireing so convuluted since it boils down to tabs versus spaces.
I'd rather argue that the methodology to hire is flawed generally and dice rolls are probably better then most processes. Especially the riddle and leetcode ones.
It's not "tabs vs spaces"; there are just many people employed as software engineers who 1) cannot translate an English (or other human language) description into working code, and 2) have no idea how software actually works. They know enough about the mechanics of programming to copy and paste code from Stackoverflow/ChatGPT and use git, but if they encounter a novel problem they are totally lost. Hiring them is like hiring someone who only knows how to drive to be your car mechanic.
If you've been in the industry for 5+ years, think hard and I'm sure you can at least think of one example of a coworker you've had that fits this description.
If it is this one, encountering at least one example of a coworker over 5+ years is pretty far away from the numbers implied. “ 199 out of 200 applicants for every programming job can't write code at all.” I am very skeptical of this.
Keep in mind your coworkers are the ones who passed the interview. How much hiring have you done? 199/200 of applicants not being able to code is probably an underestimate these days; now that it's so easy to apply for jobs with one click on LinkedIn, Indeed, etc. any job you post will get flooded with resumes from people who are completely unqualified and have literally never held a programming job or have any computer-related education. Can't blame people for optimism, I suppose?
If we jump to the next level of the funnel, to people who have passed an initial resume screen and are doing a phone or in-person interview, I estimate at least 60% of those candidates are still unqualified to hold a position as an actual software developer solving actual technical problems with code, in my personal experience.
What are you evaluating them on? Leetcode?
He comes dressed for it and with his own toolkit.
You seem to be testing for proficiency in slow NIH-tendencies basically, but since discomfort is a requirement, maybe that works for you and for them too.
But it's also then possible to make use of "one step up" by asking people for variations and seeing whether they can talk about tradeoffs (still at a very basic level, but still).
E.g. in a higher level language, if asked to reverse the order of the words you often get variations of split on space, reverse the resulting array, join. In which case you have an opening to ask them if they can do it lower level, in minimal space.
In which case, the "typical" solution becomes to reverse the string in place, then iterate and find the start of each word, and reverse that in place. Both reverse operations need at most two pointers and a temporary, and can be done with the same function if you take in a start and end pointer.
If you have that helper to reverse a given character range in place, reversing the order of the characters within each word without reversing the word order is just the same thing without reversing the whole string first.
One google interviewers ask me a question that starts with “implement google search” and ends with my implementing splitting a paragraph. Of course I failed the interview, but I have to think he has failed me way before we get to write any code.
I'd say about half of the candidates that interview are unfamiliar with the String#substring equivalent of their language. This is for a senior position, and everyone has multiple years of experience on their resume. It's... interesting.
Many people would say those candidates should be failed anyway due to X, Y, Z reasons. But I want to highlight that in those cases, the interviewers should realize they are assessing something else, and not programming skill.
I estimate that 80% of candidates could not accomplish this in an hour. 50% of them could not even get out of the gate.
array data = (array(int))random_string(100)/10;
int x = random(10); int y = random(10);
int seek = random(255);
int findgrid(array data, int x, int y, int seek){
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
write("%d:%d\n", data[x+i][y+j], data[x+i][y+j]==seek);
if(data[x+i][y+j]==seek){ return true; }
}
}
}
took me 15 minutes, and only because i am tired and took a break in between.
i can't imagine anyone calling themselves programmer not being able to do that.80%? hard to believe it's that bad.
grid = [
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
]
foo = function(x,y,num){
if (grid[x][y] == num) return true;
if (grid[x+1] && grid[x+1][y] == num) return true;
if (grid[x+2] && grid[x+2][y] == num) return true;
if (grid[y+1]){
if (grid[x][y + 1] == num) return true;
if (grid[x+1] && grid[x+1][y+1] == num) return true;
if (grid[x+2] && grid[x+2][y+1] == num) return true;
}
if (grid[y+2]){
if (grid[x][y+2] == num) return true;
if (grid[x+1] && grid[x+1][y+2] == num) return true;
if (grid[x+2] && grid[x+2][y+2] == num) return true;
}
return false;
}
alert(foo(1,2,3));
alert(foo(1,2,30));
humm worked first try, probably something wrong with it..https://jsfiddle.net/ycx159kg/
13 min later...
round2 = function(x,y,num){
return grid.slice(x,x+3).map(g=>g.slice(y,y+3)).flat().includes(num);
}I'm intrigued by the slice/map solution. It would have been perfectly acceptable if you could explain what the functions did. In fact, it would have led to very probing conversations: my usual interview partner and me had a deep interest in elegant solutions.
grid.slice(x,x+3)
Turns the 10x10 array into a 3x10 discarding the rows before and after the target rows.If the second value in slice is larger than the length it slices to the end. It could be a 2x10 or 1x10 but lets pretend it is 3.
.map(g=>g.slice(y,y+3))
Does the same with each row making it into a 3x3 (or 2x3 or 1x1 etc) .flat()
Turns the 3x3 into a flat array of up to 9 values. .includes(num)
tests if the flat sliced array include num.Also you seem to be bounds checking for 0s, but to do that in the first dimension you need null pointers to pad your row selection and a second set of 0s at the end of your rows.
It's interesting that both you and the person you replied to used arrays of arrays which is the very first mistake everyone makes in graphics programming when trying to make a 2D array or and image.
A much better way is to have a single contiguous array and use buf[y*width + x] to lookup into the one dimension buffer.
No, not at all. There are cache misses and simplicity, but think about when an 1k image is on the heap. You have to allocate a buffer of pointers for each row then you have do a thousand individual heap allocations to get all your rows.
Now think about an image with rgba channels. Technically this is a 3d image with one short dimension. Are you going to allocate a buffer of a thousand pointers, then off of each one allocate a buffer of a thousand more pointers so that you can ultimately do another 1 million heap allocations, all 16 bytes for each rgba pixel?
There is no upside and all downsides, which is why it is never ultimately done this way, though it is an almost universal mistake when people do multi-dimensional arrays for the first time.
Correct, it should be [y][x] indeed. I would have spotted that had I bothered to.
> Also you seem to be bounds checking for 0s, but to do that in the first dimension you need null pointers to pad your row selection and a second set of 0s at the end of your rows.
Not sure which is the first dimension but for an array of 10 if(arr[100]) returns false. Anything behind the && is ignored.
Looking at this again the really funny part is that it doesn't work if num = 0 since if(arr[100]) returns false if there is a zero at position 100.
> It's interesting that both you and the person you replied to used arrays of arrays which is the very first mistake everyone makes...
I copy that part from their solution but probably would have myself. I've been found out not being a graphics programmer. The experiment was a success.
Of course I've made all these mistakes to test if anyone was paying attention. (I always say that)
This is taking the first pointer and offsetting it by the length of 100 pointers. There are only 10 pointers in the array so it is going into other data.
If your pointers are 64 bit and your numbers are 32 bit, even if that is referencing the memory mapped data of the sub arrays it is going twice as far as the end of the array and returning 0 purely by chance of some other memory you're dealing with by accident.
A better way would be to keep things simple and bounds check that x is less than width and y is less than height while using the single buffer method.
The point here isn't to be too harsh with criticism, it's just that it's easy to see something as more trivial than it really is.
function foo(x,y,num){
for(i=y; i<y+3 && i<10; i++){
for(w=x; w<x+3 && w<10; w++){
if(grid[i*10+w] == num) return true
}
}
return false;
}
https://jsfiddle.net/gaby_de_wilde/ycx159kg/1/but that is an additional condition that was not in the original task. there was no mention of image programming.
since we are discussing interview examples here, leaving out such a detail and then calling people out on an error caused only by missing that would be considered deeply unfair towards the candidate.
my point is, that our choice in the solution is not interesting at all because it was part of the task. you are proposing a slightly different task, which is of course interesting too.
I'm not proposing a different task, I'm pointing out that you both thought it was trivial and both ended up doing arrays of arrays then having something that wouldn't work because of the complexities of that. You're right that someone could solve the problem with arrays of arrays, but no one did.
I think the problem is mostly trivial too, but before doing graphics programming and solving almost identical problems multiple times, I would have made most of the same mistakes.
The point is that the vast majority of candidates, including some with Master's degrees in CS, could not write even a pseudocode solution to this problem. It got so bad that I started doing a verbal fizzbuzz test during the phone screen so we didn't waste so much time.
You might say it's pseudo code but one of the original comments was talking about the low numbers of people who could actually get something to compile and solve a problem.
you are right about x and y. i was really tired :o
but it runs (at least as long as there is no overflow). here is a sample output:
> findgrid(data, y, x, seek); // there, fixed the x/y problem ;-)
160:0
165:0
65:0
174:0
23:0
253:0
229:0
130:1
(1) Result: 1
oh, and since we are talking about interview experiences. at one job during the interview i was allowed to provide coding solutions in this language, even though the job was about python.As per the question I've ignored error conditions, but using the simple expedient in this case of positioning the 3x3's top left within the first 8x8 not the full 10x10.
Example output is underneath.
// Make and fill the grid.
var r = new Random();
var grid = new int[10, 10];
for (var y = 0; y < 10; y++)
for (var x = 0; x < 10; x++)
grid[x, y] = r.Next(10);
// Draw the grid for reference.
Console.WriteLine();
Console.WriteLine(" 0 1 2 3 4 5 6 7 8 9");
Console.WriteLine();
for (var y = 0; y < 10; y++)
{
Console.Write($"{y} ");
for (var x = 0; x < 10; x++)
Console.Write(grid[x, y] + " ");
Console.WriteLine();
}
Console.WriteLine();
// Random starting point and target.
var tlx = r.Next(8);
var tly = r.Next(8);
var target = r.Next(10);
// Extract the 3x3 sub-grid and "[ ]" any matches.
Console.WriteLine($"Looking for {target} in 3x3 grid at {tlx},{tly}");
Console.WriteLine();
for (var dy = 0; dy < 3; dy++)
{
for (var dx = 0; dx < 3; dx++)
{
var ax = tlx + dx;
var ay = tly + dy;
var v = grid[ax, ay];
if (v == target) Console.Write($"[{v}]");
else Console.Write($" {v} ");
}
Console.WriteLine();
}
Console.WriteLine();
Example output: 0 1 2 3 4 5 6 7 8 9
0 1 2 5 4 1 8 0 2 8 5
1 4 2 2 5 8 4 4 0 4 8
2 7 1 8 2 5 6 3 6 3 6
3 8 7 3 2 4 6 5 9 6 2
4 6 3 4 2 9 7 4 7 6 1
5 1 4 2 3 8 3 2 4 3 3
6 0 6 6 5 1 4 7 3 4 9
7 2 0 6 9 9 9 3 9 1 7
8 1 6 5 8 3 8 9 8 3 4
9 0 8 7 9 5 4 0 7 0 3
Looking for 5 in 3x3 grid at 2,6
6 [5] 1
6 9 9
[5] 8 3
As others have said elsewhere this could use a one-dimensional array but as we know upfront what the constraints are I've gone for the clarity of the two-dimensional. This is said to be the very first mistake everyone makes in graphics programming - but nothing in the question says it is for use in graphics, so being an interview question I went for clarity.Similarly there's the possible use of a ternary, less memory allocation, and tighter code, but again in this situation I'd go for readability.
There may also be edge cases not covered; this was a 10 minute hack (as it looked fun) and isn't exhaustively tested.
Remote may bring down wages for workers located in HCOL, but it’s been great for me as I don’t have the ability to relocate.
And yet... I run in to many who still get hired. I've got some colleagues working at shops where people struggling with the concept of a front-end UI that calls a paginated API endpoint. Get page 1, then get page 2 when you need it, etc. They keep filing 'bugs' and someone just bumps up the 'max per page' from 50->80->100->120, etc. The team lead stopped allowing those PRs to go through, and others complained loudly enough that the PR blocking is overridden. Because... "pagination is hard". But these people are still employed. The thought is the team lead is being 'unreasonable' by 'demanding' pagination.
I regularly hear horror stories like this, and wonder "how do people like this get hired?" and also "why can so many of my skilled colleagues not get hired?" The gatekeeping and inability to evaluate skills, and perhaps a reticence to hire above your own skill level... all of these seem to be creating more stressors on an already bad job market.
It is not just about the absolute scarcity of resource, it is about the ratio between bad and good. Needle in a haystack problem.
Indeed it is and always will be. But the issue is that companies don't need good devs. They need "make the thing work" devs. And if they can make the thing work for long enough to generate revenue, it's all that matters. Driving customer value down while at the same time depressing wages, and telling both parties to just deal with it. It's become the standard operating model for all large companies now.
Almost no one passes.
Would you like to give me a programming interview?
Engineers are not really commodities. The right engineer can really push your business forward and become a powerful asset. The wrong one can set you back years while your competitors surpass you. As long as there’s companies out there who want the best, the best will command higher salaries.
If you manage to hire a great engineer for a cheap price, inevitably they will have no loyalty and leave your company for a higher offer. Thus losing you money in the long term and harming your business. A remote worker can do this easily.
If you want cheap, the unethical thing to do is hire local talent that doesn’t enjoy remote work and can’t move easily. You entrap them into the job and pay them less.
Which is to say, I think there is a non linear effect to product quality provided by engineers who build the exact right thing and build it well. (For exact right thing, to illustrate, there are 1000s of requirements in a software system, perhaps more. Meanwhile there might be 100s of JIRA items. Meaning, there is a magnitude order gap between specified requirements and the rest. All requirements need to be coded up whether you know about them or not. The pro engineer will bridge this gap, the mediocre engineer will NPE instead)
If I'm hiring directly for my team, I might even take more time on each resume.
This is what the GP is lamenting.
At 500 minutes of time, this is a solid day of non stop resume reading.
I have applied to numerous companies and get what look like mostly automatic rejections despite many years of experience, shipping products, research, etc. I also have experienced friends who say hiring is very slow and cold right now, it's not just me. Do you use any sort of automation?
Just a caveat regarding Latitude AI, one of the listed companies.
When I applied about 12 months ago, I learned they wouldn't hire residents of some U.S. states.
I'm assuming it's because there weren't enough potential employees to justify the cost of handling that state's employer responsibilities.
One workaround is to use a “PEO”, or “co-employment” provider, to be the employer of record and handle HR, insurance, payroll, etc. Though it can feel like a rather weird arrangement when employees don’t technically work for the company they think they do.
https://en.wikipedia.org/wiki/Compensation_transparency
>California, Connecticut, Hawaii, Illinois, Maryland, New York, Nevada, Rhode Island, and Washington have passed compensation transparency laws as of 2023. Some US cities also have compensation transparency laws, including New York City.
1. Debounce!
2. Use WebSockets to minimize unnecessary round trips
3. Cache previous results and use them when the input is a superstring of a previous input (e.g. results for "Android mobile dev" will always be a subset of the results for "mobile dev")
Hard to trust the vetting with inaccuracies of this scale.
I'm not making a big deal on 94k vs 100k, but the two points combined makes me (a casual observer) a bit confused on what is being vetted here.
"no estimates" because in a lot of job boards, when they don't have the salaries for the job posts, they estimate it based on the median salary of the position. I only advertise jobs with salaries, I don't guess them. Do you have a better wording to illustrate this aspect of "no estimates"?
Also, would you prefer having less jobs shown, but with a minimum $100k salary if it's a range?
Regarding the vetted aspect, it's related to the fact some companies aren't actively recruiting (you can read more in the article linked in the About page of the website).
> Also, would you prefer having less jobs shown, but with a minimum $100k salary if it's a range?
I don't think the range matters to be honest, but i do think "breaking" the range erodes confidence and/or increases confusion on the user side. Ie the page explicitly told me no posts less than 100k (iirc), but then showed some less than 100k - so confusion/etc.
> Regarding the vetted aspect, it's related to the fact some companies aren't actively recruiting (you can read more in the article linked in the About page of the website).
Sounds good! If i'm indicative of the "average user" you may want to make that aspect more prominent? But i could also be well under your target user, in which case ignore my ignorance :D
Cool site! I hope to use it one day when i'm looking!
As I work on this as a new dad after my full-time job, some little bugs are bound to happen while I improve it one commit at a time. Rest assured, every feedback is taken into account.
Can anyone tell me whether they think $100k+ salaries are more or less common over there compared to 2021? My first job out of college with Epic was around $90k at the finish, but I was coming in fresh from electrical engineering, I wasn't a CS major. I plan to head back with the Georgia Tech master's in comp sci, and I'm pretty sure I could crush any coding interviews that got thrown my way even now given a few weeks to revisit my old Neetcode 150 Anki card deck. The only thing which might hold me back is the languages I like on the job the most are painfully boring (Python, Javascript, good old fashioned SQL, Bash to shore up the organized-electron supply chain).
For the other smaller but still public companies you need to be staff+ to hit that, and even then no guarantees
Stuff happens, humans make mistakes, can only be fully async so much IMO.
I'm not hiring anyone or anything like that, just curious.
It's all a theoretical thought. But I feel like pre-pandemic a lot of companies were wishy-washy with remote: yeah, we do it, some more than others, whatever works... post-pandemic a lot of workplaces have codified in vs out of office days, that kind of thing.
Async feels similar. A lot of "hey yeah, it's all cool, as long as you get the work done" sentiments, but then daily video standups at 10am, team meetings multiple times per week, etc. I'm just curious what a codified version of that would look like.
The number of hours goes both ways, it also protects you from having to work 100 hours every week.
I'll hire you to work to just get the job done, with no actual hours required in the contract, but you better believe you'll get 3 weeks worth of work to do in a week.
"You want a job, you go to an office. That's how it works"
Canadian citizens can work for a US based company under a TN visa. You would still need a work visa for the country you work "in" - and the TN would be applicable.
Non-citizen Canadian residents are not eligible for a TN visa and would be restricted to only jobs within Canada.
> To legally work for a U.S. company, a Canadian citizen must obtain a valid work visa. This is known as a TN Visa.
And https://www.uscisguide.com/visa/nonimmigrant-visas/work/u-s-...
> 13. Are there any special considerations for remote workers with a U.S. work visa?
> Yes, remote workers with a U.S. work visa must comply with the same rules and regulations as their colleagues in the U.S. This includes such things as tax, insurance, and labor laws. Additionally, remote workers must ensure they understand the regulations of the country in which they are based, as they may vary from those of the U.S. Furthermore, remote workers should be aware that they may be subject to different immigration rules and regulations than their colleagues who are physically located in the U.S. Finally, remote workers should ensure that they have a valid work visa in order to remain compliant with U.S. immigration law.
I don't have opinions in terms of the product itself since I am not the target market, looks good in terms of design, I like that!
Best of luck!
That's like $60,000 today.
However, we have 2 options there: a. raise the minimum to $150K but reduce jobs for people outside of the US to basically just a few if any b. keep it at $100K (for now), and let the person adjust with salary ranges filters
Well that sounds great position.
Salary is a little low though, hopefully we could negotiate!
So you want to hire top quality developers for cheap that are the US Central time zone? Well, so does everyone else, and they got there before you did.
This should be the golden standard now.
Yo our startup is awesome, you get some equity like thing that is worth a ton!
Yeah about that ...
Just because it's non trivial, I don't think the answer is to give up. Showing a breakdown is perfectly acceptable.
Levels.fyi is the only semi-accurate source for TC that I’ve found, at least it’s pretty accurate for the public tech company I work for.
- sportstechjobs.com
- levels.fyi
- Khosla Ventures Job Board
- SpaceTalent Job Board
- Accel Job Board
- CrackedDevs.com
...
And no, I don't scrape them.
You can have jobs with apply link URLs containing utm parameters in it. Even if you didn't scrape the website linked.
This will be fixed, though.
One request - please could you add "Scala" as a tech tag. I noticed at least one of your listed roles is for a Scala developer, but the tag is "Java"
That's a very cool idea to have these filters, that'll help other engineers who want a better work-life balance a lot!
I'll have to think on how to approach this.
There are already hundreds of websites, boards and aggregators that could be improved with a single input field