The Factory Floor, Part 1 of 4:
The Quotation (or, How to Make a BOM)

January 5th, 2013

This month, I will be teaching a few MIT Media Lab graduate students and doing a bit of a “geek tour” of Shenzhen – we will visit several factories and live among the electronic markets to facilitate new directions and expand horizons in the students’ hardware-oriented research projects.

As part of the course, they will learn how to scale up their research utilizing the China manufacturing ecosystem. These lessons may also be useful for Makers looking to bootstrap a product in moderate volumes (hundreds to thousands of units). I will share some tips and insights from the course in four posts over the next month covering:

  • Getting a quotation: documentation standards (how to make a BOM)
  • Process optimization: design for manufacturing and test jigs
  • Industrial design for startups: guerrilla engineering on a shoestring budget
  • How to pick a factory: building and maintaining partnerships

Part 1 of 4: The Quotation (or, How to Make a BOM)

Most Makers trying to scale up quickly realize the only practical path forward is to outsource production. If only outsourcing were as easy as schematic + cash = product! Whether working with the assembly shop down the street or going to China, a clear and complete bill of materials (BOM) is the first step to outsourcing production.

Every single assumption, down to the color of the soldermask, has to be spelled out unambiguously for a third party to faithfully reproduce a design. Missing or incomplete documentation is the lead cause of production delays, defects, and cost overruns. So, we will start the series on the topic of making a complete and accurate BOM for quotation.

Let’s consider a simple case study. Suppose we Kickstarted a bicycle safety light. It contains a circuit using the 555 timer to flash a small array of LEDs. After a great marketing campaign, we now have to fill several hundred orders in a few months’ time.

At this point, here’s how the starting BOM might look:

This BOM, along with a schematic, is likely sufficient for an engineer to reproduce the prototype, but this is far from adequate for a manufacturing cost quotation. Here’s some of the things missing from the BOM:

  • Approved manufacturer for each component
  • Tolerance, material composition, and voltage spec for passive components
  • Package type information for all parts
  • Extended part numbers specific to each manufacturer

Furthermore, the table above addresses only the electronics BOM. A complete BOM for an LED flasher also needs to include the PCB, battery, plastic case pieces, lens, screws, any labeling (for example, a serial number), a manual, and packaging (plastic bag plus cardboard box, for example). There may also need to be a master carton as a single boxed LED flasher is too small to ship on its own. Although cardboard boxes are cheap, they aren’t free, and if they aren’t ordered on time, inventory will sit on the dock until a master carton is delivered for final pack-out prior to shipment.

Here’s a little more about each of the missing items from the example BOM.

Approved manufacturers

A proper factory will require the allowed manufacture(s) to be specified for every part. This is frequently referred to as the “AVL”, or Approved Vendor List. A manufacturer is not a distributor (i.e., Digikey, Mouser, Avnet); a manufacturer is the actual company that makes the part. A capacitor, for example, could be made by TDK, Murata, Taiyo Yuden, AVX, Panasonic, Samsung, etc. You’ll be surprised how many times I’ve reviewed a BOM listing “Digikey” or some other distributor as the manufacturer for a part.

While it may seem silly to trifle over who makes a capacitor, there are definitely situations in which the maker of a component matters – even for the humble capacitor. For example, blindly substituting the filter capacitors on a switching regulator, even if the substitute has the same rated capacitance and voltage, can lead to unstable operation and even boards catching fire.

Of course, there are times when one is truly insensitive to the manufacturer, in which case I would mark on the BOM “any/open” for the AVL (particularly true for things like pull-up resistors). This invites the factory to suggest their preferred supplier on your behalf.

Tolerance, composition, and voltage spec

For passive components that are marked as “any/open”, there are some key parameters that should always be specified in a BOM to ensure the right part is purchased:

  • For resistors, at a minimum the tolerance and wattage should be specified. A 1k, 1% 1/4W carbon resistor is very different beast from a 1k, 5% 1W wirewound resistor!
  • For capacitors, at a minimum the tolerance, voltage rating, and dielectric type should be specified. For special applications, certain parameters such as ESR or ripple current tolerance also need to be specified. A 10uF, electrolytic, 10% 50V capacitor has vastly different performance at high frequencies compared to a 10uF, X7R [ceramic], 20% 16V capacitor.
  • Inductors are sufficiently specialized that it’s not recommended to ever leave them as “any/open”. For power inductors, core composition, DCR, saturation, temperature rise current, are the basic parameters, but there is also no standard for casing like there is for resistors and capacitors. Furthermore, important parameters such as shielding and potting, which can have material impacts on the performance of a circuit, are often implicit in a part number; hence, it’s best to simply fully specify the inductor and not leave it any/open. The same goes for RF inductors.

Electronic component form factor

It’s always important to fully specify the form factor, or “package type”, of a component. Poorly specified or under-specified package parameters can lead to assembly errors. Beyond the basic parameters such as the EIA or JEDEC package code (0402, 0805, TSSOP, etc.), here are some other things to consider:

  • For SMT packages, the height of a component can vary, particularly for packages larger than 1206, or inductors. Pay attention if the board is slotting into a tight case.
  • For through-hole packages, lead pitch and component height should always be specified.
  • For ICs, try to specify the common name that corresponds to the package, not just the manufacturer’s internal code (for example, a TI “DW” type package code corresponds to SOIC). It’s a good consistency check that can guard against errors.

Extended part numbers

Designers often think using abbreviated part numbers. A great example of this is the 7404. The venerable 7404 is a hex inverter, and has been in service for decades. Because of its ubiquity, the term “7404” can be used as a generic term for an inverter. However, when going to production, things like the package type, manufacturer and logic family must be specified. A complete part number might be 74VHCT04AMTC, which specifies an inverter made by Fairchild Semiconductor, from the “VHCT” series, in a TSSOP package, shipped in tubes. The extra characters are very important, because small variations can lead to big problems, such as quoting and ordering the wrong packaged device (and subsequently being stuck with a reel of unusable parts), or subtle reliability problems. In fact, I encountered a problem once due to a mistaken substitution of a “VHC” for the “VHCT” logic family part. This switched the input thresholds of the inverter from TTL to CMOS logic-compatible, and resulted in some units having an asymmetric response to input signals. Fortunately, I caught this problem before production ramped, avoiding a whole lot of potential rework or worse yet, returns.

Here’s another example of how missing a couple of characters can cost thousands of dollars. A fully specified part number for the LM3670 switching regulator might be LM3670MFX-3.3/NOPB. Significantly, if the /NOPB is omitted, the part number is still valid and orderable – but for a version that uses leaded solder. This could be disastrous for products exporting to a region, such as the EU, that requires RoHS compliance (meaning lead-free, among other things). A more subtle issue is the “X” in the part number. Part numbers with an “X” come with 3,000 pieces to a reel, and ones lacking an “X” come in 1,000 pieces to a reel. While many factories will question the /NOPB omission (since factories typically assemble RoHS documentation as they purchase parts), they will rarely flag the reel quantity as an issue. However, you care about the reel quantity because if you only wanted 1,000 pieces, including the X in the part number means you’ll be paying for 2,000 extra pieces you don’t need. Or, if you’re doing a much larger production run and you omit the X, you could be paying a premium for shipping three times the volume of reels for the same purchase quantity. Either way, the factory will quote the part exactly as specified, and you could be missing out on a cost savings if you’re not paying attention to the reel quantities.

The bottom line is that every digit and character counts, and lack of attention to detail can cost real money!

BOM Revisited

Here’s an example of how a proper, fully-specified BOM for quotation of the same project example above would look.


(click for a larger version, or get the original in open office format here)

Note that the BOM above doesn’t call out factory margin, labor for assembly, pack-out, shipping, duties, etc. These “soft costs” will be discussed in the final post of the series. However, it’s important to note that when building a business model, parts cost is not the only cost to consider — the above BOM just gets you started with the initial quotation process.

Let’s compare this to our original BOM for contrast:

There is big difference between a BOM that any engineer could take to produce a prototype, and a BOM that any factory could take to mass-produce a product.

Note that two additional columns have crept into the final BOM, the “MOQ” (minimum order quantity) and the “lead time”. These columns are irrelevant when building low-volume prototypes, as one would typically buy parts from distributors which have few MOQ restrictions and maintain stock on hand for next-day deliveries. However, when scaling into production, a big cost savings are realized by cutting the distributor overhead and buying through wholesale channels. In wholesale channels, MOQs and lead times matter.

The good news is the factory will fill in the MOQ and lead time as part of the quotation process. However, these are parameters that are helpful to be tracked from the beginning of a design. If the MOQ of a particular component is very high, one may have to buy massive numbers of excess parts which increases the effective price of the project. If the lead time of a part is very long, one may want to consider redesigning for a part with a shorter lead time. Using parts with shorter lead times not only saves time, it improves cash flow, as the last thing anyone wants to do is tie up cash on long-lead components 4 months in advance of any sales revenue.

Also note the inclusion of all the “miscellaneous” bits for the design inside the BOM, left out on the engineering prototype’s BOM. The miscellaneous bits are easy to forget, but a missing user manual in an initial BOM is often times not discovered until opening the final sample for approval, leading to a last-minute scramble to get it into the final product. Many, many products have been delayed or late simply because a user manual or box art was not completed and approved in time, and it sucks to have a hundred thousand dollars worth of inventory idling in a warehouse for want of a slip of paper.

Finally, it’s best practice to provide the factory with “golden samples” along with CAD files. These prototypes enable the factory to make smarter decisions about any ambiguities in the submitted BOM. It may suck to hand-solder together one more unit just for the factory, but in my opinion a few hours of soldering beats a week of trading clarifying emails with the factory.

Coping with Change

Designs change. Even if a design is perfect, sometimes vendors End-of-Life (EOL) components, forcing a change to the design. And let’s face it, not all design assumptions survive contact with real consumers. While the quotation process is fluid, it’s important to formalize the change process once crossing the threshold into production. It is best practice to use a written, formal Engineering Change Orders (ECO) to update the factory on any changes after the initial quotation is completed. An ECO template should have at a minimum the documentation detailing each part changed and brief explanation of why, along with a unique revision number for conveniently referencing the change down the road, and a method to record the factory’s receipt of the ECO paperwork. Failing to be thorough about ECOs and relying on casual emails will often lead to buyers buying the wrong part, or worse yet the factory installing the wrong part and entire lots being scrapped or reworked. Even after troubleshooting a problem with the factory engineers, I will still write up a formal ECO and submit it to the production staff to formalize the findings. I hate paperwork as much as the next engineer, but in production one small mistake can cost tens of thousands of dollars, and that thought keeps me disciplined on ECOs.

Stay tuned for next week when I cover design for manufacturing and test jigs.

Sifteo Gen2: from Concept to Product

December 17th, 2012

Some readers may have already seen this, but adafruit has a great article written by Sifteo engineer Elizabeth Micah Scott about the challenges and trade-offs they encountered bringing their Gen2 product to market (full disclosure: I am an advisor for Sifteo).


I really appreciate the candidness of the writing, and the openness with which they discuss internal design aspects that many startups would normally regard as highly secret sauce. Then again, they do some amazingly clever things with very light, cheap 8-bit hardware, and they have every right to be proud of their technical accomplishments.


Sifteo has an SDK for those interested in developing for the platform.

I highly recommend the read, check out the article titled “How we built a Super Nintendo out of a Wireless Keyboard @Sifteo” here.

Building my Own Laptop

December 16th, 2012

We are building an open laptop, with some wacky features in it for hackers like me.

This is a lengthy project. Fortunately, ARM CPUs are getting fast enough, and Moore’s Law is slowing down, so that even if it took a year or so to complete, I won’t be left with a woefully useless design. Today’s state of the art ARM CPUs — quad-core with GHz+ performance levels — is good enough for most day-to-day code development, email checking, browsing etc.

We started the design in June, and last week I got my first prototype motherboards, hot off the SMT line. It’s booting linux, and I’m currently grinding through the validation of all the sub-components. I thought I’d share the design progress with my readers.

Of course, a feature of a build-it-yourself laptop is that all the design documentation is open, so others of sufficient skill and resources can also build it. The hardware and its sub-components are picked so as to make this the most practically open hardware laptop I could create using state of the art technology. You can download, without NDA, the datasheets for all the components, and key peripheral options are available so it’s possible to build a complete firmware from source with no opaque blobs.

Above is an annotated diagram of the circuit board. The dimensions of the board are approximately 121mm x 150mm — sized to fit comfortably underneath a standard-sized laptop keyboard. The image above is rotated versus the installation orientation; the port farm is meant to be on the right hand side of the laptop, not on the bottom. The overall height of the board is just under 14mm, with the height being set by the thickness of an Ethernet connector. The thickness on my Lenovo T520 base portion is just under 24mm, so once we stack a keyboard and plastics on this it’ll be just about the same.

Here are some of the features of the laptop motherboard:

  • Freescale iMX6 CPU — same footprint can support dual-lite and quad versions:
  • Internal memory:
    • Boot from microSD firmware
    • 64-bit, DDR3-1066 SO-DIMM, upgradable to 4GB
    • SATA-II (3Gbps)
  • Internal ports & sensors:
    • mini PCI-express slot (for blob-free wifi, bluetooth, mobile data, etc.)
    • UIM slot for mPCIe mobile data cards
    • Dual-channel LVDS LCD connector (up to QXGA (2048×1536) @ 60Hz resolution) with USB2.0 side-channel for a display-side camera
    • Resistive touchscreen controller (note: captouch displays typically come with a controller)
    • 1.1W, 8-ohm internal speaker connectors
    • 2x USB2.0 internal connectors for keyboard and mouse/trackpad
    • Digital microphone
    • 3-axis accelerometer
    • header for optional AW-NU137 wifi module (*)
  • External ports:
    • HDMI
    • SD card reader
    • headphone + mic port (compatible with most mobile phone headsets, supports sensing in-line cable buttons)
    • 2x USB 2.0 ports, supporting high-current (1.5A) device charging
    • 1Gbit ethernet
  • “Fun” features:
    • 100 Mbit ethernet — dual Ethernet capability allows laptop to be used as an in-line packet filter or router
    • USB OTG — enables laptop to spoof/fuzz ethernet, serial, etc. over USB via gadget interface to other USB hosts
    • Utility serial EEPROM — for storing crash logs and other bits of handy data
    • Spartan-6 CSG324-packaged FPGA — has several interfaces to the CPU, including a 2Gbit/s (peak) RAM-like bus — for your bitcoin mining needs. Or whatever else you might want to toss in an FPGA.
    • 8x FPGA-driven 12-bit, 200ksps analog inputs
    • 8x FPGA-driven digital I/O
    • 8x FPGA-driven PWM headers, compatible with hobby ESC and PWM pinouts — enables direct interfacing with various RC motor/servo configurations & quad-copter controllers
    • Raspberry-Pi compatible expansion header
    • 13x CPU-driven supplemental digital I/Os
    • 3x internal UART ports

    Items marked with an asterisk (*) require a closed-source firmware blob, but the system is functional and bootable without the blob.

    In order to give maximum power management flexibility, the battery interface functions are implemented on a daughtercard. I co-opt a cheap and common SATA-style connector to route power and control signals between the mainboard and the daughtercard. To prevent users from accidentally plugging a hard drive into the battery port, I inverted the gender of the battery-SATA connector from the actual mass storage SATA-II connector. The current battery card is meant to work with the battery packs used by most RC enthusiasts — LiPo packs ranging from 2S1P to 4S1P (2-cell to 4-cell). RC packs are great because they are designed for super-fast charging. They are also cheap and easy to buy. For the board-side battery plug I decided to use the Molex connector found on classic disk drives, since they are cheap, common, and easy to assemble with simple tools. I couldn’t use a standard RC connector because the vast majority of them are designed for in-line use, and the few that have board mounts are too thick or too weird for use in this application.

    The battery board can charge batteries at rates in excess of 4A. This means charging a 3-cell, 45Wh (4Ah) pack in about one hour. I’m estimating that a typical power consumption for a reasonable system configuration might be around 5-6W, so that’s 7-8 hours of runtime with a 1-hour charge time using that type of battery pack. Of course, since the whole laptop is user-configurable, typical power consumption is really hard to estimate — you could drop in a monster LCD and a power-hungry magnetic hard drive with loads of peripherals and the power consumption could be much higher. Of course, you can drop in a 100Wh battery pack if you wanted as well :)

    Another cute feature of the battery board is that it can drive an analog panel meter. Xobs had suggested that it would be neat to embed a retro analog needle meter into the palmrest of the laptop to give a real-time display of power consumption. I thought it was a great idea, so I designed that in. Of course, the analog meter is driven by a DAC on the battery microcontroller, so it can be configured to perform a multitude of useful (or not so useful) analog read-outs, such as remaining runtime, battery voltage, temperature, the time (represented as an analog value), etc.

    Next up is to spend a couple months validating all the features on the board — a long list of features to grind through indeed — and port drivers and a linux distro (no small task, but I’ll have Xobs‘ skillful help). I also am looking forward to designing the enclosure. Probably for the first rev, I will do something out of laser-cut acrylic that is vaguely tablet-like, to avoid having to mess around with a friction clutch on version 1 of the plastics.

    A detached keyboard/trackpoint is attractive to me because I’ve always wanted a display I can “hang” on the seat in front of mine when sitting in an airplane or a bus — it’s a lot easier on the neck and the arrangement actually works better if the person in front reclines their seat.

    Once I’ve got some experience integrating the whole thing, I’ll probably design a rev-2 case using CNC-cut ABS and aluminum. CNC cut ABS is almost as robust as injection molded ABS, and can produce reasonably intricate shapes. It’s also relatively economical to produce in single quantities. The CNC-cut design could be a clamshell design, or maybe some other funky design. Maybe I’ll try using wood and brass — who knows, the whole idea of making my own laptop is to play around with some new ideas!

    It occurs to me that maybe other people might also be interested in owning a laptop like this, but don’t want to go through the trouble of fabricating their own circuit boards. If it seems like a few hundred folks are interested, I might be convinced to try a Kickstarter campaign in several months, once the design is stable and tested. However, I’m not looking to break any low-price records for this laptop — if you just want a cheap linux laptop you’re better off buying a netbook or EeePC. This is a low-volume, hand-crafted laptop made with uniquely open-source components, so the pricing would be consistent with such crafted goods.

    For those interested in the source files for the current early prototype iteration of the design, bounce over to the Novena wiki, and keep an eye on Xobs’ blog. Novena (yet another Singaporean metro station, and also Latin for “nine”) is our stand-in codename for the laptop motherboard.

    Name that Ware December 2012

    December 14th, 2012

    The Ware for December 2012 is shown below.

    If you’re seeing this, these are the backup images in case the caching server falls over. Most browsers won’t render these, but it looks like your browser isn’t supporting the hidden div tag correctly!

    This beautiful ware was scanned and uploaded to me by an anonymous reader, who wishes to release the photos into the public domain. The boards are all from the same device. I love these boards, there is a lot of craft & TLC in them. Thank you for sharing them with us!

    Winner, Name that Ware November 2012

    December 14th, 2012

    The Ware for November 2012 is an original IBM PCjr. A blast from the past! I had one of these kicking around at home when I was a kid. iirc, it was a discard from a local institution that was picked up out of the rubbish heap. It was, in all honesty, a bit of rubbish by the time I got my hands on it; we were just passing the PC-AT generation by that point and the PCjr had a really limited set of software. But I thought the hardware on the inside was pretty clean, so I kept the motherboard and the power supply around. The power supply itself I ended up using for a few years as a benchtop supply for other projects, but it is now long gone.

    Congrats to Jonathan for guessing it correctly! email me to claim your prize.