
Why Hardware Development is Hard, Part 2: The Physical World is Unforgiving - mmastrac
http://danluu.com/hardware-unforgiving/
======
kamaal
>>Hardware is different. You never hear about a new team successfully making a
high-performance microprocessor.

May be not a microprocessor. Building something like that requires moderately
deep pockets.

But hardware start ups happen all the time. They don't have any where near the
kind of press coverage we do. I am working on a couple of embedded projects on
the side. And I can tell you the barrier to entry there is pretty high. Web
companies for all their scalability problems are still by and large low
hanging fruits, compared to any hard ware start up. There is also little VC
activity there, and you won't get slots for pitches at conferences.

One of things that I see while working with embedded developers(I am currently
working with some very good ones). C is literally the bread and butter, so you
have no language wars. The highest priority is Stability(Read, Quality in
general), followed by efficient code, and then maintainable code. Your
survival largely depends on your ability to RTFM properly, you have to
internalize and thoroughly understand specs, the hardware interfaces you are
trying to program and the way C lets you program them in a interplay with best
practices there.

Internet isn't always of much help as the platforms you are trying to target
aren't too famous. And there are no hipsters who crazy blog every little
development in that area.

Of the many things that I've learned(and enjoyed doing it), is to go to great
extents to workout things on paper. Mind maps, diagrams, graphs, doodles,
checklist etc. To first prove a degree of correctness on paper and begin to
program. It has greatly increased my ability to divide things and look at them
with clarity. In turn I am able to write stable, and quality code.

According to me every one should work a embedded project. Even if its not a
serious project. And please work with plain C without an OS.

Additionally, writing a python program on linux, running on something like
rasberry pi is _not_ hardware hacking, or low level programming.

~~~
shubhamjain
Can you advice on how can one get started in embedded programming? What are
the barriers, talking the cost and hardware to begin. I can't think of much of
a real project that I would be fond of making but even a set of blinking
lights would be an achievement for me.

~~~
stackcollision
I've also just started learning hardware development in my spare time. It's a
very different challenge than software, and I'm already having a ton of fun
with it. To get started, I'd recommend taking a look at this tutorial:
[http://www.newbiehack.com/MicrocontrollerTutorial.aspx](http://www.newbiehack.com/MicrocontrollerTutorial.aspx)

I also work with a guy who has been hacking hardware since the vacuum tube
days, and has built his own computer literally from the ground up. He's an
amazing resource, so I got really lucky.

As for barriers, I got started for less than $60. I bought an MCU, breadboard,
programmer, iron, some LEDs and other components and started messing around. I
haven't put together a PCB yet, because I want to make sure I've got
everything right. Like the article says, the real world is unforgiving. I
don't want to dump $50 on having a board etched and then find out I messed up
the design.

~~~
kamaal
I don't think you will need to go the PCB level work right now. You can do a
good deal of work on the bread board. And for things which are a little
complicated, building reusable modules and learning how to solder a little
quickly, works most of the times.

------
snom380
There are plenty of hardware startups, you just don't hear about them a lot.
The AVR (used in Arduino) was designed by a few guys from Norway, which sold
their idea to Atmel.

The development costs are higher, but with some investment it's certainly
possible for a small startup to create new CPUs and GPUs. Gaining market share
is more difficult which often necessitates a huge established chip company as
a backer.

------
kabouseng
As another data point. A couple days back there was an article about a
hardware kickstarter product, where the designers did not add reverse polarity
protection to their power socket. (For the life of me I can't find it now...).

So it is not just in the high performance hardware space, but even relatively
simple hardware projects suffer due to lack of experience.

~~~
makomk
You're probably thinking of this article:
[https://news.ycombinator.com/item?id=6689004](https://news.ycombinator.com/item?id=6689004)

I like how they blamed the users.

~~~
kabouseng
Yes that was it, thank you makomk!!

------
weland
> You never hear about a new team successfully making a high-performance
> microprocessor.

Not on Hackernews, but this does happen. Microprocessors do get less spotlight
because the costs involved in developing and producing them are huge. You also
don't hear too often about a team successfully making a high-performance
compiler.

~~~
ohwp
_" Not on Hackernews"_

Well last week there was a this post:
[http://blogs.msdn.com/b/ashleyf/archive/2013/09/21/chuck-
moo...](http://blogs.msdn.com/b/ashleyf/archive/2013/09/21/chuck-moores-
creations.aspx) about a 144-core, ultra low-power chip.

So important stuff gets posted ;)

------
pjc50
Another important factor: bringing it to market doesn't scale up or down like
software does. You can make a program and test it on a single user; or, at the
other end, with a bit of pre-planning you can scale upwards by buying more
EC2/AWS capacity on a credit card.

NRE (one-off costs) on ASIC design is very large. PCB manufacture costs have
gone down, thanks to companies like OSHpark, but you still have to assemble
them. Then there's CE and UL requirements to actually sell into the market
(somewhat evadeable if you're doing "kits" or "prototypes".

As a result, you can't "fail early, fail often" without very deep pockets. And
in some product categories "failure" gets people killed (Toyota passim)

~~~
cLeEOGPw
> Another important factor: bringing it to market doesn't scale up or down
> like software does.

Besides, software market is much less saturated than hardware. Like there was
a time of electronic device explosion, where a single guy could invent such
fundamental things as light bulb, radio or transistor, today is the time where
one guy can "invent" yet unseen software.

Besides, their comparison with faster microprocessors I think is unfair,
because it requires actual innovation to push currently best hardware further,
it is not enough to just reassemble the parts found in different
microprocessors to make something new, which kind of is the case with the
software.

~~~
pjc50
I don't agree that the market is saturated; people are building new gadgets
all the time, especially "internet of things applications". New applications
of techniques like capacitative sensing or innovative radio modulation keep
appearing.

Not as dramatic as the transistor, but then neither is a lot of software.

Edit: not to mention the continuous background delivery of radical innovation
keeping Moore's law going. Now down to a feature size of ~200 silicon atoms
and still going.

~~~
cLeEOGPw
Yes, I should have said "more saturated", because first electronic devices
were around for longer and second physical devices have more limitations than
software, thus more difficult to make something new and useful.

------
xradionut
My background is in hardware, especially RF, and it's fun to talk to pure
software guys that "understand" RF and radios just because they set up a
wireless network at their apartment or made a cantenna. I invite them to hang
out with some world class engineers that I've worked for in the past that
design microwave networks, test semiconductors, cell systems or technical ilk
of that caliber. You really aren't experienced in the field without 30,000
hours of dedicated effort.

~~~
ithkuil
"My background is in software, especially programming, and it's fun to talk to
pure hardware guys that "understand" programming and programs just because
they installed a linux box at their apartment or made a web page. I invite
them to hang out with some world class engineers that I've worked for in the
past that create compilers, test distributed systems, maintain and evolve
widely used libraries or technical ilk of that caliber."

I'm sure you didn't intend to put down software development as being less
complex or less difficult than hardware. The challenges are different and it's
true that people from one field tend to underestimate the issues of the other.

Are you concerned that at some point it will be possible for people to buy a
tiny but fully fledged computer and let software developers create gadgets
that do their job but are not _real hardware_ ? Does this mean that people
will appreciate less the real work behind creating the actual device that
makes it possible?

The advent of complete operating systems make it possible for people to easily
create, debug and test programs without sweating. Certainly lowering the bar
made it possible for more incompetent people to produce lower quality
products.

Working in the layer that enables other people to build on a solid foundation
and create stuff more easily without having to reinvent the wheel every time
is more difficult but rewarding, and it's easily seen by people in each field
as the "true $field".

So it's not software vs hardware, it's about hard vs soft problems, core vs
peripheral issues, enabling vs business logic.

~~~
vonmoltke
I can't speak for xradionut obviously, but he specifically said RF, not
"hardware", so your statements are not equivalent. RF is a different beast,
and its peculiarities do make just about any RF problem more complex and more
difficult than most software problems. Hell, they are more complex and more
difficult than most other EE problems as well and the original statement could
have been applied to digital design engineers without losing any meaning.

~~~
ithkuil
sure, but my point is that it's not because $field_a is easier than $field_b,
but since $field_a allows to hack something up quickly even by inexperienced
people, there is the feeling that $field_b is harder and more worthy just
because it's difficult to get anything done without working hard.

Replace $field_a and $field_b with (guitar, sitar), (piano, violin), (digital
design, rf), (software, hardware), (python script, kernel programming), .....

yet in every of $field_a there are masters whose work is at least as exciting
and worth praise (if not even more) than most those that master $field_b.
Although it's true that $field_b requires more skill in average to enter.

~~~
xradionut
I'm not belittling software, since that's my current field of employment. And
there's a large number of tough software issues that require years of
experience.

The point that the OP in the linked article makes is that is a few guys with a
few years of modest experience in programming can go create a company worth 8
to 9 figures on the market with few resources other than time and luck and
connections.

He then states that this isn't possible in the semiconductor world due to the
amount of experience required in that field. I've worked in the semiconductor
industry and I agree 100%. I've also worked in RF and it's the same. There's
no successful equivalent in those realms that compares to something like
Twitter or most of acquisition bait out there. The amount and complexity of
the knowledge is insane. (Not to mention the manpower...)

And from a guy who's worked the whole stack from component level to user
applications; Python scripting is a couple of orders of magnitude easier than
debugging firmware or dealing with DSP code/math or testing
semiconductors/antennas. Doesn't require a doctorate to build websites or
develop CRUD applications.

------
fest
Hardware is fun (when you get it working), and intelectually challenging. I'm
even younger than the "FPGA guy" \- I guess I fall in the mentioned Arduino
camp (although I have long moved on to bare microcontrollers).

I'd wager that it's quite easy to get into hardware- there are tons of
material on building easy and fun projects in no time. By combining practical
exercises with "The art of electronics" or freely available "Lessons in
electric circuits", one can gain enough knowledge to experiment on it's own in
relatively short time.

------
jotm
Not helping is the lack of good educational material - unlike software, there
aren't all that many books around dealing with hardware, and more importantly,
there aren't any people teaching others how to do stuff (via writing, videos,
etc.). The grizzled veterans do their thing without bothering to share the
knowledge...

~~~
weland
There are plenty of excellent good books, but the entry barrier is somewhat
higher. You simply _need_ at least a basic understanding of calculus if you
are to actually understand any of the processes that occur in semiconductors,
and some basic knowledge of electromagnetism is required to grok issues like
signal integrity.

Sauce: I'm an EE.

~~~
kabouseng
Yes, but then there is also a ton of best practices, what works and what
doesn't work, basic circuit design principles etc. which to my knowledge isn't
really condensed in any one book, but rather in lots of trade articles etc.

(This assumes chip design work (ASIC's etc), but general hardware design (uC
work) the same principle applies, and then you don't need the calculus and
physics knowledge really).

Sauce: I'm an EE too... :D

~~~
weland
> Yes, but then there is also a ton of best practices, what works and what
> doesn't work, basic circuit design principles etc. which to my knowledge
> isn't really condensed in any one book, but rather in lots of trade articles
> etc.

That's also true about software. Once you get past the usual "comment your
code carefully and make sure you're not redundant in it", 99% of the stuff
that is useful in practice is stuff you derive _from practice_.

~~~
vinceguidry
I'm learning how to test right now. You can read three books about testing,
but you won't really get what they're saying until you actually TDD an app.
Domain concepts are really malleable (read, hard to nail down) and deadlines
are really hard, it would not surprise me if only 1-3% or so of people that
work with software seriously actually test their code. I count myself lucky to
be able to throw enough work hours in to figure it out.

Software is full of thin ice where you can walk out on it, jump around, then,
mistakenly thinking it's frozen over, drive your truck on, only to have it
fall through. It _looks_ easy. But there's a reason 90% of the Rails apps I've
looked at had no tests.

------
rwmj
He's totally right that designing microprocessors is hard. However you can
design a reasonably decent microprocessor in a modern ASIC. You're only using
perhaps 4% of the true power of silicon, but it's great fun, iterative, and
you can download working designs already.

------
hobo_mark
As a "young" FPGA guy, I love his posts. Anyway any idea who the other group
was? Cyrix?

~~~
shalmanese
Transmeta

------
codecrusade
A painful truth- [Deviating a bit-It is so very difficult in the mechanical
world. For a moment, smart sensors offer some hope on understanding mechanics
better and seem to suggest the evolution of a new breed of machines which
could be truly revolutionary.] I guess the mistake we all make is that we see
hardware as chip design and other deep stuff. But look at the pioneers of hard
ware design and see what they are doing. Folks like Tony fadell and Elon musk
are doing the Jobsian to the existing IBM likes of respective categories(home-
sensors, automobiles). Very feW hardware startups till now seem to get this
point.[Its changing] But you have to be very smart to be a good hardware
engineer- I have to admit that. Lifes unfair :)

