Posted by chipweinberger 1 day ago
Another complication is that at least in theory, if you're selling electronics, there are actual regulations and third-party testing that needs to happen, and if you fail emissions, you might have to redo your design from scratch. Imagine we had that for software - "your JS is too big, you can't ship until you get it under 50 kB".
So, I'm happy for the author, but I think he had an outlier experience. When you look at Kickstarter stories, people repeatedly stumble over this. Manufacturing / cost difficulties, supplier issues, reliability issues, etc.
yeah, and looking at their board I see they use one of "ESP32-WROOM" modules, which has the wifi & blutooth & antennae (pre-certified by Espressif for FCC, CE so itself doesn't need testing) & flash & processor (which even has its own RC oscillator), which takes care of a whole ton of difficult stuff so all the designer needs to do is plop that module down and power it up and wire some SPI/I2C peripherals which I'm guessing don't need super fast clocks or electrical constraints. Without something like those ESP32 modules, this would be much more difficult.
legally?
You need evidence that the whole product complies with the EMC regulations. There's some judgement involved - if you put a certified circuit board in a plastic box, it won't change the EMC behaviour so you don't need to re-test. But if you solder a module onto a larger circuit board, you are almost certainly changing the EMC behaviour. You should definitely be re-testing something like that.
The pre-certified module does save you some time in the "intentional radiator" testing - assuming you use the same antenna it was tested with as a module, you can probably make the case that the behaviour is the same.
Will anyone ever notice or care for a few thousand niche devices? I doubt it. But to sell in the EU legally you do need to do that testing.
https://europa.eu/youreurope/business/product-rules-complian...
Don't nearly all electronics fall under it too, this is the second item after children toys in the link you posted.
> Here is a non-exhaustive list of products that are included in EU laws about CE marking:
> Toys, drones, electrical and electronic equipment, pyrotechnic products, recreational crafts and watercraft
Just because you use a certified module doesn't give you a free pass.
To be fair, it's unintentional radiator testing that's required, rather than everything the module had to go through as an intentional radiator. So, it is a "free pass" for nearly all of it, and a much cheaper one, since you don't have to use a costly FCC accredited lab.
And, well -- that's certainly good.
But the FCC rules cover more than just Wifi and BT, and the whole rest of the widget also needs to comply with them. Of particular interest is FCC Part 15 Subpart B, which covers unintentional radiators. The device would need to comply with Part 15 Subpart B even if it had nothing to do with Wifi or BT.
Putting one part that is certified for one issue into a device doesn't extend a magical blanket of compliance to everything else that the whole of the widget contains.
Does the SPI or I2C bus (or anything else) leak RF beyond allowable limits? Eh, who knows. I certainly don't know. It's easy to say words like "it should be fine," but without testing then nobody actually knows.
The CE mark, meanwhile: That mark means exactly nothing in the US, where the author is located and the devices are sold from. The United States has zero regulatory recognition of any of the processes and/or tests that CE may cover. People often confuse this issue, wherein: They don't think it be like it is, but it do.
1. https://www.europarl.europa.eu/doceo/document/P-6-2007-5938-...
I don't disagree. It's important for us to recognize that we stand on the shoulders of giants, but I also think it's a little silly of a critique of someone happy about it being easier than he expected. It's true that hardware would be much harder if you had to do it all yourself, but is that meaningful? The wonders if the modern supply chain is that you don't need to do it all yourself.
Back in the glorious past, the iOS App Store either didn’t allow apps larger than 100 MiB, or at least forbade them from being downloaded over mobile connections. There’s an old blog post/Twitter thread you can find on Hacker News where an Uber engineer describes the challenges they faced in trying to keep their app under that limit. They were also rewriting the app in Swift, so some compiler patches were necessary.
But for a “boring” ride hailing app, it’s still beyond my imagination.
Microsoft Word was something like 8-10MB in the Windows 3.1 days. WordPerfect was about the same and even had a grammar checker.
The entire damn PC with DOS, Windows, and Word was 30MB.
We’ve fallen so far, we mistake the darkness for outer space.
Overcast is 37MB.
While the base functionality is fairly simple in terms of find location > send car + all the courier and different varieties of what they do. It manages do that while working in 70+ countries over 15,000 cities with multiple different languages and payment vendors and it is all done via a single application.
That is pretty neat.
Yes, it is still very bloated but it does a lot more than what it initially looks like.
But yes, I am endless impressed when you come across a binary that is tiny. Like a text editor that is 14KB, sure it is simply but it doesn't need to be anything more for most people.
I'd assume almost all of that is done server side though. Most likely the app is mostly just a wrapped website with some gps and notification code on top.
The app just calls the GeoLocation API on the device, pings that off to a server and the server responds with services available in <distance>
We're at the point now that everything is written in some sort of javascript, with a JIT compiler and JS engine...
https://www.uber.com/us/en/blog/how-uber-deals-with-large-io...
Comments about a Twitter thread talking about the same thing: https://news.ycombinator.com/item?id=25373462
Apple UX used to be good, not anymore sadly
A man can dream.
https://www.simonberens.com/p/lessons-learned-shipping-500-u...
... But also that needs to be an official measurement, and if you're sloppy you can measure it wrong during your own testing and then be surprised.
I work in games, we run into this problem all the time ("Your IPA binary is too big, fix it and resubmit", ditto for other publishers).
Has that happened to you?
At this point I have the only stock of this part in the world, and it's more than a lifetime supply, but otherwise I'd have been faced with a re-design and limited options.
For another of my products, during the pandemic, the part I was using became unavailable, and I had to re-design my board to accommodate a part of the same type in a different package. Then I couldn't buy either part, but found an odd lot at a Texas Instruments factory in China, which I bought.
Dealing with shortage and obsolescence issues is a constant battle. There have been crises in the industry caused by plants catching on fire.
They're making you nothing, they're going to vanish into the nether if the documentation is lost....
... that's a very normal constraint in many fields of SWE?
So there's a fair amount of stuff that just doesn't make it there, there's a whole business now on re-selling non-delivered packages.
And with that also comes the services, the reason they leave it at the door, or in the bin, or yeet it onto the roof. Is because there's no profit margin anymore for the delivery person to wait 30s each time for someone to answer.
Not only that but every single update you push requires paying $$$$$ to get certified. It is freeing that the cost of releasing a fix or improvement to a product is $0.
In the past I considered selling a custom adapter to hobbyists, but all the certification costs just did not make it a viable option to pursue. I didn't want to up front thousands of dollars to make like $100 if I was lucky.
I dislike this statement. Hardware is as hard as the product dictates it needs to be. A 25 component PCBA and a clamshell of 2 injection molded parts is about as simple of a product as you can make. Heck, most people would just buy an off the shelf clamshell for that type of product.
That doesn't work for the vast majority of products, building a product with 20 COTS parts plus 60 custom tooled parts, and 4 complex PCBAs is what is hard. Getting everything to fit together, pass testing, arrive on time from dozens of suppliers, etc. it where the complexity comes in. Then consider that hardware is cash intensive, you need to pay ahead of time for all the tools, you need to pay to buy the individual parts and warehouse them somewhere while you build the products you hope are going to sell. If something goes wrong there, then your expensive parts are just sitting there waiting for replacement components before you can ship. Then even when you ship, that revenue goes into buying the next round of parts you are going to receive in 3 months. This is where many hardware projects fail as they run out of cash before the project breaks even.
I wrote the software, and my friend designed the PCB for the digital side. Basically I had to be a decent C programmer, and read the datasheet for the MCU we were using (which was way more work than using something like an ESP, but still). My friend had to lay stuff out on the PCB and place secondary components according to various application notes.
Overall not simple, but not rocket science.
On the other hand, the guys doing the analog daughterboard were industry veterans with decades of experience. They had a million concerns, from signal integrity, to voltage protection, back-EMF, etc. I was not even near the ballpark of that skill level.
Later on, I worked on more complex HW projects, stuff with FPGAs, DRAM integration and 8 layer PCBs, where you had to run full electromagnetic simulations because when you run at 1+ GHz, suddenly signal propagation is not instant, and traces behave like antennas.
I also did software there (a smaller slice of it this time), but there was an army of engineers working on the whole project which took a year, and not a second of it was spent in vain.
It's rare that I come across a product I have literally zero complaints about, or any feedback to offer. Even my concern that it was tied to an app that might disappear one day is of course covered by the fact that it's all just MIDI files on a card.
Thank you so much for making this, it's basically a perfect product for me and I love it. No notes.
If I ever get good at piano it'll be handy
I was sorta surprised when the blog mentioned it was like 200k lines of code for an app. I wouldn't think you'd even need an app for something that puts midi files on an sd card.
Also, pretty cool that you set up your website real fast. Would you mind adding your Twitter link onto the site?
It's more the opposite. The app requires a genuine device.
The value you have created is actually more in the App than in the hardware.
As a maker of small devices (mostly open source) including MIDI - and putting aside commercial aspects like injection molding - I could recreate the hardware side of this project without much issue. The necessary components are likely already in this room with me. (I won't - I'm not in the business of copying things that people don't want copied)
But I'm not a software engineer, and therefore could not produce software of the scope and quality that you have, which is where the unique functionality of your device sits high above the relatively simple "receive MIDI data from MIDI devices" principle of the hardware by itself.
If there are no more app updates, presumably there are no more firmware updates either, so the flashing part probably doesn’t matter (and you can probably flash the last published image to an authentic device by other ESP32-y means if you really need to).
As to the day-to-day: Pretty sure the hardware still records regular ol’ MIDI files to the SD card. The app seems incredibly well-thought-out and ergonomic but, at the end of the day, nonessential to the device’s core function.
Somebody could presumably build and sell their own “MIDI Recorder Loop Nonstop Device Digital Piano Upgraded New 100%,” but it wouldn't be a Jamcorder, you couldn’t flash Jamcorder firmware updates to it just by slapping an ESP32 in a case, and the official Jamcorder companion app would not talk to it. Which… fair enough, right?
For that matter it wouldn’t surprise me if somebody could write their own client for the real Jamcorder, if they felt so inclined… but with the official stack so absolutely perfect from a design perspective, why would they?
Saying "It's just writing to an SD" is today
Right?
This feels though a little to me like building a simple SaaS service, and deploying it on a managed cloud service, and concluding all software is really easy!
This project is near to (if not at) the easy end of the hardware product difficulty/complexity spectrum. Some great choices were made to keep it simple and therefor easy.
An alternate take-away: "If you keep things simple, hardware doesn't have to be as hard"
It is mentioned elsewhere here that a lot of time was burned on unused firmware features. It takes surprising discipline to cut stuff and still deliver.
Congrats though, making a half-million a year business is a massive accomplishment! The headline just irked me a bit, haha (but, it got my attention, so I guess you win there)
Here's a good example: https://duckduckgo.com/?q=brick+smartphone+blocker&ia=web
I think there's a lot of people talking past each other here. Sourcing parts internationally, preventing counterfeiting, slow iteration time, inventory management...all this logistical stuff is hard enough that the conventional wisdom in the software business world is to never attempt it. You're here presenting a counterexample and that's wonderful. The people criticizing aren't talking about this though, they are talking about whether logging digital inputs on an esp32 counts as a real hardware project and they act as if you've insulted their expertise in [signal processing/antenna design/insert specialty here]. You didn't do that, most of us know you didn't do that, but the word "easy" sets a lot of engineers off.
Just ignore the noise and keep writing great articles. My personal request, if I may - I'd like to hear how you did injection molding since I always assumed that was out of reach for small business.
And they’ll make the molds in China anyway. Chinese molders are hungry — they will work with low volumes and offer a bunch of integrated services. But if you don’t know what you’re doing you will end up with bad parts over schedule.
Easiest way to get started is to use ProtoLabs. They charge lower prices on molds in exchange for higher part cost, are way faster than China, and have way better customer service.
I'm curious to hear more about your anti-counterfeit strategies beyond just enabling encryption. I'm curious if you feel like anti-counterfeit and open source firmware are mutually exclusive. I made the choice to embrace an open firmware approach on my project while keeping the hardware closed, while knowing that if someone tries hard enough they can completely reverse engineer if they put their mind to it. Desoldering caps and x-raying PCB layers etc.
I'm also very curious to hear more about your adventure in injection molding. What starting resources do you recommend, how much did it cost? Would you do it the same way today, or have the recent innovations in 3D printing forms for injection molding present superior paths?
Finally, I'd love to hear about your certification process. What certs did you get, how much did it cost, what were the gotchas?
Low product quantity and low quality/fake products resold on amazon from AliExpress are the biggest roadblocks at this point. The juice isn't worth the squeeze.
Never understood this, was the "most of the fun of programming" the literal typing for you? For me it was about solving problems and building things, and I get to do that more now than before, and without all the literal typing.
LLMs move me away from the implementation, which is more a managerial role, something I personally have zero interest in.
I'm sorry if I gave the impression I think programming is just typing. For me "programming" is the whole activity of creating software with code, you can do programming without the literal action of typing.
> Writing the code and thinking about the exact logic you want to apply and all its implications are part of the same problem solving process in my mind.
That's really interesting perspective to me, as these two activities for me are two completely things, and "thinking about the exact logic" happens way before I actually write any code at all, sometimes weeks/months even.
> putting things together in code is a very satisfying and IMHO is the actual building part of the job.
I agree that it's satisfying, but I guess "putting things together in code" still for me is more about being able to mash two concepts together in an elegant way, and none of that actually requires actual typing still.
> LLMs move me away from the implementation, which is more a managerial role, something I personally have zero interest in.
This is also interesting, because it feels like LLMs give me the opportunity to do more implementation, and not get stuck in the minutia so much, but rather focus on how the design and architecture actually fits together. Refactoring no longer is "I want to but also I don't want to spend the time nor get stuck in more rabbit-holes", so being able to focus on architecture/design more feels like it lets me care more about the implementation than before.
Maybe they just like doing it the old fashioned way. You can both exist.
Unless you’re getting a commission to sell LLMs to people I struggle to understand what you’re trying to achieve.
It's not bothersome, I'm not bothered by it at all, everyone gets (in my mind) to do things that makes sense to them. When I write comments here disagreeing with others, it's more from a "Please explain further your perspective so I can understand it, which hopefully I trigger by challenging it" view than anything else, not "You should do as I am doing things".
> Maybe they just like doing it the old fashioned way. You can both exist.
Completely fair if that is the perspective, just to re-iterate, I'm not trying to convince anyone of anything, only to understand other perspectives better.
In the past when my junior engineers were fighting with a bug all week, I always told them the dopamine hit of solving the bug is what keeps you coming back to work for 20 years. Half joking, but the dopamine hit of from the satisfaction getting complex working software in a weekend is like crack to me, we'll see how that plays out long term :)
Beyond the typing though, I find enjoyment in perfecting the structure of the code, thinking deeply about how the pieces fit together. I enjoy the process of iteratively refining the code so that it clearly represents the program using the optimal level of abstraction and minimizes superfluous code/syntax. I find that using an LLM eliminates all of this and produces code that lacks all of the elegance and readability that I aspire to in my own code.
Your take is so reductionist it's hard to believe you actually like to solve problems.
Some people fall to that temptation instead of using LLM to just do the menial stuff and do the fun stuff themselves.
The problem at least I have is... when something goes wrong, often enough even you as the original author / LLM slave-driver have no idea what is going on where, and completely forget trying to dig into someone else's pile of vibe-coded garbage. For every single problem you now are completely beholden to the AI agent.
With code, I'm not planning everything down to the finest detail before I start writing. I know what I ultimately want my code to do but there are many unknowns I hadn't considered. Coding with an LLM is different depending on how you use it. When I'm using code completion, that's usually just helping me prevent syntax errors or to write an efficient snippet of code without having to check docs. But when I tell Claude "I want a web app that does xyz" and it creates it whole-cloth, that takes away the challenge of learning something new and building. I'm not a web developer and anything I could create is going to take me a long time to make (and it probably won't work well or look good) but Claude cranks it out with ease. I get to play software project manager and let the expert do the technical work. It's kinda fun being able to quickly get resulrs. Rather than debugging individual lines of code and thinking about the best way to implement code, I get to test features and think about better ways for the overall system to operate.
Goes into what? Into typing code or into creating LLMs?
Overall I'm not sure what point you're trying to make, nor why you feel bad about it. Mind explaining to a simpleton like me with simpler words and concepts?
Software can be about the beauty in an algorithm, the elegance of an implementation. This is very similar to the type of beauty and elegance one finds in Mathematics.
For many, writing software is more about crafting a beautiful design than typing lines of code.
Getting things done is not about crafting, though (although crafting IS about getting something done).
Thus the big clash when suddenly you can get things done well enough, without the craft part, with LLMs. Even if beauty and elegance are in there, most would not see it, because most do not want to review "LLM slop". They get things done.
Yes, I count myself as one of these people, hence not caring much about the actual typing part.
> Getting things done is not about crafting, though (although crafting IS about getting something done).
I'd say it is, I like getting things done, hence I care about high quality code and proper design/architecture of the software itself and its concepts. Without caring about those things, you can "get things done" initially but as the thing grows, it gets slower and more complex. I like when "get things done" is applicable over years and as the software grows, then you need to carefully deliberate about almost every change and be vigilant about the design and architecture.
> Thus the big clash when suddenly you can get things done well enough, without the craft part, with LLMs. Even if beauty and elegance are in there, most would not see it, because most do not want to review "LLM slop".
Right, but no one is forcing you to go down that path. You can tell the LLM "Build a calculator" or you can come up with the design then tell the LLM to implement the design exactly, the choice is up to you. Since I care about the abstractions, design and cohesive architecture, I do the latter, and if you too do not care about the typing but the crafting, I'd advise people to also make that latter choice instead of the first.
LLM spaghetti code is unacceptable.
LLM code with a complex pile of overlayed abstractions only someone with a PhD in Software Engineering can debug or even get to compile years later when public APIs change is also unacceptable.
Same thing with human engineered software abstractions.
But I get you. Human directed AI is the only way to go ... for now ...
I suspect we will see a reversal on this. LLMs are flat out worse than humans at programming (yes, even your latest favorite frontier model). I am faster (once you factor in the time fixing its inevitable mistakes) and better at programming than Claude is, and I'm not a particularly exceptional programmer. People say "they aren't going away", but I disagree with that - already we've seen people disenchanted with the lack of results compared to what they pay, and that is only going to grow once the AI companies raise prices in an attempt to turn a profit rather than lock people in. Eventually the industry will wake up and stop drinking the kool-aid, and what matters will once again be the results you deliver, not the tools by which you deliver them. But it's hard to say when that will happen, and it's going to be rough in the meantime.
Are you still below any significant scale thresholds and are there any you dread crossing?
I ask this because I tend to find things are simple until they are not. e.g. it's easy to write an e-commerce platform until you have to deal with shipping, duty, tax, tax on shipping, etc., for multiple countries.
There are scale thresholds I am aware of in hardware that I have not yet run up against. For example I am using Free software, but I am aware that with commercial CAD you can cross over price tier thresholds. Or for another example there are sales quantities where with electronics you might end up needing compliance testing, consumer safety testing etc.
Which ones haven't you crossed yet that you expect to have to navigate?
Another similar threshold would be having to hire people, which changes the complexity of the business in a variety of ways.
You hear about firms that go over certain thresholds, get noticed and then find out that their production facility is no longer "small" or exempt for example.
Some amount of defensiveness in planning and design can mitigate but I'm interested to know if there are thresholds I didn't know about.
99.99% of cheap Chinese products you buy on Amazon don't actually have this testing done at all. So by doing any testing you're already way above them.
CE is all about self certification. The lab testing gives you the confidence to do this.
It can be expensive - but Chinese test labs are very affordable and do a really professional job.
There is now quite a good EU based service - https://early.smander.com/ I used them to get some advice early on (disclaimer, I know the founder).
Yeah, but those Chinese dropshippers don't have significant local presence. If they are caught doing shady stuff they'll just let their $100 letterbox company go bankrupt and start over.
You, on the other hand, would actually have to pay whatever fines some regulator charges you with, because you are physically present in a jurisdiction they can apply power to. This makes self-certification a bit of a footgun: you essentially pinky promise that you fully understood all the relevant rules and regulations, and otherwise pay what in the worst case might be a hundred-thousand-euro fine. Quite a bit of a gamble!
The main saving grace is of course that the authorities are way too busy to investigate some random guy selling a handful of devices from his kitchen. But get too successful, and some competitor might just decide to give them a little hint on exactly what part you missed because you didn't even know you had to comply with it.
(Although I spy an SD card slot, a favorite of the "hardware isn't hard" faction that will explode in their face)