About 3 and a half years ago, I decided to start an online store (Keebio) as an experiment to see how it would go. I had been into the mechanical keyboards hobby for about a year at that point and had already gone into doing custom builds and handwired boards. Nothing like adding in selling items to the mix, right? So I set aside $2,000 to buy some initial inventory like Gateron switches, Cherry MX deskmats (before the ongoing wave of deskmat runs), and switch springs. And thus, Keebio was born.
How did I get there though, and what was I doing?
My Past Career (well still kinda ongoing)
6 years ago, I was looking for a new position as a software developer. I interviewed at some different places, but this one early-stage startup stuck out to me. My previous company was a very large one, but the department I was in functioned somewhat like a startup, and I had gotten used to being involved with new products and doing lots of research while working on small 3–4 person teams.
One of the reasons I joined this new company was that I wanted to learn the ins and outs of a business, and by being on a small team at the beginning of the company, I’d get that opportunity to observe. By being one of the first employees, I was exposed to various aspects of the business, like customer service, marketing, and product development.
Within the first year with the company, I probably learned more than I had in 10 years with my previous company. In the realm of software development, I realized that in my previous role as an engineer (not software engineer, but still involving lots of coding), I never really learned proper practices and such, since we were mostly electrical engineers implementing algorithms. I had been stuck using a legacy framework that used FORTRAN 77, C++, and some crusty macro language. But now, I was free to figure out what tech stack to use and create desktop/mobile apps from scratch.
A couple months into the new position, we flipped the switch on releasing the product, and it was exciting watching those first few sales trickle in. We steadily kept working on adding new features based on customer feedback and our own use of the app. (I actually couldn’t use the app much except on my phone, since I was continuously working on it). Still, we had our ups and downs, but at some point, the CEO and CTO managed to get things stabilized and new team members were added here and there as we grew.
Right now, the company has over a dozen people, and it’s fun to think back to when there were 3 of us crammed into a small room in the early days.
Getting into keyboards
While working in the 3-person office, I was particular about keyboards and their feel, but didn’t get into mechanical keyboards because of the price. “Like who would buy a $150 keyboard?” The main ones I used to be drawn to were the Microsoft Natural Keyboards, and I would find one at a thrift store once in a while and use it until something would die on it (like a key). One of my co-workers though had gotten a Truly Ergonomic Keyboard, and whenever he was out for the day, I’d fiddle around with the keys (it had Cherry MX Greens) a bit to see what the fuss was about mechanical keyboards and if it was worth the price.
I didn’t really think much of it, but after a couple of random people I knew brought up the topic of mechanical keyboards, I decided to give it a go and picked up a Magicforce 68 (which I still have). It arrived the next day after I ordered it, and everything just snowballed from there. I got into buying switches, modifying them with different springs, lubing the stems, etc.
I also got into buying the keycap grab bags from Signature Plastic back when they were high in demand and would sell out right away when they went up for sale. Soon, I was trading and selling grab bag keycaps on MechMarket. With all my wheeling and dealing on MechMarket, I somehow got the brilliant idea that I should start an online store for keyboard parts.
I was mainly just interested in starting some sort of small e-commerce store to see how that would go and then take whatever I learned from that onto the next experiment/idea. After some research, I decided to use Shopify for the platform and found places to buy things to resell. Not too long after that, I got into creating PCBs and designed the Nyquist as my first keyboard design.
The Early Days
At the beginning, I did all the packing in my garage. Since it was the spring/summer, I’d be sweating in there while filling orders on-the-fly from my workbench, counting out diodes and screws. It wasn’t until later that I would start kitting items in advance to speed up the packing process. I became best friends with my garage, as I spent many late nights in there, staying up until 2–3am in the morning, as documented in a previous post. The next day, I’d have to get up at 6:45am to take the kids to school.
I also used to do custom builds for people early on, which ate up a lot of time, because there was the quoting process at the beginning, where only about 1/4 of the people would proceed with commissioning a build. Then after that, finding time to do builds would be hard. Luckily some people offered to handle this during different periods, and they would handle quoting and buying parts themselves. Shoutout to Joe and Frank for all their hard work!
Progress with Process
Over time, I would find various processes I could improve upon, like using scales for counting, buying a thermal label printer instead of printing off giant labels from an inkjet and cutting them down, and buying software/services like ShipStation and other Shopify apps to make life easier. Eventually, I hired a couple people for a few hours a week to help me out with kitting and packing orders.
Hiring additional help is not easy. Some people might think that you can just scale up by throwing people at a problem, and maybe this would be the case if everyone you hire is a mechanical keyboard expert, but that’s never really the case. Getting new people trained up takes a bunch of time, along with systemizing everything that needs to get done.
For instance, with packing orders, the first couple of people I hired had to know the name of every product and variations with minimal labelling. I shouldn’t have been too surprised when packing errors occurred. Eventually, I started to add 3-character codes to every item and labeled boxes accordingly, which has reduced the amount of errors, while also speeding up the process. This in itself hasn’t been foolproof either, as some 3-character codes are similar to each other and have been mixed up sometimes.
I’m still learning and tweaking the system as I go along. I don’t blame my employees if something goes wrong. Almost always, it’s because I didn’t make the systems good enough, got sloppy and missed some steps, or didn’t communicate things clearly.
While having a system can make things go faster, sometimes, I intentionally add steps in a process that makes things slower, but increases accuracy. For example, when orders are being fulfilled, there’s a 2-stage process going on. First, all the orders get packed. Then afterwards, those orders get shipping labels printed off and attached to the package.
There’s a few reasons why I do that, as opposed to packing and then labelling right away. The main reason is that I’ve added all the item weights into Shopify, which then appears in ShipStation when I do labelling. One of the steps I have in the labelling process is to check if the expected weight of the package matches the actual weight. If it’s too far off, we crack the package open and verify the contents. Also, this weight check often gets skipped over if someone packs the order and then immediately prints the shipping label.
Also, separating the two parts allows multiple people to work on packing/labelling. Frequently, I’ll have someone packing, while I go and print labels for the packages. It’s not uncommon for there to be issues with addresses, and I have to step in a lot of times to figure out how to adjust the address. But now, I also use a Shopify app that does some address validation and lets a customer know if the address needs to be corrected.
Transitioning to go Full-time
Having grown Keebio steadily over the past few years while still working a full-time job, one day my wife asked me last September, “When are you going to leave and go do your business full-time?” Without skipping a beat, I said, “Next March.” It was was six months away and Keebio had been doing well, so instinctively, that’s why I said that.
Finding a new home for Keebio
Next step was to get the ball rolling on the transition. I would need to get a real space. For the past couple of years, I was operating out of my home office, trusting my employees and even giving them the garage door code so they could get into my house. Initially, I just piled a bunch of boxes (many of them diaper boxes) onto the floor and would repurpose various IKEA storage units into something to hold all my boxes containing product kits. At some point, bought 3–4 shelving racks to stack boxes on to.
But it was time now to move out. I talked to a couple of other keyboard vendors, and they suggested that I find a commercial real estate agent to help me find a space. Okay, so now I had to find such an agent, how? I remembered a bit of advice from my brother-in-law who’s a lawyer regarding finding a lawyer: Don’t just go on Yelp and pick one, go ask another lawyer for their opinion, as they’ll have inside info on who’s good and who’s not.
Extending this idea to real estate, I asked my real estate agent who I’ve been seeing houses with for a while if she had any recommendations for commercial real estate. After a couple days of asking around, she gave me the name of someone she had worked with before, so I got in touch with the agent. I told her the various parameters for a space and location I was looking for, while she gave me a rundown of how commercial real estate differs from residential.
She sent me a number of listings in my area of interest, and I picked a few out to go visit. One of the spaces I found to be very interesting. It used to be the location of a newspaper, and the area that the newspaper was printed got converted to self-storage units and some retail spaces. It wasn’t your normal retail space since it’s not in a shopping center and is not easily visible, but it got a good amount of light into it with one side being mostly windows and was at a good price.
Getting the lease on the space wasn’t too difficult, but since I didn’t have any past commercial rentals, I had to submit extra info about my financials to prove that I could afford to pay rent. After my agent negotiated a couple of other items for me, everything was all set, and I got to move in a week earlier than when the lease started.
Hiring more help
Now that I had a new space, I felt more comfortable with hiring additional people to assist with packing and kitting items. So I posted up a job listing and got a few replies back. After some phone interviews, I hired a few people to add on to who I had already. To get them ready, I created a number of SOP (Standard Operating Procedure) documents to describe how to do certain tasks like packing orders, labeling packages, and general operations.
It wasn’t easy getting everyone up to speed on everything, but everybody is capable of fulfilling orders and soldering keyboards at this point. The process keeps on getting tweaked here and there, and recently, I did some reorganization to make certain items more accessible and easier to find. Some of my employees have also been able to pick up other aspects of the business off of my plate, like marketing, customer service, documentation, and design. The tricky part here is trying to figure out what everyone’s strengths and weaknesses are (including my own) and how to best work around them. I might address this in a future post.
Making the Final Jump
A couple months after setting up the store space and getting operations moving along, I was ready to make the leap to full-time. So in January, I had a conversation with my CEO about Keebio and how it had progressed, and we figured out a plan for me to be still remain involved with his company. A week or two later, I made the official announcement to everyone else at during a daily standup meeting and they wished me luck. I still hop on video calls with some of them for work meetings, so not quite a real goodbye, as I’ll talk about later.
Current State of Things
So how are things now with switching over to full-time?
You’d think maybe that by having a team of people helping me out, things would get easier. And in a way it has with new roles being handed out, but really, there’s just a different set of problems I have to take care of. But more on that in a bit.
My work day has certainly changed quite a bit now due to the switch to full-time, so here’s what a typical day looks like:
Wake up. Actually I lied, I hit the snooze button and sleep for 9 more minutes. I then get up, brush my teeth, do my hair, and get changed. Next I make some breakfast for the kids and myself.
Get the kids up and going with teeth brushing and changing clothes. Eat breakfast while getting other lunches ready.
Shuffle the kids into the van and head to school. Listen to some kids podcast on the drive like Brains On!, But Why, Wow in the World, or Circle Round.
Arrive at my office/store after dropping the kids off. Luckily my place is fairly close to their school (partly the reason why I chose this location). I first check my mailbox to see if anything has arrived. Then I’ll check through the customer service queue to see if any order changes are needed before running of order slips. Any slips that need special attention or handling on my end is set aside.
I do a fair amount of 3D printing, so I’ll check any prints that were done overnight and start on the next print if I need to. After that, I head to the gym, which is very close by, or go for a run.
Need to get back to the office by 9am, because, that’s when my employees arrive. The number of people I have come in each day varies between 1–3, depending on day of the week. Mondays tend to have more in order to handle the amount of orders queued up over the weekend.
I make sure that everyone has everything they need to get going for the day. If there’s keyboards that need to be built, I check that we’ve got all the necessary parts around. I’ll also run off all the packing slips for incoming orders when I get into the office and then do a quick audit on them as I’m separating the slips from the printer.
The work I do during the main chunk of the day will vary based on what needs to get done or what day of the week it is. I keep a list of what I’d like to get done each week and work through knocking each item out.
While everyone else is packing orders, kitting items, or building keyboards, I’ll be working on various things. One thing is knocking out customer service tickets. Some tickets are very quick, like order modifications or handling items missing from packages. Other tickets involve a lot more research, like figuring out why someone’s board is not working, and for instances like those, often I’ll look through the PCB design in KiCAD to track on possible sources of an issue and provide potential fixes.
Some of the tickets involve packages that are lost or are taking a long time to be delivered, which can happen fairly often with international packages. In this situation, I have to dig into the tracking info for the package and then file a help request with the 3rd-party shipping service I use to see if they can get more package info for me.
Some days, I’ll focus on keyboard design work, and that can encompass PCB design, QMK firmware work, or 3D CAD work in Fusion 360. I’ve been working a lot in Fusion 360 lately, doing my best to beef up my keyboard case design skills and generating STLs for designs people can print off.
Every week or so, I’ll dig into the inventory numbers to figure out what parts I need to reorder. And as certain items run out, I’ll reorganize the inventory around the store to make kits easier to find. There’s also packaging supplies that need to be reordered from time to time.
Since most of the items at Keebio involve some sort of kit, like case parts or bare PCB kits (for Pro Micro-based keyboards), I maintain a list of what kits need to be packed up and make sure whoever is doing kitting has all the supplies they need. I also have to tell them what defects to look for and figure out what to do with all the rejected items and where to place them.
About once or twice a week, I’ll have a meeting with a few members of my staff about projects. We’ll talk through the current projects that are ongoing, and I’ll review the what’s been completed, while providing feedback and guidance. We’ll also take a look at future tasks and come up with new ideas to take a look at. Since I do most of my project management through Trello, so we’ll examine the Trello boards and re-arrange cards as we change around the priority of items. Lastly, because we have an update newsletter that’s occasionally sent, I’ll make decisions on what content to include in each issue, since a lot of it depends on how our projects are going.
Online Storefront and Documentation Improvements
From time to time, I’ll work on improving the storefront website. This varies from updating product descriptions, reshooting pictures, and reconfiguring product variants. Sometimes the changes are customer-driven, where someone will send me a message asking me what parts to order due to how confusing things can be, especially for a newcomer to building keyboards.
Recently, after a couple months of work, I rolled out a redesign of the storefront using a different theme. It had been something I had been wanting to do for a couple of years now, but only found the time now to really dig into it. During the process, I also changed around the way pre-built keyboards are ordered, hopefully making the process easier to understand.
I’m also trying to keep up with adding more information about builds to the Keebio documentation site. What gets added to the docs site is also based somewhat on customer questions, since if a question gets asked frequently enough, it makes sense to do a write up about it to clear things up. There’s still plenty of work I want to do here still, as I’ve got a pile of topics I want to write about.
Occasionally, I’ll get the energy to shoot a tutorial or build video for posting up on YouTube. Although I’ve got the documentation site describing the build process with lots of pictures, I do realize that some people like to see the actual process itself in video form. Just like the documentation site, I’ve got a lot of ideas for future videos I’d like to make. At the moment, the videos I shoot are fairly raw and unscripted, which is the style that I currently like to work with.
I actually still work for my previous company on Tuesdays, because I’m still very much interested in the app that we make. I sit in on product planning meetings on Tuesday mornings for the Windows and Mac version of our app, and after those meetings, I work on whatever was decided during those meetings. Typically that involves reviewing pull requests from other people and generating builds for others to put through testing. Occasionally during the rest of the week, I’ll answer technical questions about the app (since I did a lot of the initial coding work on them) and make more test builds as needed.
I do payroll every week instead of every other week, because it’s much easier for me to remember who was around the previous week, rather than trying to think back for two weeks. There is a timesheet submission form everyone fills out for each day, but sometimes people forget, so I have to chase them down to get info about hours worked.
There’s also bookkeeping, where I’ve got to go through each expense and categorize them for tax reporting purposes. I do this once or twice a week so I don’t forget what an expense was for, but I also do mark down most expenses upfront in a spreadsheet to make the process easier.
Each month, I record monthly metrics about various things to make sure business is on-track, like revenue, number of orders, social media followers, and certain expense I want to pay attention to.
About once every week or two weeks, I’ll have someone that wants to do a local pickup of their order, since it’s an option I’ve provided. There’s a small bit of back and forth via email to schedule a pickup time, but nothing hard to deal with. I only allow for store visits by appointment only. From time to time, people just want to come by to test out boards and switches to see what they like before placing an order. So I’ve got a couple of shelving displays setup to show off most of the boards I sell, built with different switches so people can tell what they feel like.
It’s like a meetup of sorts, on a much smaller scale of course, where we’ll talk about keyboards in general, and I’ll answer questions about switches and keycap profiles. It’s a nice break to meet more people in the keyboard community, and a lot of the time, they’re surprised that there’s a local store they can go to buy keyboard parts. I find it amusing sometimes that North Carolina is somewhat of a hotbed for mechanical keyboard activity, with Keycult about 20 miles away, and other places like Little Keyboards and Kirball’s Keys out to the east of the state. There’s also some artisan makers in the area too.
End of Day
I leave to go pick up the kids from school. If it’s a day where they don’t have any afternoon activities, then sometimes I’ll take them back to the office so I can finish off some work. The kids love going to the office. Not because there’s keyboards, but because I have snacks around. I’m always fielding questions on if I have any new snacks or not.
Other times, I just head home to hang outside and play. Maybe I’ll check my phone to handle any new incoming customer service tickets. Okay, that maybe is a little bit more than just a maybe. I still think about keyboards and such outside of work. ¯\_(ツ)_/¯
Dinnertime. Nom nom. Get the kids to decide what they want for lunch tomorrow and for snack.
Get everyone to bed and cleanup downstairs.
Maybe answer some more CS tickets or doing some product work. Otherwise, do whatever.
Go to bed. Ideally, this should probably be 11pm, but things…
Things I worked on
Back in my previous post I had a list of a few things at the bottom that I wanted to work on. So here’s the result after 3 and a half years, how did I do?
On-board controller for PCBs: Less time needed to deal with packing components and troubleshooting Pro Micro issues
Yup, knocked that out, starting with the Iris Rev. 3, followed by Quefrency Rev. 2. I still keep various Pro Micro-based keyboards around still, due to shorter lead times.
Packing help: I have enlisted some other people to help pre-pack certain kit items for me to make packing orders faster
Once I moved the store out of my house and grew my staff size a bit more, I was able to get more consistent help with kitting and packing, so this isn’t a problem for me anymore. With the help that I’ve currently got, we have been able to fulfill most orders in less than a day. Not quite Amazon-like speed, but close.
Better documentation: With better docs, less build issues and questions
Woohoo! Yes, I did this too and spent a lot of time creating build guides and expanding out the FAQ here: Keebio Docs. I’ve also been trying to create tutorial videos on the Keebio YouTube channel, since it can be easier sometimes to watch than to read.
Better product status page: Less status questions to field
I keep an up-to-date Trello board with the product status of most items.
Overall, with the status board and improved documentation, I don’t have to answer very many basic questions in the customer service queue. I also have a Discord server for people to ask question in, and most of the time, some long-time Keebio customers familiar with my stuff will chime in to answer.
So it’s been nearly a year now since I kicked off the process of getting a physical store location. I wouldn’t necessarily say that things have gotten easier or harder, but instead there’s just a different set of problems I have to deal with. It’s been a very interesting ride this past year, and often, I have to step back and figure out where I want to take Keebio and what to do.
For the most part, I just like to make new things. I’ve got a number of keyboard projects lined up, and most of that involves making my current boards looking more like a real product, as opposed to these sandwich cases. Now that I can also do some 3D CAD work (as well as someone else on my staff), I’m actively working on having those fancy CNCd aluminum cases made. Also potentially going down the injection molding route as well for some boards. Some of them are also getting the Kailh hotswap socket treatment as well, as that is getting more popular.
Will I return to software development? Maybe. Right now, I have a list of certain things I want to learn, like new programming languages and methodologies, and maybe some data science, but I’m kept very busy with everything else going on. I did get to create a keyboard plate generator last year that uses TypeScript and React, and I was able to create a product I’m happy with, but there is a long list of features I’d like to add to it. Part of my 2–3 year plan does involve me spending time digging into more software development interests, so I’ll have to see how that ends up.
Lastly, I’m working on generating more keyboard content, as seen already with the YouTube channel. Sometimes I like to shoot a quick 5 minute tutorial video to get posted up, although, I haven’t done much along that front lately. I’m also hoping to do some streaming on Twitch again, as I had done so previously when I was doing a podcast regularly. I’ll probably do something like being Louis Rossmann but for keyboards instead, doing a bunch of SMT work as opposed to doing regular keyboard builds. Nothing posted yet other than 3D printing streams, but it’ll be at KeebioLab on Twitch, so maybe give it a follow so you’ll know when I start streaming.
Thanks for reading, hope you got something out of this. Come back for another blog post in 2 years (but hopefully sooner than that, I don’t know). But in the meantime, you can catch up with our bi-weekly newsletter or chat on the Keebio Discord server to stay in touch.
You can find our newest posts at https://blog.keeb.io