The Code Adventurer: Episode Six – The Climactic Battle and the First Great Post

·

A young woman with a glowing sword and amulet writes on a scroll in ancient stone ruins beside a defeated dark shadow creature with a cracked glowing core.

The Final Boss Has No Health Bar

There is a particular kind of silence that settles over a room when a person is alone with a blank document and a cursor that will not stop blinking.

Our Adventurer had faced CSS specificity wars and survived. Had stared down PHP fatal errors at half past eleven at night and found the missing semicolon. Had untangled JavaScript’s asynchronous chaos and built a Gutenberg block that took three days and emerged the other side with a working thing and a slightly thousand-yard stare. Had mapped the WordPress database schema on a printout on the wall and traced the relationships between eleven tables with a pencil.

And now, on a Thursday morning in October, with a cup of tea that had already gone cold and the notes document open in one window and the WordPress block editor open in another, Our Adventurer was paralysed.

Not by a bug.

Not by an error message.

Not by a missing semicolon or a specificity conflict or an asynchronous function that returned undefined when it should have returned data.

By the blank page.

The post that was supposed to be the culmination of everything had a title: “Everything I Have Learned About WordPress in One Year.” And forty-seven words of an introduction that Our Adventurer had written, deleted, rewritten, deleted again, and replaced with a fresh blank cursor.

The final boss, it turned out, was not a programming language.

The final boss was the blank page. The voice that said: who are you to write this? The voice that said: someone smarter has already written this better. The voice that said: this is not ready yet, you are not ready yet, wait until you know more, wait until you are more qualified, wait until the moment is right.

The voice, as Our Adventurer would later write in the post itself, was lying.


Chapter One: The Anatomy of the Boss Fight

The blank page problem is not unique to bloggers. It visits novelists and playwrights and screenwriters and journalists and students writing essays at midnight. It visits anyone who has ever had to put something they know into words for someone else to read. It is the gap between “I understand this” and “I can explain this clearly.”

Our Adventurer had been writing for almost a year at this point. Forty-seven posts. Some of them quite long. Several of them genuinely good. The CSS guide had been downloaded over four hundred times. The PHP post had prompted emails from readers saying things like “you explained the loop better than any tutorial I have found.” The HTML post had gone mildly viral in a web development newsletter.

And yet.

The year-anniversary post felt different. It felt weighted. It felt like the post that could either cement everything that had been built or expose it as a structure with no foundation. The impostor syndrome, Our Adventurer’s therapist had once explained, does not disappear when you become more competent. It shifts. It finds new angles. When you are a beginner, the voice says you do not know enough to write. When you are less of a beginner, the voice says your knowledge is still insufficient for a post this significant. The voice is adaptive. The voice is clever. The voice is also, in every case, wrong.

Our Adventurer made a fresh cup of tea, sat back down, and opened the notes document.

The notes document was the secret weapon. It had been started in the meal-planning notebook and then migrated to a digital document over the previous six months. It contained fragments: half-finished thoughts, observations about things that had been difficult to learn, metaphors that had helped a concept click, questions that readers had asked in comments that had sparked deeper understanding. It was a messy, unstructured document of about fourteen thousand words. Nobody was ever supposed to read it.

But it contained the post. The post was already there, in pieces, in the notes. It just needed assembling.


Chapter Two: The Outline as a Weapon

The thing that beat the blank page, Our Adventurer discovered, was structure. Not the final structure of the post (that could evolve in writing) but the pre-writing structure. The outline. The skeleton before the flesh.

An outline was not a rigid plan. It was a declaration of intent. It said: I am going to write about these things, in roughly this order, for roughly these reasons. It converted the terrifying expanse of “a post about everything I have learned” into a series of smaller, manageable questions. And manageable questions could be answered one at a time.

Our Adventurer wrote the outline in fifteen minutes:

Opening: Where I started. The YouTube video about the ceramic mugs. The naivety of thinking “I’ll just make a WordPress site.” The things I did not know I did not know.

The CSS chapter: Why CSS feels like chaos at first and structure later. The one realisation that changed everything (the box model). The moment Flexbox made layout feel possible.

The HTML chapter: Why semantic HTML matters beyond making validators happy. The moment I understood that accessibility is not optional and not separate from good HTML. It is the same thing.

The PHP chapter: The missing semicolon and what it actually taught me about debugging. The hooks and filters and why WordPress’s architecture is, once you understand it, genuinely elegant. The white screen of death as a rite of passage.

The JavaScript chapter: The difference between “JavaScript works in my browser” and “I understand why JavaScript works.” The Gutenberg block as the hardest thing I built and why I would build it again.

The database chapter: Why understanding the schema changed how I thought about everything above it. How WP_Query is less magic and more translation once you can see what it is translating.

The meta-lesson: What all of this actually taught me, beyond the technical knowledge. How to learn. How to get unstuck. How to be wrong repeatedly without stopping.

The letter: To anyone reading this who is at the beginning. What I wish I had known.

The outline sat there on the screen. Fourteen bullet points. Each one a section. Each section a question to answer. The blank page was not blank anymore. It was a map.

Our Adventurer started writing.


Chapter Three: The Draft, Imperfect and Necessary

The first draft of the post took three days.

Not three days of eight-hour sessions. Three days of writing when the words were there, stepping away when they were not, coming back the next morning with fresh eyes and a willingness to cut things that had seemed important the night before.

The first morning produced the opening section and the CSS chapter. About two thousand words, written in a flow that felt like the best kind of writing: when you are not thinking about the writing but about the thing you are trying to explain, and the words arrive as a byproduct of the explanation rather than as the point of the exercise.

The second day was harder. The HTML and PHP sections involved sitting with the notes document for long stretches, pulling out the right fragments, finding the narrative thread. There were several moments where Our Adventurer wrote a paragraph, read it back, and deleted it because it was technically accurate but communicated nothing. Accuracy without clarity was not useful to the reader. It was only useful to the writer’s sense of having been thorough.

The JavaScript section wrote itself. Our Adventurer had lived through the Gutenberg block episode so recently and so vividly that the telling of it came easily. The three days of building, the initial despair at the tooling, the slow progression from “I do not understand any of this” to “I understand enough of this to continue” to “it works,” the satisfaction of using the block in subsequent posts. That narrative arc was clear and present. It went on the page almost exactly as it had happened.

The database section was the most technical and required the most restraint. Our Adventurer had spent a concentrated period learning about the database schema and WP_Query and direct database queries, and the temptation was to include all of it. Every table. Every query. Every argument. But the reader of this post was not a database administrator. The reader was someone at the beginning, who needed to know that the database existed and that it was knowable, not that it was intricate in these specific seventeen ways.

Our Adventurer cut the database section by about forty percent. The remaining sixty percent was better for the absence of the other forty.

Then came the meta-lesson, which was the hardest section to write and ended up being the shortest. What had all of this actually taught Our Adventurer, beyond the technical skills?

Our Adventurer sat with this question for a full morning. Went for a walk. Made lunch. Came back. And wrote, in a single uninterrupted thirty-minute session:

It taught me that being confused is not the same as being wrong to try. It taught me that the gap between “I do not understand this” and “I understand this” is almost always smaller than it feels when you are standing in the gap. It taught me that the things that feel like failures (the white screen of death, the three-day Gutenberg block, the 54 out of 100 PageSpeed score) were the things I learned the most from, because failure gives you feedback that success does not.

It taught me that consistency beats intensity. I did not write the best post every week. I wrote a post every week, some of them mediocre, some of them surprisingly good, all of them better than not writing anything. The compound interest of showing up regularly is a more powerful learning mechanism than occasional bursts of determined effort separated by long silences.

It taught me that explaining something to other people is one of the best ways to understand it yourself. I understood CSS better for having written a guide to it. I understood PHP better for having narrated my confusion to three hundred email subscribers. The act of translating knowledge into clear language reveals the edges of the knowledge, the places where you think you understand but actually have a gap. Those revealed gaps become the next thing to learn.

And it taught me, in the end, that the voice that says “you are not ready yet” is not a guardian. It is a thief. It steals the posts that could have helped someone who was in the place you were six months ago. Every post I delayed because I did not feel qualified to write it was a post that was not there for the person who needed it. That is not humility. That is a kind of hoarding.

Our Adventurer read this back. It was the truest thing in the document. It stayed.


Chapter Four: The Letter to the Beginning

The final section of the post was a letter. Our Adventurer had decided, somewhere in the writing of the third day, that the post should end not with conclusions but with a direct address to the person at the beginning. The person who was where Our Adventurer had been a year ago. The person watching YouTube videos about ceramic mugs and thinking “maybe I could do that.”

The letter came out like this:

Dear person at the beginning,

You are going to be confused. This is not a problem. This is the process. Confusion is what learning feels like from the inside. If you are not confused, you are either very gifted (possible but statistically unusual) or you are only engaging with things you already know (comfortable but not growth).

You are going to break things. Specifically, you are going to break your WordPress site in ways that seem catastrophic and irreversible. Most of them will not be. The white screen of death has a fix. The broken layout has a cause. The plugin conflict has a solution. Very few mistakes in WordPress are truly permanent, especially if you have backups, and you should have backups.

You are going to compare yourself to people who seem to know everything already. These people were once where you are. They have simply had longer to practice. Their confident blog posts and slick tutorial videos represent the end state of a learning process that involved at least as much confusion and frustration as yours. They have just not written the confusion down, or the confusion was edited out, or it was so long ago they have forgotten how it felt.

You do not need to learn everything before you start. You need to learn enough to take the next step. Then you take the step and learn what the step reveals you need to know next. This is not a shortcut. It is the actual path. The people who wait until they know everything before they begin are still waiting.

You are allowed to publish posts that are less than perfect. In fact, you should. The imperfect post that exists and helps someone is worth infinitely more than the perfect post that lives in a drafts folder because you were not satisfied with the third paragraph. You can always update a post. You cannot un-not-publish it.

Find one thing that genuinely puzzles or frustrates you about the web and write honestly about your attempt to understand it. That post will find the people who are puzzled by the same thing. That audience is the one worth building, because it is made of real people with real problems you can actually help with, rather than an imagined audience of experts who will evaluate your competence.

The thing you are building matters. The blog, the site, the product, the archive of what you have learned. It does not matter that it is imperfect at the start. It matters that it exists, that it is updated, that it reflects genuine engagement with the material. That is the thing that compounds over time. That is the thing that, a year from now, you will look back at and be surprised by.

Start.

Yours,

Someone who started a year ago and is glad they did.

Our Adventurer read the letter back twice. Left it alone for an hour. Read it a third time.

It stayed entirely as written.


Chapter Five: The Pre-Publish Checklist

The draft was done. Three days of writing, over five thousand words, assembled from a year of learning and a notes document that nobody was ever supposed to read.

But the draft being done and the post being ready were not the same thing. Our Adventurer had developed, over forty-seven posts, a pre-publish checklist. A set of things to verify before clicking Publish. Not because the checklist was fun (it was not particularly fun) but because publishing a post with a broken link or a missing featured image or an unoptimised title was the kind of thing that was easy to prevent and embarrassing to fix after the fact.

The checklist lived in the notes document and it said:

Images: Every image in the post has been compressed and converted to WebP. Every image has an alt text that describes the image accurately. The featured image has been selected and looks good at both desktop and mobile dimensions. No images are broken (loading as blank squares).

Links: Every internal link has been tested and leads to the correct page. Every external link has been opened and verified as active. Any external links to documentation or references open in a new tab (using the link settings in the block editor). There are no dead links from copy-pasting old content.

SEO: The Yoast SEO panel (green light status) has been reviewed. The focus keyword is present in the title, the first paragraph, and at least two subheadings. The meta description is written and is between 120 and 155 characters. The URL slug is clean, human-readable, and does not contain unnecessary words.

Categories and tags: The post is assigned to the correct primary category. Tags are relevant and not created just for the sake of having tags. No duplicate categories accidentally selected.

Permalink: The slug has been manually set rather than auto-generated from the full title. Auto-generated slugs from long titles are often ugly. “everything-i-have-learned-about-wordpress-in-one-year” rather than the auto-generated version which sometimes includes every word including “the” and “a.”

Excerpt: A manual excerpt has been written. Letting WordPress auto-generate the excerpt from the first paragraph works, but a manually written excerpt is more likely to accurately represent the full post and is more compelling in newsletter previews and social shares.

Preview on mobile: The post has been previewed at mobile dimensions in the WordPress preview tool and in an actual phone browser. Something that looks fine at desktop width can have layout issues at mobile width, especially around images and code blocks.

Reading time and length: The post is long enough to justify the title’s implied scope. “Everything I have learned about WordPress in one year” being five hundred words would be a disappointment. At five thousand words, it was substantive. The reading time estimate (visible in the Yoast panel) was approximately twenty-two minutes, which was on the long side but appropriate for the content.

Internal linking: At least two links to previous posts had been woven naturally into the text. This was both good for SEO (internal links pass relevance signals between pages) and good for readers (it invited them to explore related content). The related posts section at the bottom would add more, but contextual internal links in the body of the post were more valuable.

Email notification: The email list notification was ready to send after publishing. The newsletter for this particular post had been drafted in Mailchimp three days earlier, as part of the writing process, because writing the newsletter summary forced clarity about what the post was actually about and who it was for.

Our Adventurer went through the checklist item by item. One broken link fixed (a link to a documentation page that had moved). One missing alt text added. The slug shortened from the auto-generated version to something cleaner. Everything else: in order.

The checklist took forty minutes.

It was 4:47 PM on a Thursday afternoon in October.

The post was ready.


Chapter Six: The Moment of Publish

Our Adventurer had published forty-seven posts before this one. The act of clicking Publish was not new. It had been nerve-wracking on the first post (a short, tentative thing about setting up WordPress that had received six page views, five of which were probably Our Adventurer refreshing to see if anyone had read it). By the tenth post it had felt routine. By the thirtieth it had become a reflex.

But this one felt different in the way that the first post had felt different. There was weight to it. The year-anniversary post was a line in the sand. It was a document of what had been learned and how, a letter to the beginning, a record of the journey from someone who had watched a YouTube video about ceramic mugs to someone who understood the WordPress database schema and had opinions about WP_Query performance.

Our Adventurer read the post one final time. All five thousand, three hundred and twelve words of it. Made two small edits (a repeated word in the PHP section, a slightly clunky phrase in the letter). Looked at the featured image (a photograph of the A5 lined notebook that had replaced the meal-planning notebook, open to a page of PHP notes, lying next to a mug of tea on the wooden desk). It was a good image. It was honest.

And then, at 5:03 PM on a Thursday afternoon in October, Our Adventurer moved the cursor to the blue Publish button in the top right corner of the WordPress block editor, paused for approximately two seconds, and clicked it.

The page reloaded.

The post status changed from Draft to Published.

A small notification appeared: “Post published.”

That was it. No fanfare. No explosion of confetti. No dramatic music. Just a status change and a notification, the same as all forty-seven posts before it. The internet had, in its quiet and indifferent way, received a new document and indexed it for anyone who wanted to find it.

Our Adventurer made a cup of tea, sat down, and read the post one more time in its published state, on the live site, with the proper fonts and the correct layout and the related posts section at the bottom. It looked good. It read well. It was the truest piece of writing Our Adventurer had produced.

The newsletter went out at 6:00 PM. Subject line: “I have been building this blog for one year. Here is everything I learned.”

By 8:00 PM, forty-three people had read the post.

By midnight, four hundred and twelve.

By the following morning, three thousand, seven hundred and eighty.


Chapter Seven: The Aftermath

By the end of the first week, the year-anniversary post had been read by fourteen thousand, two hundred and sixteen unique visitors.

By the end of the first month, the number was forty-one thousand, four hundred and eight.

A web development newsletter with forty thousand subscribers had featured it. Then a second newsletter. Then a podcast, the same one that had reached out for an interview several weeks earlier, published an episode in which the host read extended excerpts from the letter to the beginning section, which prompted a further wave of readers. The post was translated into Spanish by a reader in Buenos Aires who asked permission via email, received it within an hour, and published the translation with full credit and a link back to the original.

The email list grew from three hundred and twelve subscribers to over two thousand in thirty days. The digital product (the CSS guide for confused beginners) had its best month ever, earning over nine hundred pounds in a single thirty-day period. Three separate companies sent emails asking about sponsored content, which Our Adventurer declined politely but noted with a certain satisfaction as evidence that the blog was now something that brands considered worth associating with.

None of this was the point.

The point, as Our Adventurer wrote in a follow-up post two weeks after the anniversary post (a shorter piece, about four hundred words, titled “What happened when I published the post I was most afraid to publish”), was the emails from readers. Not the metrics. Not the newsletter mentions. The emails.

There was an email from a twenty-two-year-old in the Philippines who was two months into learning WordPress and had been on the verge of giving up because progress felt too slow. The post had convinced them to keep going. They were now four months in and had just published their fifth post.

There was an email from a forty-seven-year-old in Sweden who had been a primary school teacher for twenty years and had recently started learning web development as a second career. The letter to the beginning section, they wrote, had made them cry on the train, which they apologised for but said was a good kind of crying.

There was an email from a student in Nigeria who was studying computer science and had felt isolated in the learning experience, as though everyone else understood things that they did not. The post had, they said, made them feel less alone in the confusion. That this was normal. That the confusion was the process.

There was an email from someone who signed off only as “a former colleague of yours from three years ago, who watched you start this blog and honestly did not expect you to still be doing it a year later.” The email was three sentences long and ended with: “I was wrong and I am glad about it.”

Our Adventurer read each email twice and replied to every single one.


Chapter Eight: What the Climactic Battle Was Actually About

The coding languages had each been a battle. CSS with its specificity hierarchy and its box model and its browser quirks. HTML with its semantic structure and its accessibility requirements and its deceptive simplicity. PHP with its server-side mystery and its WordPress hook architecture and its missing semicolons. JavaScript with its asynchronous surprises and its browser DOM and its three-day Gutenberg block.

Each battle had been winnable. They had all been won, eventually, through the combination of documentation and determination and trial and error and the occasional Stack Overflow answer that turned out to be from 2014 and completely inapplicable to the current situation. Each victory had compounded into the next one. The skills had built on each other in ways that were not always predictable at the time but were, in retrospect, logical.

But the final battle had been with none of these things.

The final battle had been with the voice that said: not yet. Not ready. Not qualified. Not good enough. Wait. Prepare. Refine. Delay.

Every person who tries to build something and share it on the internet encounters this voice. It is not unique to WordPress development or to blogging or to writing or to any specific creative endeavour. It is the universal tax on making things and putting them where other people can see them. It is the cost of exposure. And the way to defeat it is not to silence it (you cannot silence it) or to feel confident enough that it no longer affects you (you will never feel that confident, no matter how much you know). The way to defeat it is to publish anyway.

To click the button.

To put the thing in the world and let it be imperfect in public, because the imperfect thing that exists and helps someone is worth more than the perfect thing that never leaves your drafts folder.

Our Adventurer had clicked the button forty-eight times by this point. Each click had been a small defeat of the voice. The forty-eighth click had been the largest defeat, because the post was the largest thing, and the voice had been loudest about it. But it had been clicked. The post existed. Forty-one thousand people had read it.

The voice was still there, already working on the forty-ninth post.

Our Adventurer was already writing.


Chapter Nine: The Technologies, Reviewed

It would not be a proper Code Adventurer post without a proper accounting. Having survived all the battles, Our Adventurer wrote a definitive review of each technology, updated now with a year of perspective:

CSS: CSS is not a programming language, which used to feel like a dismissal and now feels like a description. It is a styling language. Its rules are consistent once you understand them, and the rules you need to understand first are the box model, specificity, and the difference between block and inline display. Everything else builds from those three things. Flexbox and Grid are genuinely good. The cascade, once understood, is your friend. The browser developer tools are not a debugging tool you use occasionally. They are a second window into the CSS system that you have open alongside the code editor always. CSS is winnable. Start with the box model.

HTML: HTML is older than most of the people reading this blog and still the foundation of everything. The div is useful but it is not the answer to every structural question. There are semantic elements (header, main, article, aside, nav, section, footer) and they matter for accessibility and for the clarity of your code. The most important thing about HTML is that it is there to describe the structure and meaning of content, not to control how it looks (that is CSS) or how it behaves (that is JavaScript). Keep these three things separate in your mind and HTML becomes much clearer. Write it as if someone needs to understand the structure without being able to see the visual styling. Write it for a screen reader as well as for a browser. These are not different things. They are the same thing.

PHP: PHP is the language of the server side of WordPress. It runs before the page arrives at your browser. It generates the HTML that the browser then receives and renders. The most important PHP concepts for WordPress are variables, conditionals, loops, functions, and the hook system (actions and filters). You do not need to be a PHP expert to be a competent WordPress developer. You need to understand enough PHP to read and modify functions, to write a small plugin, to trace an error to its source. The missing semicolon will happen to you. Probably more than once. Do not let it define your relationship with the language. The white screen of death is not an ending. It is an error message without good communication skills.

JavaScript: JavaScript is the language of the browser. It runs after the page arrives, in the context of the rendered HTML and CSS. It can change the DOM, respond to user interactions, make requests to servers, and (through Gutenberg block development) run as part of the WordPress editor itself. JavaScript has a lot of surface area. You do not need all of it. Start with the DOM: what it is, how to read it, how to change it. Then events: how user interactions trigger code. Then fetch: how to make requests to APIs without reloading the page. The asynchronous model (callbacks, Promises, async/await) will be confusing. Read about it three times from three different sources and it will begin to make sense, then click into place when you need to debug your first race condition. The console is your friend. console.log everything until you understand what is happening, then remove the console.log statements before you publish.

The WordPress database: The database is what makes WordPress a platform rather than a set of files. Understanding the schema (the structure of wp_posts, wp_postmeta, wp_options, and the taxonomy tables) will change how you think about WP_Query and the WordPress data model. WP_Query is a PHP class that translates argument arrays into SQL and retrieves the results. Knowing this does not mean you need to write raw SQL for every query. It means you understand what WP_Query is actually doing and can predict what it will return. The $wpdb class exists for when WP_Query cannot do what you need. Use it with $wpdb->prepare() always. Never build SQL strings by concatenating user input. That way lies security vulnerabilities.

WordPress itself: WordPress is a content management system built on PHP and MySQL. It is also an ecosystem: forty-three thousand plugins, thousands of themes, a developer community that has been building and extending it for over twenty years. Its architecture (hooks, filters, template hierarchy, the loop) is learnable and, once learned, elegantly consistent. Its documentation (developer.wordpress.org) is comprehensive and worth reading slowly rather than searching frantically. The child theme pattern is how you modify a theme without losing your changes on update. The plugin pattern is how you add functionality without coupling it to a theme. These are not arbitrary conventions. They are solutions to real problems that enough people encountered that the solutions became standard practice.


Chapter Ten: What Remains

There was more to learn. Our Adventurer knew this with the comfortable certainty of someone who had learned enough to understand how much remained.

There was WooCommerce and its product tables and its order management and its payment gateway integration. There was multisite and its network administration and its shared user tables and its per-site configuration. There was Gutenberg’s full site editing and its block themes and its template parts and its patterns system. There was performance engineering at a deeper level: critical CSS, server-side rendering, edge caching, Core Web Vitals optimisation beyond the basics. There was accessibility at a deeper level: WCAG AA compliance, keyboard navigation testing, screen reader testing with NVDA and VoiceOver. There was WordPress.com’s specific hosting environment and its own constraints and conveniences. There was the Gutenberg project’s ongoing development and its evolving block API and the direction of WordPress as a platform.

There was always more to learn.

This used to feel daunting. The endless horizon of things not yet understood had once felt like a judgment on how much had not been accomplished. Now it felt like the opposite. It was evidence of scope. The reason the learning did not run out was because the field was large and deep and genuinely interesting and was being actively developed by many thousands of people around the world. Running out of things to learn would mean the field had stopped moving. The field had not stopped moving. The field was moving faster than ever.

Our Adventurer added three items to the “things to learn next” list in the notes document. WooCommerce basics. Block themes and full site editing. Accessibility testing with a screen reader.

And then closed the laptop, because it was Saturday morning, and the blog could wait until Monday, and the chip shop below the flat smelled incredibly good, and there were things in life that were not WordPress.

Though, to be entirely honest, Our Adventurer was already thinking about what the forty-ninth post was going to be about.


Epilogue: One Year Later, or What the Journey Was For

The blog had begun because a friend had earned eleven thousand pounds selling handmade ceramic mugs through a WordPress site and Our Adventurer had watched a YouTube video about it and thought: I should try that.

A year later, Our Adventurer had not sold a single mug.

But the blog existed. Forty-eight posts. A custom post type for book and course reviews. A related posts section. A featured posts sidebar widget. A “now reading” section updated automatically from a reading tracker via a custom REST API endpoint. A database query that assembled every book mentioned across all posts into a bibliography page. A caching setup that had pushed the PageSpeed mobile score from 54 to 86. A security posture that had blocked four hundred and thirty-three login attempts on a single Wednesday morning. A child theme with customisations that survived theme updates. A last-updated-notice plugin built by hand. A Tip Box Gutenberg block that had taken three days and was now used in every tutorial post.

An email list of over two thousand people, most of whom had subscribed because they were learning something and found it useful to learn alongside someone else who was also learning.

A CSS guide that had earned, in total, over three thousand, five hundred pounds.

Letters from readers in the Philippines and Sweden and Nigeria and who knew how many other places, saying: this helped me. This made me feel less alone in the confusion. This made me keep going.

Our Adventurer had not sold a mug. Our Adventurer had built something considerably more interesting than a mug business.

The YouTube video had said: “WordPress is how you get your thing online.” It had been talking about ceramic mugs. But the thing that had ended up online was not a mug shop. It was an archive of learning, a record of a person going from not knowing what CSS was to understanding how WordPress assembled its database queries, written honestly and in sequence, published week after week regardless of whether it was ready or whether Our Adventurer felt qualified, and read, in the end, by forty-one thousand people in one month.

The adventure had been about WordPress.

But it had also been about what happens when you start something you do not know how to finish, and you do it anyway, and you keep doing it, and you let the doing of it teach you what you need to know.

That was the final lesson. The one that no documentation could give you and no tutorial could convey. The one that only came from the doing.

Start.

Keep going.

Publish anyway.

The rest will follow.


This has been The Code Adventurer: A Six-Part Story about Learning WordPress, CSS, HTML, PHP, JavaScript, and the Database Architecture of the Web. Thank you for reading. If you are at the beginning of your own journey, the letter in Chapter Four is for you.

If you want to tell Our Adventurer something: the comments are open. They always are.

Leave a Reply

Get updates

From art exploration to the latest archeological findings, all here in our weekly newsletter.

Subscribe

Discover more from Richard Morrison

Subscribe now to keep reading and get access to the full archive.

Continue reading