Simple is not the same as easy
I've been a hobby woodworker for about 15 years. When I first started out, I saw a pattern for a simple garden bench in a woodworking magazine. I showed my wife a picture of the finished project and declared, "I'm going to build this for you."
I was wrong.
Blissful in my ignorance, I went to the local Home Depot and bought all the lumber I would need for my project. I got home and started cutting the wood down to size. At the time, I had a crosscut hand saw, a jigsaw, and a circular saw.
The first few cuts were easy. Then I got to the legs. I had to glue together three boards for each leg. No problem. Then I had to make a long, angled cut along the length of each leg. "This cut is easiest on the bandsaw," read the project plan, "but it can also be done on a table saw." I did not have a bandsaw ($200 - $1,000+). I did not have a table saw ($200 - $3,000+).
"Well," thought I, "now what?"
I considered my options. I couldn't use the circular saw; there was not enough surface area to safely support it. I couldn't use the jigsaw; the glued up board was too thick for my blades. The crosscut saw was the safest option, but it wasn't made for rip cuts. I managed to make it work, but it wasn't pretty.
The legs looked like they had been chiseled by an OCD beaver.
I persevered. A few hours with some coarse grit sandpaper got the legs looking respectable. I finally had all my pieces cut to size. It was time to start on the joinery. The project called for mortise-and-tenon joints. If you've never tried to cut a mortise-and-tenon joint, it looks easy enough.
The tenon is straightforward, but it requires a high-degree of precision to make it fit snugly inside the mortise. I'll leave it to you to imagine what level of precision I was operating at in my first real woodworking project.
Then there's the mortise. It turns out that cutting a perfectly square hole inside a piece of wood is exceedingly difficult. It's easiest to do with a dedicated mortising machine ($300 - $1,000+). It can also be done with a router ($100 - $200). Or by hand with a drill and chisel. I owned a drill and chisel, so that's what I went with.
For a fine craftsman, there's no better way to show off one's skills than with a chisel. Unfortunately, the same is true for a poor craftsman.
After many days of work, I had transformed that original pile of lumber into ... a slightly smaller pile of lumber. None of the pieces fit together quite right. The cuts were all rough and slightly out of square. The resulting mess looked like a poor man's forgery of a Salvador Dalí jumbo Jenga set.
Discouraged, I set the pieces aside and assessed what had gone wrong. My conclusion? I had tried to do too much, too fast.
I blamed my woodworking instructor. He had done a poor job preparing me for this project. He'd never even introduced me to most of the techniques I needed to complete the project. Why he ever thought I was capable of tackling this as a first project is a complete mystery to me.
Being self-taught, this was a humbling realization.
A better way
I learned a lot from this first failed project. I began focusing on one new skill or tool at a time. I chose projects where I already knew most of the required techniques. With each successive project, my toolset--both literal and figurative--grew.
Fifteen years later, I'm still not a fine craftsman. But I have built many functional pieces of furniture, and even a few relatively nice pieces. I got to this point by getting a little better with each project, by stacking skills, techniques, tools, and knowledge until I was capable of far more than in my humble beginnings.
Software developers take heed
I write a lot about best practices when developing Microsoft Access applications. If you are a frequent reader of the blog, the sheer volume of the recommendations may seem overwhelming. And I'm just one writer among many on the internet.
From setting up version control and implementing doc testing, to avoiding common sources of technical debt and creating professional Access installers, you might think you need to learn and do everything all at once.
I know that's what I thought when I first started programming. I would read a best practice, understand why it's a best practice, but then realize it's not currently my practice.
You spend enough time reading other people's best practices and it's easy to start questioning your own abilities. It's easy to start feeling like an imposter.
But here's the thing. The day you stop reading about some new best practice that you're not currently following is the day you stop growing as a software developer.
You'll never know everything there is to know about being a great developer.
You'll never follow every best practice.
You'll never achieve perfection.
So stop trying. Stop trying to be perfect. Don't hold yourself to impossible standards. Focus on one new best practice, one new programming technique. Then focus on another one. And then another. And then another.
And every so often take a moment to look behind you and appreciate how far you've grown.
Happy learning. Enjoy the journey.