Tag Archives: Projects

The Guts of the FIRE Spreadsheet

In my previous post I introduced a spreadsheet (download link here) that allowed you to calculate what number you need to hit in order to safely retire for the rest of your life. In this post I’ll dig into how the spreadsheet works, so that you can understand where these numbers are coming from, and how you can incorporate the techniques into your own modelling. There’s a number of different steps involved in the simulation, so let’s start from the bottom and work up!

1) Model the Market

Making an accurate model of future financial market behavior is a fool’s errand, making a statistical model only slightly less so. So we’re going to do just that.

I pulled historical returns from the S&P 500 (a total stock index fund) and 10-year Treasury Bonds, as well as historical inflation. From these I calculated means, medians, and standard deviations, and modelled future returns as normal distributions. The distributions of this data are not symmetrical, which is to say they are slightly skewed towards one side. My poor-man’s method of correcting for this was to use the average of the data’s mean and median as the normal distribution’s mean. You can see below the models I used in black overlaid on the historical data in gray.

For the curious, here are the real-world stats:

Mean ReturnMedian ReturnSkew(Mean + Median)/2Standard Deviation
S&P 50011.4%13.9%-0.1212.6%19.8%
T. Bonds5.2%3.5%0.234.3%7.8%

The stocks and bonds are decent fits, but going back to 1914 means that our inflation model includes two world wars and the 1970s recession that throws off our distribution quite a bit. As pictured, restricting the inflation data to the past 30 years gives an almost perfect fit. However I think that given that we have had several periods of high inflation in the past century, a simulation that extends a further 100 years out should hold the possibility for the same.

Normal distributions do well enough for our purposes, but I the weakest point of this entire simulation is in these models – I’d like to be able to incorporate skewed distributions that hug the data better, and autocorrelation (esp. for inflation) would be nice. If anyone knows some simple ways to do this please leave a comment.

2) Model spending and income

Spending and side-income will also be modelled as (surprise!) normal distributions. The only difference from the market models is that we include a spending minimum threshold (user-set), as well as an income lower threshold ($0). For example, below is the spending probability curve for a scenario where our minimum expenses are $20k, our target spending is $25k, and our 3σ (three standard deviations) variation in spending is ±$15k. Any part of the bell curve that lands to the left of $20k is brought up to this minimum.

Spending model

Spending model

This simulation accounts for inflation in all these, so your spending and income will rise over time to account for cost-of-living increases.

3) Simulate a long and (sometimes) prosperous life

Now that the models are built and we have our inputs, it’s time to simulate our lifetime financial performance. Looking at the screenshot below should make these calculations obvious.

The full 100 year simulation

A full 100 year simulation

Kidding. There are a lot of columns in there that are nothing more than either shared inputs for other columns, or alternate ways at looking at the same numbers. So let’s hide everything but the relevant columns, and zoom in to the first two years.

Essential columns of the simulation

The simulation is straightforward. You start a year with a given net worth. You spend and earn a certain amount that year, as randomly chosen based on the probability models discussed earlier and adjusted by the cumulative inflation up until that point in time. Market percent returns are randomly chosen, and those percent returns are applied to your beginning balance (minus half your spending and plus half your other income, which is an assumption that you have earned and spent half of the year’s total at the halfway point in the year). This give you your market dollar returns. Then your year-end balance is simply found by taking your starting balance, subtracting your spending, adding your income, and adding in your dollar market returns.  Repeat for the next 100 years.

4) Live 1000 lives

Since our 100-year simulation is based off of randomly-drawn numbers, it is only one of an infinite number of possible outcomes. Finding all of these and computing an exact success rate is a bit beyond my available computing power. However looking at 1000 of them and determining an approximate success rate is completely doable. This approach is called a Monte Carlo simulation, and it is used for this sort of analysis in a wide range of industries.

Excel is a slow tool to be using for Monte-Carlo simulations, and the 1000 number was arbitrarily chosen as something that gives decent results while not melting my laptop in a pool of white hot compounding interest. However, it is small enough though that we’ll see statistical noise in the end results. Ideally you want to scrap this whole spreadsheet and write it up in a proper programming language so that instead of 1000 cases, you can run a million.

How to do this? I’m going to cheat and refer you to the youtube video that showed me how to implement Monte-Carlos in Excel. Only the first few minutes are relevant.

To distill the video into a sentence, make a top row with the formulas you want to apply to the 100-year simulation and extend it down 1000 rows using a slightly-hacked data table. For our analysis we are monitoring whether we ever hit a net worth lower than our minimum income, for different time horizons. Setting this as our first row, we end up with the table below.

The results of the Monte Carlo runs

The success rates at the top is counting the number of successes as a proportion of the total number of Monte Carlo runs.

5) Repeat the above for nest eggs of varying size

There is no good way to automatically run multiple Monte Carlo analyses in Excel, and so this has to be done by copying and pasting a one-row group of results multiple times. This is tedious, so the copy and pasting is done using a dirt-simple Excel macro that I whipped up.

The table that feeds the monte-carlo analysis and pulls the results back

The table that feeds the monte-carlo analysis and pulls the results back. We copy from here

I didn’t have any experience doing Excel macros/VBA before this, and it was surprisingly easy – I highly recommend trying to do it yourself so you gain that experience. For education and for those wary to enable macros on unknown spreadsheets they download from the internet (generally a smart idea!), here’s what’s executed when you click the ‘Recalculate Results’ button.

Private Sub CommandButton1_Click()
Dim i As Integer
Dim pasteRow As Integer
Dim numSteps

numSteps = Sheet7.Range("C9").Value - 1
For i = 0 To numSteps
    Application.ScreenUpdating = False
    pasteRow = 8 + i
    Sheet7.Range("B4").Value = i
    Sheet2.Cells(pasteRow, 6).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
Next i
End Sub

And so finally, the calculated results are all copied into a single table, and we have the data we are looking for. From there it’s a simple process of graphing these results and looking up the recommended target net worth/withdrawal rate for your given acceptable chance of success.

The analysis inputs on the left, the calculated results in the center, and the processed results on the right.

In the graph of the results, we can see the statistical noise that I mentioned earlier. If I were generating results to publish I would bring the number of Monte Carlo runs up to 10,000, which would smooth those lines out a bit and let us take a smaller step size (at the cost of taking 20 minutes to finish). For trying out different scenarios though, this is fine.

Some other implementation notes

One input that isn’t quite clear is the ‘Spending Correlation to Market’. This variable is meant to tie your spending to the market, so that you spend less in a down market and more in an up market. Say that your spending for that year randomly comes out to +2σ. Setting this correlation to 100% means that if the total market movement (i.e. movement of stocks and bonds as weighted by your investment ratio) is -2σ, then spending will adjusted to -2σ. If the correlation is set to say 75%, then in this scenario spending will be adjusted to -1σ (which is 75% of the distance between the two variables). On the other far end, setting the correlation to -100% will mean that you tend to spend more in a down market and less in an up market. (I don’t recommend living this way).

There are several different basic bond-stock allocation strategies I’ve built in, and these are implemented by populating a few tables and deciding which one to use through a series of nested ‘if’ statements that check the strategy the user has selected. There’s a ‘custom’ option if you want to throw in your own strategy without messing with the defaults.


I hope this was helpful in explaining what goes into this financial simulation, and perhaps helpful for building your own. Finance is not my field, and if I’ve made some major mistakes then please let me know so I can correct them, but otherwise I encourage you to download the spreadsheet and play around with it.

A FIRE Number Targeter Using Monte Carlo Simulations

I spent last Saturday and Sunday putting together a spreadsheet to help me determine my FIRE number, which is the amount of money you have to accumulate to be fully Financially Independent and Retire Early from the invested returns alone. (If you’re new to the concept of early retirement, here is a post that explains the idea.) This post will describe the basics of how to use this spreadsheet, and my next post explains how it works.


The standard way of finding your FIRE number is the ‘4% rule’, which is the result of the Trinity study. The authors of that study determined that shooting for a 4% withdrawal rate (or in other words, making sure that your nest egg is at least 25x your yearly expenses), will nearly always guarantee that you wouldn’t run out of funds over any 30-year time period in history. However while the 4% rule is a good rule of thumb, the Trinity study lacks a lot of considerations that are relevant to someone pursuing FIRE:

  • A 30 year time horizon is not nearly long enough. 50-90 year time horizons are more realistic.
  • There is no consideration for earning money in retirement.
  • There is no consideration for variability in spending.
  • There is no consideration for adjusting spending to market behavior.
  • There is no consideration for lifestyle inflation.
  • Social security is completely ignored.
  • Only one asset allocation strategy is looked at (75% stocks/25% bonds).
  • The study relies solely on historical returns. This is ok for its 30-year spans of market behavior, but there are not enough 80-year spans in history to build up an accurate picture of potential scenarios for us. This is also a weakness of the popular tool FIREcalc. We need a predictive model.

So I decided that I needed a way to address these considerations, and the result is this Excel spreadsheet. It uses Monte Carlo analysis to run 1000 test cases of a lifetime of financial performance. I am releasing it under the Creative Commons BY-SA license, which basically means that you are more than welcome to use it for anything, tear it apart, and post it anywhere, as long as you credit here as the source. You can download the spreadsheet here from google drive, and note that you’ll have to enable content to run it.


Open up the spreadsheet and this is what you see. The cells you need to edit are the light yellow ones on the left. All values here are in current year dollars, and will be adjusted for inflation as the years go on so that purchasing power stays constant.

The analysis inputs on the left, the calculated results in the center, and the processed results on the right.

The analysis inputs on the left, the calculated results in the center, and the processed results on the right.

For the basic inputs, fill in your current age and the age you want to hit FIRE. Your minimum expenses are your basic housing, food, hygiene, medical, and transportation expenses, and this is the value that below which the simulation considers the outcome a failure. Your target spending is how much you want to spend each year, and the spending variability is how much your actual spending may vary on either side of that. Your average yearly side income is how much you expect to make in retirement, and that has variability as well. Finally, your acceptable chance of success is how sure you want to be that this will all work out in the end. No strategy is absolutely 100% successful, but if you are cautious enough, there are many scenarios that will give you 99.9% success. Personally I’m more of a risk taker and am shooting for around 75-80%.

The investment allocations section is fairly straightforward. I built in several asset allocation strategies: ‘Fixed Ratios’, ‘Age in Bonds‘, ‘Age-10 in Bonds’, and ‘Age-20 in Bonds’. There is also a ‘Custom’ option for which you’ll need to fill out the values for manually in the ‘Scratch Calcs’ tab of the spreadsheet.

Below this we find the option to include social security payouts. You can estimate your yearly social security payout using this government tool, and feel free to be as pessimistic as you like in guessing whether social security will be around by the time you hit the official ‘retirement age’.

Your spending correlation to market is a variable that lets you adjust your spending to how the market is doing. So if the market is having a bad year and your correlation is 50%, you will be making moderate adjustments to lower your spending accordingly. This value can range between -100% and +100%, where negative numbers mean that your spending increases if the market is down (for whatever reason).

Lifestyle inflation is bad. But you can account for it here as well.

And finally at the bottom we have simulation inputs that define what starting values we want to run the simulation for. Because we are only running 1000 test cases, a step size less than 0.25% is essentially worthless because it will get lost in the statistical noise.

Simulation inputs.

That’s it for inputs! If you want to use the spreadsheet as-is, just hit the ‘Recalculate Results’ button and let it chug away. It will take about a minute to run.

Reading the Results

As the spreadsheet works away, you will start to see the middle table fill up with results. These are the raw outputs from the simulation, and give the success rates for different time horizons (by default I chose 20, 40, and 100 years), for different starting sizes of your investment portfolio.

If you want time horizons others than those listed, you can change where the cells in the ‘Table to Calculate On’ in the ‘Scratch Calcs’ tab of the spreadsheet are pointing to.

Table of raw results.

These raw results are then graphed and compared to your acceptable chance of success, to give you your recommended target net worth, both in current year dollars and in the inflation-adjusted dollars of your starting retirement age. You can see in the graph the success curve as a function of time horizon and starting withdrawal rate. Note that these curves are slightly noisy (ie not smooth), which is a result of the statistical variation that is inherent to Monte Carlo simulations.

Processed results that give you your personal recommendation.

And that’s everything! If you’re interested in how these work or if you want to modify or extend this simulation, check out the post on how the internals of the simulation works. Otherwise, I hope this is a useful tool for you in planning for your own future, and let me know if it helped you in determining your own FIRE number.

A Wooden Laser-Cut Topo Map of Portland, ME


A couple months ago, I was on the internet and ran across Below The Boat, a website that sells wooden topographical maps of interesting lakefloors and seafloors around the world. Now, something you should know about me is that my family loves maps. My parents have nautical charts up on the walls in several rooms of the house, whenever I move states I get fold-out roadmaps of that state as gifts, and the first thing I got for my new apartment out of college was a big 5-foot map of the world to hang above my desk. So as you can imagine, when I ran across this idea I immediately decided that I had to make one. Christmas was coming up, so what better than to make my family a map of our hometown of Portland, ME?

I drew inspiration from Below the Boat (which shows the shape of the seafloor with flat land), this reddit post (which showed the shape of the land with flat water), and this beautiful table. With the idea in mind, I set off down a rabbit hole of cartography websites to figure out how the hell I was going to do this.

The design and build process that I came up with are too long to throw into one post, so I broke them out into a separate two post how-to guide. These should give you enough detail and direction to be able to make your own if you want to.

In the end, I’m incredibly happy with how it turned out, and the family loved it! Here are some more pics of the finished product. Click on them to enlarge.

And as a side note, if anyone has a laser cutter they’re not using any more and that they’d be willing to part with for ≤$2k, I’m looking for one! I promise to do cool stuff with it.

Update: Wow, after an overwhelmingly positive response on reddit, I’ve decided to spin this up into a side business doing custom maps on commission. It will take some time to set up, but if you want to hear when launch happens go ahead and throw your email on strataforma.com (my working name for now).


Making a Laser-Cut Topo Map: The Design Phase

Today I’ll be walking you through the process how to of make a wooden laser-cut topo map. I made one of my hometown of Portland, ME as a 2015 Christmas present for my family, and wanted to share how I did it since it took quite a bit of figuring out. If you’re not sure what I’m talking about, go check out pictures of the final product! Otherwise, here is a breakdown of the design phase, which continues to the build phase in the next post.

The design process:

  1. Download the needed software.
  2. Find elevation and road data and download it.
  3. Load up the elevation data and extract contour lines.
  4. Export the contour lines as .svg files.
  5. Load and export the road data as well.
  6. Load your .svg files and clean them up.
  7. Separate out your vectors into elevation layers.
  8. Add any custom art you want.
  9. Triple check everything to make sure it’s right.
  10. Export to a laser cutter format and send it off.

Let’s get started!

1. Download the needed software

You are going to need to download two pieces of software:

  1. QGIS, to load elevation and road data (free).
  2. A vector graphics editor such as Adobe Illustrator (paid) or Inkscape (free).

The number and depth of incredibly niche communities on the internet never ceases to surprise me. For example: cartographers! Before this project I had never considered the existence of a rich culture of map-makers. Turns out the cartography community is huge, ranging from from a wikipedia-style map of the world, to people drawing crazy maps of imaginary places, to hugely complex pieces of free open-source software to create custom maps. This last one is QGIS, which we’re going to use to load the raw elevation/road data and extract contour lines. It has far more capability than I can hope to understand, but is pretty straightforward for our purpose.

I used Illustrator for this project since I had it already, so my instructions will be for that. But Inkscape should work just as well – we won’t be doing anything fancy that would be program-specific.

I was completely new to QGIS and mostly new to Illustrator at the onset of this project, so if there are ways to speed up this process that I missed, please let me know in the comments! And if you run into issues, I won’t be of any help – your best bet is to use google and the forums dedicated to the software. I’ll be a bit more detailed with the QGIS process since Illustrator/Inkscape are really well documented and you should be able to figure out unfamiliar steps much easier.

2. Find elevation and road data and download it

The US Federal Government provides nationwide geographical data for free through the US Geological Survey website. However, I found it fairly hard to navigate and had a lot easier time going through my State. Here is the link to the Maine Office of GIS (Geographical Information System) that we’ll be using. Every state should have a similar website, and internationally I expect most developed countries to also provide this sort of data.

We are looking for two things: a digital elevation model (DEM), and a shapefile of our area’s roads. You can find both on that page. Other things of note which we won’t be using are the National Hydrography Dataset (for lakes and rivers), Lake Depth Soundings, and Bathymetry (for ocean depth, which would be necessary if the DEM didn’t include the depths in the port of Portland).

3. Load up the elevation data and extract contour lines

Now that you have your elevation data, it’s time to load it up into QGIS. Open up QGIS Desktop, and click the ‘Add Raster Layer’ button (circled in red). Navigate to your DEM file and click ‘ok’ on the default coordinate reference selection window. Your window should now look something like this:


The elevation data loaded into QGIS, where white is high and black is low. Sea level should be a 50-50 gray.

Zoom into your area of interest (in this case, the Portland peninsula). If you’re using a 4-year old laptop like me, this can be slow to zoom and pan around. Once you have your view, click ‘Raster’ > ‘Extraction’ > ‘Contour…’ on the top title bar. In the window that pops up, select a path for your output file and give it a name. This will create a folder with that name and put your output contour files into it.

Now set your interval between contour lines. The DEM I’m using is in units of meters, so I put in ’10’ to give 10-meter (roughly 30 ft) contour lines. The contour lines will be every 10 meters as measured from sea level, which is fine since we’re on the coast. But if you want to a specific elevation as ‘0’ (such as if you were basing the map around an inland lake at say 235m), you can enter ‘-off 235’ as an option in the command window to offset the contour reference elevation.

Give it some time to chug through and process the data, and voila! Out spit the contours.


Yeah, that’s starting to look like Portland.

Now, this is still a bit messy. There are a bunch of tiny contours that are going to be troublesome when cutting the wood. So let’s clean up this data by removing all the short contour lines.

To do this, right-click on your contours layer (circled in red), and click ‘Open Attribute Table’. From there, click ‘Open Field Calculator’ (circled in blue). Type in ‘length’ into the output field name, and ‘$length*1000’ into the expression text box. Our distances are in units of km, so ‘$length*1000’ will give us length in meters (I think – I’m actually not 100% sure what unit this length is measuring). Click ‘ok’ to have QGIS calculate the length of all the lines, and then ‘Save Edits’ to apply the change (circled in green). Close out the window, right-click on your contours layer, click ‘Toggle Editing’, and save the changes.


This took me a while to figure out.

Now, to get rid of all the short contours, right-click on the contours layer and click ‘Filter…’. Type in ‘”length” > 10’ into the box to include only contour lines longer than 10m and hit ‘ok’. Play with this to get something you like.


Compare this to the previous screenshot. Much cleaner!

4. Export the contour lines as .svg files

Now our data processing is done, and we can save this as something we can edit. Uncheck the box next to your DEM layer to hide the shaded elevation and leave just the contour lines. Click ‘New Print Composer’ (circled in red),and click through the pop up box. Click ‘Add new Map’ (circled in blue) and use the pointer to draw a box in the white print area. Click ‘Export to SVG’ (circled in green) and save it. Finally, something we can use with a normal vector graphics editor!


This took me forever to figure out as well. There was an ‘export to SVG’ plugin I found that didn’t work anymore, which frustrated me until I realized that the functionality was built in.

5. Load and export the road data as well

The road data is much simpler, since it’s already in a vector format. Click ‘Add Vector Layer’ (circled in red) to load your road data, and follow the same steps as above to export it to svg.


I find it pretty neat that all this data is freely available.

6. Load your .svg files and clean them up

Ok, we’re done with QGIS now. Fire up Illustrator and make a new document. Your artboard should be the size of the wood sheets you’re using (in my case, 24″ x 12″). Load up the contour and road .svg files you just created and put them in as layers into this new file. Make sure their fill is set to ‘transparent’, and they have a thin stroke so you can see the details in the line (these options are circled in red). Now is a good time to make sure all these lines are in the right format for the laser cutter, because you’ll be making a lot of copies of these lines. The cutter I was using wanted blue lines for cuts, and red lines or black fills for etching.

Manually align and resize the contours and roads so they overlap correctly and are at the scale you want. Note that the lines are all grouped together – you may want to right-click and hit ‘Ungroup’ a few times if you’re editing individual lines. Things are coming together now!


An Illustrator tip: when you’re resizing, hold the shift key to keep the aspect ratio constant.

If you want, you can skip to the next step at this point. However the contour lines are fairly jagged and I wanted them to be smooth in the final map. You can use the ‘Object’ > ‘Path’ > ‘Simplify…’ tool to do a first pass and clean it up with the ‘Smooth Tool’. I actually found it faster to roughly trace out the contours by hand on a new layer and do some minimal smoothing after that.

I didn’t want to make the man-made objects smoothed out, however,so I went back and straightened the bridges and the piers. I took a screenshot of google maps and threw it in a new bottom layer to help me out with figuring out where stuff should be. Google uses a different map projection so things won’t line up exactly, but it’ll be close enough to give you an idea.


7. Separate out your vectors into elevation layers

Ok, so the file now pretty much looks like how we’ll want it in the final map from a top-down view. But we’ll have to separate out the data into different layers so we can feed it to the laser cutter one layer at a time.

Create a bunch of new layers – as many as you have elevation levels. I had seven levels (spanning 70 meters – about 210 feet) but remember that you need an extra blank layer for the back face. Which makes eight layers total. With 1/8″ wood sheets, that will give the final map a total thickness of 1 inch.

Now ungroup the contour lines and move them to their respective layers.


Here’s my 90ft elevation layer.

You should also add some margin to the outer edge. To do this, create a new top layer that contains two bounding boxes: an outer one that is the same size as the artboard, and an inner one set about 1/2″ inside the outer one. Give the outer bounding box a white fill, and the inner one a transparent fill with a blue stroke (for cutting). Select both bounding boxes, and using the pathfinder window click ‘Minus Back’. This creates a white frame that covers up everything outside the inner bounding box, giving you that margin.

Now comes the complicated part: having each layer show only the roads you want to have engraved on that layer. Enlarge the image below and look at the layers window to follow along. On each layer, you’ll want to have two copies of the current contours (here, 90ft), one copy of the roads, one copy of the layer above (here, 120ft), and one copy of the combined bounding boxes. Stack them like so:

  • Roads go on the bottom. Use one of the current contours (90ft) to clip out all the roads you don’t want by selecting both and selecting ‘Minus Back’ in the pathfinder window. You’ll have to ungroup the contour lines and turn them all into a single compound path before doing this. Same with the roads.
  • The other copy of the current contours (90ft) goes next, with a blue stroke (for cutting) and transparent fill.
  • Next comes the copy of the contours from the next layer above (120ft), with a white fill. You can put a red stroke (for etching) on this which will help with positioning during construction, but I recommend leaving it transparent since it will be visible if you glue the pieces of wood slightly off-target. See here for a picture of what I mean.
  • On top comes the combined bounding boxes to clean up the edge.

The 90ft elevation layer all finished.

Do this for each layer, hiding all the ones you’re not working on so you can clearly see what’s happening. All of this masking is so that we don’t cut or etch things we don’t need to, since time on the laser is $$$.

Important: all this masking won’t work for every laser cutter! I was lucky enough to find a company with a setup that accepted masking, and if you own a laser cutter then you’ll probably be able to figure it out. However, if you’re using a service like Ponoko.com, their laser cutters completely ignore masks. Their cutters see everything as in Illustrator’s ‘Outline View’, which you can toggle by pressing ‘ctrl-y’, and the result isn’t pretty:


The masked 90ft layer in outline view, as seen by Ponoko. Everything is unhidden and this is way more expensive than it needs to be. Especially since their price estimator includes all lines outside the artboard print area.

If you’re using an outside company to do your laser cutting, ask them specifically if masking will work. If it doesn’t, then you’ll have to manually delete all the lines you don’t want cut or etched. I haven’t found an efficient way to do this, so if anyone knows how please leave a comment!

8. Add any custom art you want

Some ideas of fun stuff to add:

  • A compass rose. I grabbed this one off of wikipedia and removed everything but the star. Stick an ‘N’ on top for cardinality.
  • Labeling. I put a big ‘Portland, Maine’ on mine, but you could be more fine-scaled by labeling areas, bodies of water, major roads, etc. For all labeling, you’ll have to convert the text to outlines once your wording and formatting is finalized.
  • A scale.
  • Elevation markers.
  • A message. I have one on the back for the family with a short message, my name, and the date.
  • Your signature (scan, import, and live trace).
  • Bridges. I was up in the air about whether to include them, so I cut them separately so I could add them in later. After finishing it I definitely recommend including bridges as part of the first land layer.
  • Points of interest: Buildings? Shipwrecks? Mountain peaks?
  • More data! I put in ferry routes. You could add footpaths, a repeating texture to show forests or land cover, political boundaries, dots for cities, etc.

Make sure these are on the right layers!

Something else that you might find useful is slotted holes on the back so that you can hang the map on the wall with nails. I was about to make one hole in the center, but realized that since the final map will have more wood on one side than the other, it would tilt to that side when hung on the wall. So I made two symmetrical holes far enough apart to support the uneven weight distribution.


A closeup of the mounting holes on the back of the finished map which allow for hanging on nails. Note that the cutouts need to be bigger on the inner layer or the head of the nail won’t slide up!

9. Triple check everything to make sure it’s right

Some things to look out for:

  • Overlapping contour lines.
  • Roads that go into the water.
  • Etches that should be cuts, and cuts that should be etches.
  • Lines on the wrong layers (hide all the layers and cycle through them one at a time).

Errors are pretty easy to redo if you own a laser cutter, but if you’re sending it out to a company it’ll take a week to redo and ship out to you. It might be worthwhile to print out the layers on printer paper, cut them out with scissors, stack them, and see if everything looks good before sending the files off.


The final product, with all the layers showing.

10. Export to a suitable laser cutter format and send it off

You’re done with the design phase! Go through every layer, hide the rest, and export it to whatever format the laser cutter can use. A .eps should work. Zip up all these files, send them off to a few companies for quotes, and come back to this site in a week when your package shows up. You may want to order the other supplies you’ll need at this time, which I’ll go over in the next post. Next step is the build phase.

Continue on to the build phase!

Or, see pictures of the completed project!

Making a Laser-Cut Topo Map: The Build Phase

So you’ve followed the steps to design your topo map by reading through the post detailing the design phase. Time to cut it out and build it!

The build process:

  1. Gather supplies.
  2. Get your wood cut.
  3. Apply blue stain for the water layers.
  4. Glue everything together.
  5. Apply wood sealer.
  6. Frame it up.

Pretty easy – once you cut the wood it shouldn’t take more than half a day, most of which is waiting for stuff to dry.

1. Gather supplies

You’re going to need a couple things to put this map together:

  • Wood sheets, as raw material to cut out of. I used 12″ x 24″ x 1/8″ sheets of birch plywood. Obviously if you’re ordering from a company you can skip this.
  • Wood glue.
  • Clamps – the more the merrier.
  • Sandpaper.
  • Some blue wood stain, if you have water layers. I used this one off amazon. Make sure it’s water-based so you can dilute it.
  • Some clear wood sealer or shellac.
  • Some cheap brushes to put on the stain and the sealer.
  • A frame, if you want it. I ordered a black metal frame from AmericanFrame.com and it worked perfectly. Make sure you get the right thickness for however thick your map is along the edges.

2. Get your wood cut

Either you have access to a laser cutter or you sent it off to a company to get it done at the end of the design phase. I was running out of time before Christmas to have it done, so I found a local company (Engrave Colorado) that was able to do it on short notice. Either way, in go raw sheets of wood, and out come your engraved pieces.


Fresh out of the laser cutter, and stacked up for the first time. A huge relief that it came out (almost) perfect on the first try.

At this point you should stack up all your layers to make sure that everything is there and that you don’t have any major mistakes. You did triple check the files beforehand, right? Sandpaper should clean up any splinters or chips in the wood.

You also may notice that there is some discoloration along the cut edges of the wood. A damp cloth will rub that off if it bothers you.


3. Apply blue stain for the water layers

I wanted the water to get darker the deeper it was, and I think it was the right approach. Get your stain and test it out on some of the leftover scrap wood to see how blue it is at different dilution ratios (e.g. 1 part stain to 2 parts water). This is also a good time to cover your table with something to protect it from stray drops of blue stain.

Once you figure out what you want, sketch out on the wood where you need to apply stain and brush it on. When in doubt you can start with the darkest and keep diluting it as you go up layers. Remember too that you can always go too light and add more later to darken, but you can’t take away color. Wait for it all to dry before making the final call.


I’m pretty happy with the way the coloring turned out.


4. Glue everything together

You’ve all glued stuff before, so I’ll skip the preamble and just leave a few tips:

  • Clamps are your friend here.
  • Clamps also squeeze out a lot of extra glue, so you probably need less than you think – especially near edges.
  • If you need to apply pressure in the middle and clamps won’t reach, use a scrap piece of wood to span across the top and clamp that.
  • Build up layer by layer – having layers at different levels makes the above method difficult.
  • Make sure your positioning is perfect, since this thing isn’t coming apart. Aligning the outside edges is probably most important.
  • Tightening clamps can cause pieces to shift or twist. Be careful.

I’m pretty sure this is the only time I’ve ever used these old textbooks.


5. Apply wood sealer

Brush on your sealer (I used shellac), let it dry, and you’re done!


6. Frame it up

If your map turned out anything like mine, the outer edges aren’t perfectly aligned and have dried glue crusted on them. I was originally going to leave mine bare, but the guy at Engrave Colorado recommended getting some cheap black metal frames to finish it up (link to the supplier up in the list of supplies). Which was a really good call – it hides the imperfect edges and makes the whole thing look really polished in the end. Plus you won’t have to worry about chipping off small edge pieces when handling the map.


The back during framing.


The finished product. This took me about 3 weeks of evenings after work, but that includes all the research it took to figure out how to do this.

Congratulations! You’ve finished up a one-of-a-kind piece of art, and hopefully it’s turned out well. I’m still pretty astonished how well mine came out on the first try,  even though there are a few things I would improve if I were to do it again.

I hope this how-to guide was useful, or at least interesting to read through. If you end up making your own topo map, please let me know! I’d love to hear about it. And if anyone has a laser cutter they’re not using any more and that they’d be willing to part with for ≤$2k, I’d love to hear about that too.

Check out some glamour shots of the finished map!


CAD files for the Antikythera Mechanism

Update June 2015: I’m revisiting this project to finally get it to a version where it can be manufactured at home. Check greekgears.com for future updates. I have also withdrawn the files and re-released them under a similar noncommercial license.

Update June 2016: Haven’t forgotten about this project, but I’m back in grad school so free time is limited. I’ve gotten it to a point where I’ll need a laser cutter to test out design options, so things are pending me finding one I can get.

By request, I’m making the CAD files for the model of the Antikythera Mechanism that I created freely available. (Click that link for an overview of the project.)

Download the Antikythera Mechanism from Google Drive here. You’ll need Solidworks to open it, and 3D PRINTING WILL PROBABLY NOT WORK. I’ve gotten asked that a lot.


It isn’t perfect. There are a few issues that would keep it from working if you 3D printed this, and a few more issues that make it not completely authentic to the original Mechanism. Here are the places where the model differs from the Antikythera Mechanism. Italicized issues keep it from working if it was 3D printed. I estimate it would take me 40-50 hours to fix them (it would require a redo of a lot of parts), which I don’t really have time for right now. But… if someone had access to a 3D printer and would print me a copy pro bono, I might be motivated enough to clean it up.

  1. All gears except for the lunar phase geartrain are assumed to have a module of 0.5. This is actually the mean value of the modules for all gears in the Mechanism. A more accurate model would account for variations in the gears. In one instance, this creates a collision between a gear and a support as it travels around. A few gears should also be thicker.
  2. I didn’t use values for the pin placement radii on the epicycle gears. These can be found in Freeth and Jones’ “The Cosmos in the Antikythera Mechanism.”
  3. Two indicators should slide onto the Metonic and Saros pointers, and track in the engraved spiral on the back face. Solidworks had issues with a tangent relationship to a spiral, so these are suppressed in the model (but are still there!).
  4. The Antikythera Mechanism used a combination of adhesives, pins, and friction fits as fasteners. The model uses no fasteners, and would need a few if printed. All the gears that need to have locked rotations are keyed and spaced out with spacers, but some of the keys are really small loose pieces and should be changed.
  5. There are no tolerances built into this model.
  6. The Antikythera Mechanism used triangular teeth. The model uses involute profiles. Solidworks was having issues creating these profiles in a couple cases, and a few gears don’t mesh correctly.
  7. The wooden frame, pointers, and posts are creative interpretations. The large pointers should be removable in the real model to allow the indicators to reset.
  8. The planet positions are not zeroed to any celestial day.

Despite these differences, the form, function, and essence of the Antikythera Mechanism remain intact.


Also, some licensing info!

I am releasing this to the public under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 Licence. This is a mouthful, but it basically means that you are free to use, edit, and redistribute these files so long as you a) credit me for originally making them, b) don’t use them to make money, and c) apply the same license whenever you redistribute it. This means they will be forever free. With the following exceptions!

  1. The files “plate back lower dial v4.png” and “plate back upper dial v4.png” are taken from Freeth et al. “Calendars with Olympiad and Eclipse Prediction on the Antikythera Mechanism: Supplementary Notes”, and slightly edited by me. Copyright belongs to original owners, however because it is a published paper all educational uses are fair use.
  2. The file “plate front v2.png” is taken from this image, originally made by J. Evans and A. Thorndike, and edited by me. Copyright belongs to original owners. (They might mind if you use it educationally. I doubt it though.)

Presenting: The Antikythera Mechanism

Update June 2015: I’m revisiting this project to finally get it to a version where it can be manufactured at home. Check greekgears.com for future updates.


The Antikythera Mechanism is the world’s first known mechanical computer, used by ancient Greeks to predict the path of planets in the sky, the dates of eclipses, lunar phases, and several religious calendars. It was made sometime around 100BC, and it was not until a thousand years later that anything rivaling its complexity was found. Before its discovery we had no idea the Greeks had technology anywhere near this sophisticated.

For a CAD class this semester, I reconstructed the Antikythera Mechanism as a 3D model in Solidworks. It’s to scale, and it works! Watch the video to see it in action, and turn on annotations for a description. Alternatively, download the CAD files for yourself.

The video goes pretty quickly, so I’ll show some pictures of the key features below.

The front face is a planetary display. Pointers track the position of the 5 planets known to the Greeks, the sun, and the moon, all as observed from Earth. These pointers track along the inner ring, which displays the zodiac (the position of each object in the sky). Because of the different speeds of these orbits, some of the planets experience apparent retrograde motion, and capturing this epicycle motion is the reason for much of the complex gearing system. The front also displays the date, which tracks along the 12-months outer ring. At the center of it all is a ball representing the moon, painted black on one side and white on the other. This rotates to show the moon’s phase on any given date – black for a new moon and white for a full moon, with everything in between. You can see this in the video pretty clearly.

The back face is a calendar display. The top half tracks the Metonic Cycle (19 years) and the Callypic Cycle (76 years), which form the basis of the Greek calendar. It also tracks the cycle of the Olympic Games (every 4 years). The bottom half tracks the Saros Cycle (223 lunar months), and the Exeligmos Cycle (669 lunar months), which can be used to predict solar and lunar eclipses! Scientific American has a great infographic on how to use the Antikythera Mechanism to predict an eclipse.

How does it all fit together inside? Well, during my research I found that there wasn’t a complete picture of how the gears were all related. There was a good picture for the bottom half, but the rest had to be cobbled together from several different places. So to help me visualize it while working on the project, I drew up a map of how everything fit together. And because I had some free time yesterday, I cleaned it up and put together this infographic to make it all clear (it’s on wikipedia now so it doesn’t get lost). It’s pretty self-explanatory, and hopefully it will be helpful if anyone in the future wants to make their own reconstruction.

Gearing Relationships of the Antikythera Mechanism

I’m pretty awestruck, to be honest, that someone was able to make this over 2000 years ago. Even though it was built during the time of Rome’s peak ascendency, it is so many levels above any other technology we have from that day that it seems almost anachronistic. I had enough issues coming to understand the complexity and detail that is packed into this small box, and I already knew how it was going to work! It makes you wonder what other marvels were created that have been lost to time.

“This device is just extraordinary, the only thing of its kind. The design is beautiful, the astronomy is exactly right. The way the mechanics are designed just makes your jaw drop. Whoever has done this has done it extremely carefully … in terms of historic and scarcity value, I have to regard this mechanism as being more valuable than the Mona Lisa.”

–   Professor Michael Edmunds, as quoted in The Guardian

I’ll close off with a list of the papers I used. The first Freeth paper was by far the most helpful, and I might have been able to make it based off of just that paper alone. The others were helpful for context and comparison though. And this youtube video, even though it was for a different gearing schema than the one I used, was helpful in wrapping my head around how it would go together. 

Evans, James, et al. “Solar Anomaly and Planetary Displays in the Antikythera Mechanism.” Journal of the History of Astronomy 61 (2010)
Freeth, Tony, and Alexander Jones. The Cosmos in the Antikythera Mechanism. Institute for the Study of the Ancient World, 2012.
Freet, Tony, et al. “Calendars with Olympiad display and eclipse prediction on the Antikythera Mechanism.” Nature 454 (2008): 614-617
Freeth, Tony, et al. “Decoding the ancient Greek astronomical calculator known as the Antikythera Mechanism.” Nature 444 (2006): 587-591.
Wright, Michael T. “The Antikythera Mechanism: A new gearing scheme.” Bull. Sci. Instrum. Soc 85 (2005): 2-7.