I just want to say, what a dream. To have wealth and be able to create projects for the sake of going the projects. To not have to make the concessions of quality for profits.
There's an old Knuth quote:
> In fact what I would like to see is thousands of computer scientists let loose to do whatever they want. That's what really advances the field.
And I think we're seeing more and more that these projects made with love are successful. That without the hyper fixation on money we can build good projects that make big changes in a world.
In some sense I'm a bit envious of Mitchell but truthfully these types of things make me more question how we've constructed our society and economy. It shouldn't require one to start with wealth to be able to build things that have such an impact. What needs to be changed where we can live up to what Knuth proclaimed. I'm sure all of us have had experiences where were we given the time (and usually not much) we could make things so much better. But we make many sacrifices when we rush. Which leads to more good advice by Knuth
> If you optimize everything, you will always be unhappy.
At what point do we push back? We see that the people we really look up to did things so differently. Knuth himself expressed how detail obsessed he was, and such a claim is common among the grey breads.
Of course, things change, but are we creating a world with no wizards? Are we creating a world where we reward people for solving problems and making our lives easier? Or are we just maximizing some score of a pointless game?
I'd love to live in a world with a thousand more Mitchells, following their passions without the burden of needing to justify decisions to a board who has no interest in quality. How do we create that world?
Like you said, what a legend. But, how do we make more legends?
I think the posted title need to be improved and updated to include function or waveform generator instead of just More.
Perhaps because of that most of the comments here just focusing in the oscilloscope part.
As any who has dabbled with electronics know your typical workbench is normally consist of oscilloscope, logic analyzer, waveform generator, digital multi-meter and power supply normally 12V DC.
It seems to me this little $18 hybrid signals scope/generator can do almost all of these functions, and since they are integrated on the same device you don't need to synchronize them which is a big plus.
For old school HP/Agilent/Keysight electronics workbench discrete solutions can easily cost tens of thousands dollars, no kidding.
The modern version of this is the Digilent Discovery Pro 3000/4000/5000 series with price tags of several thousands dollars. They are described as the All-In-One High-Speed Mixed Signal Oscilloscope, Function Generator, Power Supply, and DMM. The cheaper version of this Digilent Discovery 1/2/3 series that cost around $400. But the latter is quite bandwidth and resources limited thus more comparable with the Flea-Scope [1].
[1] Digilent Analog Discovery 3 vs. Digilent Pro ADP2230 [video]:
Put your package names in requirements.txt and run `make update-frozen`. To reinstall everything from frozen state, `make clean frozen`. (And replace the first space with a tab; HN is stripping my tabs out)
I know Pythonistas like to use Python for everything, but there are other tools out there that will make your life much simpler.
I spent months scanning about 2500 family negatives and slides on an Epson Perfection V600 photo scanner.
While it's no FlexTight, I am happy with the results, especially because I had no plans to crop.
In hindsight, I wished I had used SilverFast rather than the Epson scanning software. SilverFast offers Multi-Exposure which does two scans for maximum dynamic range and then merges them into one.
Also, the Epson default film holders have no ability to flatten the film strips so I probably ended up with softer images in many cases. I believe there are 3rd party adapters that address this.
In my experience (11 years fully remote/distributed growing from 90 to 2000 employees) my first impression is it sounds like you’re doing too much synchronous. Async is so efficient.
My team’s current systems:
- Most deep discussions happen on blog posts including project status. We use (and built) https://wordpress.com/p2/. We don’t use email.
- Start of week everyone prompted to post what they did last week and what they plan to do this week. Also have a kinda fun ice breaker question that is easy (e.g avoid asking about favorites) and sometimes generates discussion. Last week was “Pick an olympic sport to represent your life.”
- Daily Slack prompt to give folks a place to report on yesterday/today. The most important thing is how people feel though. “Pick a red/yellow/green emoji for your status” and “What feels risky or a blocker?”. Create space for feelings.
- weekly team meeting is then about discussions and never about status. How do we solve X? How do we feel about Y?
- debugging and such does occur in Slack but longer discussions are on blog posts/comments and so can be long.
- I do 1-1s weekly for new folks and bi-weekly for longer term folks. Encourage sync 1-1s between the team also.
A lot of the prompts can be automated. I dont consider them mandatory, if you get them right then folks will be happy to do them because they feel the utility of them.
Iterating is very important though (which you are doing yay!), I’ve tried lots of different cadences/systems but the above is the core of what my team has used for 3-4 years now and I’m pretty happy with it. I still try to make sure we reconsider if we want to experiment with something new every few months. Partly why I wrote this long comment is I’m thinking if there is anything to tweak.
I have become increasingly convinced Python as a language is a "trap" for any use of notable scale, be the scale about number of developers, codebase size, or performance requirements. It's a great 0->1 language and great at simple glue, but eventually you hit a wall and have to keep investing larger and larger amounts of people or computing resources to get continued returns... all due to fundamental design decisions in the language from two decades ago that are quite difficult to fix.
Unless you go all-in on typing -- which is difficult today with any meaningfully sized existing codebase -- maintenance is largely a "hope manual testing and unit tests catch anything resembling type errors" which is a major challenge for, say, structural change to a code base like refactoring. Plus typing is still young, the tooling somewhat immature, and can lead to false senses of security if you aren't very careful and opt into the strictest modes. This makes large number of developers and codebase size a major stumbling block.
The interpreter performance and GIL are fundamental issues as well. Multiprocessing and hacks around the GIL are quite painful if you even glance at any native threading code (say in a C++ library) and even when you stick to pure Python, you have a debugging mess when anything goes wrong.
But if someone can improve performance, that'd be great, and has massive impact potential. It is incremental though and doesn't solve fundamental issues with the language. I'm also skeptical of the "5x" plan referenced in the blog, and very skeptical we can ever see meaningful removal of the GIL due to library and baked in design decisions in existing code. This means performance will fall further and further behind compiled languages.
(I write all of this having been a part of supporting Python at massive scale for over two decades, including at two FAANG companies who invest heavily in it. I've seen the curve and the pain it's caused, and would never use it for any code that needs to be performant or actively developed on the multi-month or year timescale).
I have dealt with this law in depth, from every angle, from its inception in 1986 and have a few observations to make about it:
1. The technical issue concerns the tax risk to an employer whether someone functioning as an independent contractor might be reclassified as an employee via an IRS audit that finds that the person is in fact functioning as an employee and not as someone who runs his own business. This risk exists for every business, large or small, that hires contractors. And the rules by which the outcome is determined are positively byzantine and pretty hostile to employers (and to contractors). They are set forth in IRS Revenue Ruling 87-41 and are summarized here (http://www.morebusiness.com/running_your_business/taxtalk/in...). In general, they state that if an employer has the right to control the means and manner by which someone performs his duties, as opposed to being concerned strictly with the result, then the person is functioning as an employee. They also set forth a list of 20 factors that auditors are to use to help to decide the issue, making this legal determination a very detailed facts-and-circumstances determination that can easily turn one way or the other depending on how an auditor chooses to apply a range of detailed factors. In the background, the law also has cases, precedents, administrative decisions and rulings, etc. that boggle the mind in their complexity concerning how the "rules" work. Moreover, the penalties associated with having a group of contractors reclassified as employees can be extreme. The employer must not only pay employment taxes (Social Security, etc.) for all such persons but also associated penalties and interest. The kicker in the case of a major audit covering several years is even worse because, if the employer can no longer locate the persons involved to get them to sign affidavits attesting that they in fact paid income tax on the income received, the employer also gets stuck having to pay the estimated income taxes for each such reclassified person. In practice, this can amount to a penalty that amounts to nearly half of the wage base involved in the dispute.
2. As one might imagine, this is a horrible landscape for companies to try to traverse without something that eliminates or sharply limits the above risks when they deal with contractors. And, to what should be nobody's surprise, such limits have historically existed to enable companies to have some rational means of dealing with the contractor issue. The limits appear in what are called "safe harbor" classifications. This means that a company hiring contractors can know with reasonable certainty that there will be no reclassification of the contractors as employees as long as the company complies with the safe harbor rules. These rules in turn vary from industry to industry but every industry has them. This is how companies hire sales people as contractors, for example, without incurring major risks of tax liabilities.
3. The 1986 law referred to in this article repealed the "safe harbor" provisions for providers of high-tech services. Thus, there was no law passed that said, "You are barred from hiring tech service providers as contractors." Companies can hire such contractors as much as they like. The repeal of the safe harbor for this type of service provider (and for no other) had the practical effect of making such service providers unmarketable to companies that had no interest whatever in taking on major tax risks just to be dealing with contractors as opposed to employees.
4. Just a background note on this repeal. Before the 1986 repeal, it was true that companies throughout Silicon Valley would hire "contractors" who would literally do, e.g., a 3-year stint working full-time at one desk for one supervisor on one project. Whatever else these persons were, they were clearly functioning as employees. They had to report for work at designated times and in a designated place. They took direct orders from supervisors on when, how, and where to perform specific duties throughout the course of a project or series of projects. There was nothing in such relationships remotely resembling a situation of a company dealing with a person who was in his "own business." In essence, what the companies were doing was hiring employees, calling them contractors, and saving the trouble of having to pay them employee benefits and employment taxes for their services. These were clearly abuses, and they prevailed at all sorts of Valley companies (Intel, HP, all the biggies). Thus, by 1986, this was an area ripe for attack. How did this happen in Congress? Well, 1986 was the great bipartisan coming-together for the lowering of individual tax rates in exchange for closing a variety of tax loopholes and tightening of tax requirements. In the midst of this bipartisan compromise, Congress took note of the abuses happening in Silicon Valley and repealed the safe-harbor classifications for high-tech service providers as a means of eliminating what was perceived as an abusive loophole.
5. While the above explains why the tech industry happened to get singled out as it did in 1986, it does not eliminate the fact that this safe-harbor repeal was in fact a highly discriminatory act in that every industry in American had safe-harbor rules available to it so that it could reasonably hire contractors while the tech industry was suddenly left without any such rules at all. Thus, from 1986 forward, tech companies became terrorized at the thought of hiring contractors under any circumstances (by the way, one of the last holdouts, Microsoft, continued to use large numbers of contractors and got slammed for this in major rulings that came out by the early 1990s, if I recall, though that case involved much more than tax issues).
6. Almost instantly from 1986 and on, a cottage industry sprang up of "placement agents" who would, in effect, assume the employee risk by hiring the tech-service providers directly and, in turn, contracting with companies to place them there as contractors. This worked for the tech companies because, from their perspective, they simply signed a contractor agreement with the placement firm and paid for the work as contract work. The placement firm, for its part, would then hire the tech-service providers mostly as W-2 employees and occasionally (if they were adventuresome) as contractors. If they retained individuals as contractors, though, they ran the risk of having those persons reclassified as employees and so faced the risk at their level that the tech companies once had directly. Because of this risk, most placement firms would not take on tech people as contractors unless they could have what they perceived as a strong case of calling them true contractors. The practical result of this was that, if a tech-service provider wanted to hire on to a placement firm as a contractor, he would first have to incorporate himself and then the placement firm would take on his company. The irony here is that the tax regulations behind the 1986 repeal specifically provided that it was irrelevant whether or not a sole contractor had incorporated himself and that this fact was to be disregarded in making the tax determination. Thus, though the fact of incorporation was technically irrelevant, most placement firms were happy to take people on as contractors once they had become incorporated. Go figure. (This article, by the way, discusses how the IRS would target such incorporated individuals in search of audit opportunities).
7. After 1986, it became virtually impossible for a tech service provider to hire himself out directly to a company as a contractor. Every one of the large Valley companies adopted strict rules forbidding this. In rare cases, someone might get through the rules if the person was incorporated but even then most times the answer from the company was no. Companies simply re-did their hiring practices and thereafter took on contractors pretty much strictly through placement firms and no longer directly.
8. For a tech service provider looking to go into business, this essentially put up an impregnable practical wall to finding reasonable opportunities to work independently in the tech world, at least in terms of providing services to the larger companies. This remains the case today as well, since the law has not changed in the decade following publication of this article.
9. By the way, this is not just a "big company" issue. Even little businesses can get into trouble without the benefit of safe-harbor protections. If you as a founder hire an early-stage contractor (which is often done) and later terminate the relationship, that person can go file for unemployment on the theory that he was in fact an employee of your company and had functioned as such. This in turn can easily trigger an audit of your entire company's history in this area (1099s you have issued are an easy way for the auditors to focus on key areas). Should this happen to you, you find yourself going down a rabbit hole that is likely to be unpleasant. (An aside: one reason to incorporate as a startup is that reclassification penalties/taxes apply only to the entity and not to the founders directly).
10. To sum up, then: there is no law forbidding tech people from offering their services as independent contractors but such persons face serious practical barriers in building a service business because employers will not hire them as contractors for fear of having their status reclassified in a later audit. This is pure discrimination against tech people. No one else is burdened in this particular way in wanting to set up a service business. The fix is an easy one for Congress to make but I have seen no movement on this whatever. For the near future, I am afraid tech service providers are stuck and have no real remedy for this problem.
An important aspect of being a professional software engineer is having the backbone to sometimes say things like:
- “I don’t know yet enough about the problem to give you even a rough estimate. If you’d like, I can take a day to dig into it and then report back.”
- “This first part should take 2-3 days. 5 on the outside. But the second part relies heavily on an API whose documentation and error messages are in Chinese and Google Translate isn’t good enough. I’d need to insist on professional translation in order to even estimate the second part.”
- “The problem is tracking down a bug rather than building something, so I don’t have a good way of estimating this. However, I can timebox my investigation and if I’ve not found the cause at the end of the timebox, can work on a plan to work around the bug.”
You need to be willing to endure the discomfort of looking someone in the face, saying “I don’t know”, and then standing your ground when they pruessure you to lie to them. They probably don’t want you to lie, but there is a small chance that they pruessure you to. If you don’t resist this pruessure, you can end up continually giving estimates that are 10x off-target, blowing past them as you lose credibility, and your running your brain ragged with sleep-deprivation against a problem you haven’t given it the time to break down and understand.
But when you advocate clearly for your needs as a professional, people are generally reasonable.
The secret of Hell, I think, is that you get there before death. By doing evil things, you invite an evil mentality into your mind which will prey on you as you become more feeble. The final transition from deathbed to the eternal fire is just a formality. If you plant the seeds of hell in your mind, they will be all that remains in the end.
I guess some people think they will never become feeble, that they will maintain the power to keep the evil stuff separate from the rest of their life. But we are all enfeebled in the end.
There's an old Knuth quote:
And I think we're seeing more and more that these projects made with love are successful. That without the hyper fixation on money we can build good projects that make big changes in a world.In some sense I'm a bit envious of Mitchell but truthfully these types of things make me more question how we've constructed our society and economy. It shouldn't require one to start with wealth to be able to build things that have such an impact. What needs to be changed where we can live up to what Knuth proclaimed. I'm sure all of us have had experiences where were we given the time (and usually not much) we could make things so much better. But we make many sacrifices when we rush. Which leads to more good advice by Knuth
At what point do we push back? We see that the people we really look up to did things so differently. Knuth himself expressed how detail obsessed he was, and such a claim is common among the grey breads. Of course, things change, but are we creating a world with no wizards? Are we creating a world where we reward people for solving problems and making our lives easier? Or are we just maximizing some score of a pointless game?I'd love to live in a world with a thousand more Mitchells, following their passions without the burden of needing to justify decisions to a board who has no interest in quality. How do we create that world?
Like you said, what a legend. But, how do we make more legends?