Kitchen Shelving

As we renovate our house, we are living in a much smaller place with a really small kitchen. When we got a Linea Mini and a Eureka Zenith 65E High Speed Espresso Grinder for Christmas, we needed a good spot and I designed a set of shelves to fit in our kitchen alcove and dramatically improve the space. This post shares my design process and the tools I use to save time and money.

Right now, our kitchen looks like this. Yes, my daughter is wearing an I ❤️code github shirt.

And we want to have something like this

First, to generate the design, I used Sketchup which is super fast and a good way to get a feel for what is possible. Critical to getting fast drawings in Sketchup is a good laser measuring device, I love this one.

From my initial sketches and discussions with Chrissy, I picked a design that gave us shelf space and didn’t interfere with the walls of our rental.

My initial design looked like this:

Which I felt gave us the maximum storage and shelf space. Notice how my sketchup drawings lack engineering detail. For engineering design, I turn to Fusion 360 from AutoDesk.

Fusion 360 is simply amazing software that enables fully parameterized design. This allowed me to start with rough measurements and to keep refining the design by changing parameters. My daughter and I measured the following parameters:

This allowed me to iterate with my wife several times until I ended up with a design we liked.

Notice the increased detail. I even modeled the right properties of the wood so I could get weight and cost estimates, which all comes out of the box with Fusion 360. After the final design was complete, I was then able to model the detail, such as the dado cuts and model the structrual support. So if you look closely at the design, you will see that I can get the exact dimensions.

This enabled me to build a cut list, which showed me that I would have to use 5 4×8 sheets of plywood to complete the design. I first did this by using the joints feature of Fusion 360 to see that I had parts that wouldn’t fit.

I used google slides to play around with different sizes on a screenshot, and modified the design to fit on three sheets. This is where the parameterized design really helps.

Then I had to add structural detail.

In order to make my cuts accurately and minimize waste and to finalize my cuts, used an optimization heuristic check out the math. In terms of computational complexity, the 2d cutting stock problem is an NP-hard problem reducible to the knapsack problem. The problem can be formulated as an integer linear programming problem. I’ve studied this problem a bit, and I find it interesting because of how degenerate the solution space is: multiple solutions with the same amount of waste are possible. This degeneracy arises because it is possible to move items around, creating new patterns, without affecting the amount of waste. However, some have claimed optimality in some circumstances. To get optimality you have to do things like enumerate the possible cutting patterns, and solve the associated integer program by a combination of cutting planes and branch and bound.

You don’t have to know this. It is all implemented at I had to do some units manipulation and rounded up the nearest 1/16th which is my wordworking tolerance without a cabinet saw. FYI, this formula helped: ROUNDUP((A2*12)*16,0)/16.

Cutlist optimizer produced a nice set of cuts.

# Panel Cut Dim
1 48×96 y=13″ 96″
2 13×96 y=66.06″ 13″
3 34.87×96 y=29.75″ 96″
4 29.75×96 y=13″ 29.75″
5 13×29.81 y=12.13″ 13″
6 13×17.55 y=12.13″ 13″
7 29.75×82.87 y=81.13″ 29.75″
8 29.75×81.13 y=13″ 81.13″
9 16.62×81.13 y=13″ 81.13″
1 48×96 y=66.06″ 48″
2 48×66.06 y=13″ 66.06″
3 34.87×66.06 y=13″ 66.06″
4 21.74×66.06 y=13″ 66.06″
5 48×29.81 y=36.31″ 29.81″
6 36.31×29.81 y=29″ 36.31″
1 48×96 y=36.38″ 96″
2 36.38×96 y=74.63″ 36.38″

I also like that it planned my cuts with a 17 cut optimized design. Overall for three sheets, I was able to use 72% of the area with a total cut length of 897.44". Now, I’m ready to build and hopefully end up with something like this: