Public Radio's Testing & Fulfillment Planning

Recently, the work on the Public Radio has shifted into organizing ourselves in preparation for fulfillment (..Finally!)  However, shipping 1600+ radios over the next 4 weeks, all tuned to unique frequencies is an interesting problem, and we’ve spent a little while thinking about the ways to best tackle this last stage of the project, namely in regards to accuracy, cost, and speed.  

Our approach has been to merge the radio’s electrical test, and flashing of the firmware with our shipping data and serial numbers.   Some early idea generation was:

Yea.. not the best handwriting :)

Yea.. not the best handwriting :)

And now here’s basically what that looks like in slightly different approach in real time.

There's still a ton of RF interference when using the rig at my desk, so the programmed radio has quite of bit of static.  

To back up a bit though, our challenge is to match a backer name and shipping address with a desired FM frequency and radio serial number. So in the end for example, we know that John Smith has radio # 0001, tuned to 88.3, shipping to ‘some address’.  This wouldn’t be so hard, except that we’re working across a couple databases.  

What Kickstarter provides creators with, is a CSV formatted according to the questions posed in the *one* survey they're allowed to send to backers.  In hind sight, I would have formatted all of my questions differently - in a more standardized approach so that integrating with address books, and 3rd party shipping services were a bit easier.  

Somewhat of a mess.. Check out the "pick one for me" response in the frequency field :)

So, we’ve invested in a couple tools for this.  We have an test bed PCB we designed, connected to a Raspberry Pi,  the meat of which is an over-current comparator circuit that flags boards which have shorts, as well as connections to an AVR programmer to actually flash the radios, an external speaker, and some LEDs to indicate pass/fail status.  

This board will end up being revised due to some clearance issues with the various ribbon cables, and header spacings.  


Additionally, we picked up a barcode scanner and thermal printer.  The scanner is basically plug and play - scan a barcode, it emits a string of characters - and the thermal printer is as well.  To boot, we’ve gotten ourselves an account with to be able to print USPS postage. This all saves us a considerable amount of money.  


The challenging part is that we want to do a couple of things at the same time in this last step, and it means merging our pretty messy backer data with Endicia or (they're the same company, actually). Additionally,  Endicia wants to import data via your address book, which has it's own formatting, so it's a little bit of a pain. Then if you want to export your Endicia data, it wants to spit out an XML file or some other format, not a simply a csv.. It's just a little harder than it all should be, and meanwhile you're crossing your fingers you didn't lop off 20 names in the process.  

With all of that sorted out, we end up with a database in Endicia, which provides just enough fields to include FM Frequency, Serial #, and Campaign, in addition to shipping info. So the pre-production process becomes:

  • Move all backer data into Endicia 
  • Print out shipping labels for all verified addresses 
  • Print out barcodes for all radios to be shipped 
  • Pull down Endicia report / csv / XML file (this becomes our master list)

At this point we have two barcodes our scanner can read, one which relates to the radio's serial number and one which relates to the backer's shipping data.  Using a bash script we've been pulling together this week,  and command line tools like 'grep' and 'sed', we can search our Endicia database for the tracking number,  find the backer's FM Frequency on that same line, and later append data to that line.  So the next step in the production process becomes:

  • Execute the bash script
  • Scan the shipping label  
  • Search the database for the line that has that unique tracking #
  • Pull out the corresponding frequency and store as a variable
  • Scan the radio's serial # barcode 
  • Store that as a variable
  • Run the electrical test 
  • If passed, program the radio with the backer's frequency 
  • Append the Endicia csv with the backer's radio serial #  

Phew, a mouth full.  In the end we'll hopefully be left with a document that has everyone's tracking info, station frequency, and radio serial number that we can match up with Kickstarter's online database for the project, and end up with smiles and boxes of radios.  


The whole process though, has made me think a lot about ways to improve on Kickstarter fulfillment.  A wish list of creator tools if you will.  

  • Shipping estimates 
    • Etsy is doing it.. I haven't spoken to anyone who's used it yet, but it would be such a nice thing to have next time around.  We decided on a shipping cost by essentially averaging the cost of radios we'd previously sent across the country in our beta round. But our shipping costs make up 25% of our cost-of-goods-sold - that's a huge!! number to be guessing on.  
  • More than one backer survey
    • We struggled with this one. We decided to essentially vet our 'Maker Kit' backers to be sure they knew what they were in for, asking questions like "Do you own a soldering iron?" But this meant we also had to ask for their shipping addresses then as well.  Some of our reward tiers coincidentally were for kits AND assembled radios which meant some folks weren't given the option of opting out of the kit, they just received the first and only survey for shipping address and frequency.  
  • Shipping data that is more easily integrated into self-fulfillment services.  
    • As more people run medium sized successful campaigns, hand writing labels or doing post office runs isn't feasible, though the financials rarely work out to make third party fulfillment services that attractive either.  With a more integrated process, it would be easier for people to pick up a thermal printer and do those steps themselves.