A Little More Planning
First, a little more planning…
As far as the length of the brackets, I wasn’t sure if my ceiling joists would line up with where I needed my shelves to be. Rather than take the time to figure it out, and potentially end up with smaller shelves due to where the joists were relative to the garage doors, I decided to be less efficient in my use of materials.
I decided to use larger brackets and hang them across several joists. This would allow me to position the shelf wherever I needed, rather than locking me into the location of the ceiling joists. In programming terms, I created loose coupling between the ceiling joists and the location of the shelf.
This would be more expensive. I would have to buy longer pieces of angle iron to bridge the gap between the joists, but it gave me two key advantages. First, I didn’t have to determine up front exactly where the shelves would hang. It reduced up front planning and allowed me to defer key decisions. Second, I didn’t have to reassess the size of the shelves relative to where I could hang the ceiling brackets.
I had to remind myself that my goal was a set of 2 foot by 4 foot shelves over each garage door. That was the only goal that mattered. Optimizing to use less materials (optimizing to reduce cost) was going to take me away from my goal. I also realized a secondary goal: To finish the project quickly. Because I was doing this on my own time and I highly value my time, I was willing to make some concessions on cost.
In terms of the iron triangle, I fixed my scope, wanted to control my schedule and was willing to give a bit on cost. Which, now that I think about it is not the way most software projects run…
This is Part 3. Other parts are here: Introduction, Part 1, Part 2, Part 3, Part 4, Part 5, Conclusion, Epilogue
Tradeoffs
Most projects try to fix all 3 elements (cost, scope, schedule). The only way these projects succeed (if they do) is because the team working on them increases the number of hours they work as the deadline approaches. The “fourth side” of the triangle is the amount of time the people on the project take away from their personal lives and their families. Not a great way to succeed and a recipe for burnout and turnover.
Agile projects acknowledge that you can’t fix all three sides and maintain quality. In my personal experience, I’ve most often seen scope being the thing that flexes. I’ve worked on a fixed schedule with a fixed team. We did commit to high-level scope up front, but were able to flex the scope on the features as needed to hit the deadline.
However with this being my own project, I focused on schedule and scope and let cost flex a bit.
How to Hang?
With the design for the ceiling brackets decided, the next problem to solve was how to hang the shelves approximately 17 inches from the ceiling.
My first thought was to buy a 24 inch piece of angle iron and cut it down to size. That is a cleaner, more elegant solution, but I didn’t have any equipment to cut it. This sent me down the google rabbit-hole researching how to cut angle iron:
- Cutting blade for a table saw or circular saw (not recommended)
- Hacksaw (I’m a developer by background and my arms are built for typing–I doubt I’d be able to easily accomplish that)
- Reciprocating saw (good option)
- Take the pieces to a local metal shop and have them cut (good option)
I thought based on initial measurements that 17 inches was the correct clearance, but the spec and the reality are often quite different.
I remembered my experiences in making key decisions too early. Because I don’t do projects like this very often, I realized that it wouldn’t be wise to commit the success of my project to the accuracy of my estimates. I chose to evaluate the success of this project based on my ability to build sturdy shelves, not on my ability to estimate accurately.
In the end I decided on a simpler solution. I chose to use 2 – 12 inch pieces bolted together. No cutting required and if I was wrong on my initial measurements, I could adjust on the fly and not have to wait on producing another custom piece. Again, the goal was the 2 foot by 4 foot shelves. Everything else was incidental and it didn’t matter to me if it didn’t look as cleanly put together.
This is another great lesson I’ve seen in software development. When you are starting, you are often better off using parts (objects, methods) you already have, rather than assuming you will need a custom-fit solution.
Until you have released your finished product into the wild and have real users, everything is just a guess. Get it out quickly, even if it isn’t elegant. Get it in use, even if it is (literally) two short pieces bolted together to make them longer. If it is truly important to have one nice, clean, unbroken piece, you can always swap that in later.
This is what makes the process agile (or more accurately anti-fragile). By not locking yourself in early on, you are able to react to the inevitable mistakes, problems or new requirements that come up.
Prototype & Build
With a plan and a list of materials, I was ready for the next step. Since I’m a big believer in testing something in real usage, I wanted to build one shelf first before making the commitment to the whole project and the accuracy of my plan.
My plan didn’t require any cutting of the angle iron and used standard lengths (12, 24 and 48 inch pieces). I looked locally for pieces this length and couldn’t find them. At my local hardware stores, I could find 36 and 48 inch pieces, but nothing shorter.
I then turned to Amazon looking for the shorter pieces and Prime (free) shipping. Again, my goal was to prototype my design with a minimum of cost and expense and I figured that ordering a few pieces with free shipping would be ok. It would delay my project by a few days, but would let me do things in the order I wanted.
Unfortunately you can’t get everything on Amazon. I could find longer pieces, but nothing short. I continued to look around and found what I was looking for at Hardware World. And the price was significantly lower than my local store. But the shipping was expensive (which is to be expected for 70 pounds of steel). At the end of the day my choices were:
- Buy local and figure out a way to get it cut to size (which would incur more cost and more delay)
- Buy enough online for the prototype (losing in shipping cost and increasing turnaround time to order the second batch)
- Buy it all online and ship it (cheapest and fastest solution, but only if my plan was right)
I reviewed my design and asked myself how confident was I in my materials list. Based my research and analysis, I was 95% confident I had the right list of materials…at least for the angle iron. For the bolts and hardware, I planned to buy those locally.
I decided to place the order. This was a big turning point in the project. At that point I’d only invested time. This was the real significant capital outlay. It wasn’t the point of no return. I’m sure I could have returned the material if it wasn’t right (and eaten ~$30 in shipping each way), but that is the cost of doing business.
Prototype Attempt 2
The materials arrived a few days later. Even though I hadn’t been able to prototype before purchasing all the materials, I still thought it wise to build one shelf first as a test.
Since I didn’t have any nuts, bolts or lag bolts, I bought those locally after testing to find the right size bolt for the angle iron I had. I’m pretty sure that 5/16 bolts are standard for angle iron, but didn’t know that at the time, and I wasn’t able to find it by googling.
This is another example of a deferred decision. I was forced into ordering all the slotted angle iron up front, but chose not to order the nuts and bolts online. The hardware was readily available locally (albeit at a higher price) and it gave me the chance to actually put a bolt through one of the slots and test it out before I bought the hardware.
With the angle iron and hardware purchased, I began installing. I hung the ceiling mounts and hanging supports. I then installed enough of the shelf supports to see if my calculations on the height of the shelves were correct.
I performed a real-world test. With all the bolts a little loose (so the whole rig would move if needed), I opened the garage door. I was nervous and stopped it before it got close to the shelf the first time up. Then I tried again and stopped it at its highest point to check the clearance.
The door cleared the shelf by about ¾ of an inch. Success. I ran the door up and down a few more times to be sure.
With the key acceptance test passed, I finished building the first shelf. This gave me a rough idea how long it would take to finish the second shelf. I finished the second shelf for that door the same day.
Then, as I moved on to build the second set of shelves, I fell victim to one of the classic blunders of software development: premature optimization.