finding my speaking voice

13 min read

Cody Bromley speaking at Thunderplains 2024
Me speaking at Thunderplains 2024 - Photo by Natasha Martin

the invitation

This week, for the very first time ever, I spoke at a conference. And not just any conference, Oklahoma's largest developer conference: ThunderPlains.

A few months ago, I took a leap and applied to speak. I went back and forth in my head for a while, but I felt confident in my ability to do it, so eventually I replied to the call for proposals. A couple weeks later I got a reply letting me know I wasn't selected, which was a bit of a bummer but I understood that as a first time speaker an organization is taking a risk. But three weeks before the conference, my fortune changed. An unexpected email from the organizers let me know they'd lost a speaker and wanted to know if I was still interested. It felt like the universe was calling my bluff. Here was my chance. Was I ready to take it? I very enthusiastically said yes.

Speaking was equal parts terrifying and fun, and it required a lot more prep than I expected. I'm eternally grateful to my wife for tolerating the many nights and weekends I spent in my home office, to my friends and colleagues who sat through some incredibly rough alpha and beta versions of my talk, and to my brother who met me for coffee at 6 a.m. the day of the conference to reassure me I had this. Now that it's done, I simply can't imagine not having done any of it without all of you. Thank you.

And even now, days after, the whole experience feels surreal when I think about my journey here. While I've worked in tech for almost three years now, the first decade of my career was in marketing. At the end of that chapter, I was one of those techier digital marketing people, but I didn't start out that way. But even as I left, I only considered myself a scrappy scripter, nowhere near a real developer.

So even three years ago, much less ten, the idea that I'd be on stage speaking to a room full of developers would have seemed impossible. Not just because I didn't think I could do it, but because I struggled to feel like I even belonged in the audience.

flashback to fluent 2015

Me in SF, in my Vibram FiveFingers

I felt this impostor syndrome most acutely at my very first tech conference: O'Reilly Fluent 2015 in San Francisco. It was the furthest west I'd ever been, the most complex traveling I'd done solo, and the most independent yet alone I'd ever felt. That mix of exhilarating and terrifying feelings was perfectly embodied by schlubby 26-year-old me, standing there in my Vibram FiveFingers and my heart on my sleeve.

The panic really set in when I started meeting people at the conference. These folks worked at real companies - tech giants like PayPal, IBM, and Microsoft, alongside brands like Arc'teryx who needed developers to manage their in-house eCommerce platforms. These were all real live developers who handed me their very real and very cool business cards.

The main hall for Fluent 2015 in San Francisco

Meanwhile, I was just a journalism grad, two-and-a-half years into what felt like a dead-end career as a Drupal webmaster for a medium-sized industrial manufacturing company. I wasn't even that good at managing that Drupal site, and I didn't know PHP. My most significant webdev achievement at the time was adding CSS animations to custom Bootstrap landing pages with form actions routing data to a Wufoo account. I know. Thrilling stuff.

Still, Fluent 2015 opened my eyes to new possibilities. It was the first time I heard about things like the W3C gamepad standard, NeoCities, IPFS, how to make HTML emails that don't suck, Twilio, webhooks and lots of cool things being done with video in the browser. I picked up some actually practical skills too, like SASS, but most of the other sessions I went to might as well have been in a foreign language.

One session in particular really drove home how out of my depth I was: Building Native-Like Hybrid Apps with AngularJS and Ionic. I'd chosen to attend because I had once followed a tutorial to make an incredibly simple iOS app for a trade show kiosk1 using Adobe PhoneGap. But while Ionic and PhoneGap both used Apache Cordova, the similarities end pretty quickly after that.

The idea that I could use web tools to build real apps was fascinating, I always wanted to make an app, and my little kiosk demo was barely a single webview in a browser container. I may have technically made an app, but it was only for one device and it definitely didnt scratch that itch. So I gave this talk a shot. But halfway through, though, I realized I was completely lost. I'd probably heard of Angular before, but that didn't mean I had any idea what it did or how to use it2.

In fact, most of this conference was people talking about JavaScript, and of the classic HTML/CSS/JavaScript stack, JavaScript was my weakest link by far. If any of my webpages ever used JavaScript, it was always 100% copy-pasted from somewhere else because I barely knew how it worked, much less why one approach might be better than another.

After I bailed on the session I wandered the vendor hall, choosing to talk to people from the different companies whose job it was to be interested in me and what I did in order to sell me stuff. But honestly, even in a sympathetic crowd, I still couldn't hold my own and felt actively embarrassed about my limited skills. I'm pretty sure I lied, either actively or at least allowed them to think I was a more serious dev by omission. While I was genuinely interested in what each company had to say or offer, I was just so clearly out of my league. Still, I was at least glad to get my badge scanned in exchange for swag, great stickers, and most significantly, a free book signed by its author. It was part of a series called "You Don't Know JS... Yet" and the volume I picked up was "Up and Going". It was explicitly aimed at someone like me who understood some concepts but wasn't sure how to apply them.

I should have left San Francisco excited. I mean, it was a lot of interesting stuff, and who doesn't love a free book? But the trip revealed I didn't know who I was. That book could have even been the singular artifact to help me overcome my impostor syndrome, but impostor syndrome isn't rational, and what should have been an inspiring trip mostly left me feeling like I should stick to what I already knew. That proudly acquired book would only get loosly thumbed through a few times before ending up shelved for most of the last decade, never to be fully read.

small victories

Back at my day job, I returned to building spaghetti-code Bootstrap landing pages, but yet something had shifted. In small ways, I felt more comfortable trying new things. I started using SASS to make my CSS easier to write, and since those tweaks made my sites easier to templatize, I had more time to experiment. When I discovered Twilio, I learned to do simple things using their TWIML markup language, and later, how to dynamically generate TWIML using PHP. Then I learned what a webhook was. Suddenly, I was doing things I'd never thought possible. When it worked, it was unfreaking believable, but often it didn't, and I really couldn't explain why.

My first piece de resistance came in 2017: an SMS-based multi-team scavenger hunt for a tradeshow event. Each team had their own special codes they'd text to a phone number, and my PHP script would navigate several dozen if statements (I didn't know better) to send them back directions to their next stop. It was incredible, and my co-workers were amazed. We kept using this at events, and I kept making it better. I once added a very hacky way of doing state management using text files on my FTP server. Eventually, I learned how to work with SQLite instead, and my life got a lot easier. The best version ended up being part of a special puzzle box I made as a gift for my brother.

By 2019, I was onto more complex things. I built a site using JQuery + Datatables on the front-end to display SMS and MMS messages sent to a Twilio number (with webhooks handled via PHP). Combined, it was effectively an in-person Zoom chat projected onto a screen at a 50+ person company strategy retreat. It worked amazingly and became legendary inside the company. We used it several more times, and later our parent company had me deploy it for a big meeting. It seriously changed people's perceptions of what I seemed capable of, but not my own. I still felt like some kind of forgery presenting a frankenstein of other people's work. I thought of myself as a DJ making mashups with code instead of music, not an artist.

momentum to mvp

Not long after that success, the company's head of software engineering invited me to work on an MVP front-end for a new IoT product we were prototyping for one of our biggest customers. I was incredibly nervous about failing on a real product. The way I'd been doing development so far was on my own terms. Up until that point if I failed, it was no big deal. It was because I couldn't do it, and I only had myself to disappoint. But here, people were counting on me. In my anxiety, I tried to get out of it by telling the head of software engineering, "I'm not a real developer. I just Google stuff." His response stunned me: "Yes, but you know what to Google. That's what real developers do." I left that meeting feeling like I couldn't back out. So I stayed on.

That project pushed me quite a bit, but thankfully I wasn't starting completely from scratch. The first task was figuring out our platform, and I helped choose one that had low-code/no-code IoT capabilities. We eventually picked Losant, and their theming system intrigued me because it allowed the use of Handlebars inside template HTML. While I was familiar with variables in PHP, the Handlebars system felt incredibly different and, at the same time, easier because of their web IDE. It was my first time experiencing IntelliSense3, and it was eye-opening.

Around the same time, I was pushing for my marketing team to abandon our ugly and expensive vendor-managed promotional item eCommerce site in favor of building our own Shopify site that we'd fulfill in-house. Building that site was a ton of fun and introduced me to the Liquid templating language.

When the pandemic hit, I started learning Salesforce administration, partly because my company was considering adopting it and their certs were free in 2020. Something about all these opportunities (Handlebars, Liquid, and Salesforce) finally made object-oriented programming and relational databases click for me. When I think about what had made me feel like I couldn't be a real developer, it was that I didn't understand, or at least couldn't explain, why anything was happening. Now things were starting to make sense.

ai bridges the gap

These past three years have been a whirlwind of growth and discovery in my journey from hesitant hacker to confident developer, and generative AI played a pivotal role.

When GPT-4 was released, like many others, I was shocked it worked so well. A ton of people praised its coding abilities, so I decided to revisit my old SMS scavenger hunt project. I hadn't kept the source code from my previous job, but I thought it might be fun to rebuild it for an internal initiative to create more joy in the office.

With just a few prompts, AI didn't just help me rebuild it, it radically improved it. Goodbye 75 nested if statements, hello switch statement. I had no idea how to do that before, but there it was, fresh and clean. I polished it further and published my first public GitHub repo and GitHub pages.

Encouraged by this quick success, I had a wilder idea: what if I rebuilt the project in NextJS? Mind you, I didn't actually know NextJS, but I knew PHP had fallen somewhat out of favor as a web framework, and NextJS was gaining popularity with the team at my work and I was curious about a modern approach.

Ten seconds later, looking at a working AI-generated NextJS version, I had an epiphany: I understood more JavaScript than I'd realized. The syntax was different, but my concepts were there, just translated. It was like having a personal Rosetta Stone for code and it instantly made JavaScript a lot less intimidating.

The momentum from that revelation was transformative. It turned out I already had a strong grasp of the important concepts for data movement but just needed help with JS syntax. Adding Tailwind to the mix accelerated my front-end work, with many CSS utility concepts from my Bootstrap days clicking back into place and GPT-4 helped me piece it all together, creating my first React components, API routes, and useEffect functions.

Within a month, I'd launched a small NextJS project at work using NFC tags, and another month later my first real hobby project went live on the web.

Most times I've told this story, I've given AI significant credit for my progress. While it certainly helped, I now recognize it wasn't the whole picture. As I started launching projects, I'd tell friends and co-workers how easy it was to build with GPT-4, thinking it was doing the hardest work. But I often got puzzled looks in response.

It turned out that most people I talked to were much less impressed with AI's output, and told me they were more often getting unusable code and unhelpful explanations. It made me realized my experience wasn't universal. For me, AI was a bridge between what I already knew and what I wanted to learn, but not everyone had those same prerequisites. Those fundamentals had been clicking into place for years before GPT-4 came along, and AI closed the last mile of that gap, helping me see it wasn't nearly as wide as I'd imagined.

One of my coworkers put it best: "Cody, it works for you because you know what to ask the AI."

It was as true as when my old head of software engineering said it. Asking the right question is what being a developer (as well as life, the universe and everything) is all about.

full circle

What made this week truly special was a full-circle moment: one of the other speakers at ThunderPlains was Kyle Simpson – the author whose book I'd gotten at Fluent back in 2015. The day before the event, he posted on LinkedIn about how excited he was to be speaking again. He mentioned that he used to do 20-30 conference talks a year worldwide, but that's slowed significantly. And it's true. Conferences are smaller and less frequent now. O'Reilly Media, who put on Fluent, halted all their conferences in 2020 because of COVID and never brought them back.

Between sessions I also chatted with Vance Lucas, one of the co-founders of Techlahoma and ThunderPlains thanking him for starting this group and conference. Techlahoma is 10 years old this year and Vance told me that in that time a lot of things have changed. The biggest shift, however, might be how much things have changed since 2020. Prior to 2020, Vance said ThunderPlains often maxed out earlybird and available spots with folks from all over, but now there's still a good number of available seats.

ThunderPlains (and Red Dirt JS before it) has always been hosted in conjunction with InnoTech Oklahoma, sharing conference resources with like-minded events like Oklahoma Women in Tech Summit, Oklahoma IT Executive Summit, and We Dreamin' OK (a gathering of Oklahoma's Salesforce community). Just a decade ago, InnoTech proudly stated on their website that they hosted over 1,000 of the region's top business & technology professionals, but this year's keynote, which was the largest gathering of the entire day drawing in attendees from all events, barely filled the third-largest space in Oklahoma City's brand new convention center.

But the pandemic isn't solely to blame. In my former life as a marketer and board member of IABC Tulsa, I witnessed firsthand the challenges professional organizations faced pre-2020. Rising event costs and declining memberships were already straining resources. What compounded these issues for our chapter was a near-complete leadership transition. Almost overnight, we went from the "international chapter of the year" led by industry veterans to a board of mostly early-career professionals. While well-intentioned, our new team found itself without the institutional knowledge or industry connections to really maintain the legacy, but even bigger challenges were outside the organization.

What we didn't know at the time, but were starting to feel, was that a digital revolution was already underway and it was drastically transforming how professionals networked and learned, with online platforms and social media competing for attention. Simultaneously, economic pressures were forcing companies to cut back on professional development budgets and non-essential travel. So, as a result, many professional spheres, including conferences, were having to compete harder for attention and it there were just fewer and fewer of them. The pandemic really only sped up the process.

I'm still sad how little we now prioritize community gatherings, because being at ThunderPlains reminded me that conferences have always been about more than just the presentations. It was incredible to not just attend, but to be in true community. The conversations that flowed between sessions, the shared excitement, the spontaneous discussions about new technologies and what's happening in tech was fun, but the energy is what sticks with you, if even just a small spark. But that spark is what made me become the developer I wanted to be even though I didn't see how to do that. That energy wanted me to make my way back.

And while speaking is an achievement I'm proud of, finding the belonging I'd searched for and spending time with like-minded people without feeling like a fraud is what makes me proudest.

Continue reading →

ccTLDs are risky business

4 min read

There's been a lot of chatter lately about the future of the .io ccTLD. The top-level domain was originally created as a country code top-level domain for the "British Indian Ocean Territory", but like history tells us, countries are not forever and that means ccTLDs aren't either. Should a treaty by the UK government be passed, the islands would become part of Mauritius, ending the need for the .io domain.

The rules for ccTLDs are strict, and if a country doesn't exist in the official international specification of country code short codes, the domain can't either. The only other option would be for the Internet Assigned Numbers Authority (IANA) to break its own rules, but seeing as how they say, "we are not in the business of deciding what is and what is not a country" it certainly feels like a tall ask.

But that's not stopping people from hoping for it. The latest rumor, or perhaps coping mechanism, is that IANA and ICANN could still have a change of heart about the rules and instead reclassify .io domains into a generic top-level domain as a way to preserve it. That would still be quite unprecedented considering two-letter domains have historically been reserved exclusively for ccTLDs.

If I was a .io domain owner (btw, I'm not), and I established a presence on a .io domain, I'd be looking to migrate any production systems off the .io namespace and quickly change any hard-coded references. While potential changes aren't the same as actual changes, the business risk is simply too high to ignore even if the timeline is at least 5 years. Companies like Itch.io and the numerous mobile games who made .io part of their brand however, should also start those transitions ASAP.

The issue really does go beyond just .io domains. I've come to believe that I could never feel truly secure putting my business on almost any country code Top-Level Domain (ccTLD). Let me explain why with a few eye-opening examples:

  1. The deletion of a country

    One of the oldest and most illustrative examples of the potential instability ccTLDs can face is the case of .yu, the former ccTLD for Yugoslavia. This domain was officially allocated in 1989 but much of its existence was uncertain following a bloody civil war and the breakup of Yugoslavia in the early 1990s. The domain managed to persist through various political changes but was finally deleted in 2010.

    "With the deletion of .yu, historians and researchers lost access to websites that contained important historical records. Gone are firsthand accounts of the NATO bombing and the Kosovo War; the mailing lists that scientists used to update their colleagues on the progress of the conflict; nostalgic forums and playful virtual nation experiments."

    From "Yugoslvia's Digital Twin"

  2. "Who do you think? The Libyans."

    In 2010, the popular URL shortener Bitly found itself in a precarious situation. They were using Libya's .ly ccTLD and nearly had their domain held hostage by then-dictator Muammar Gaddafi. Bitly ultimately escaped the scrutiny but Libya's domain registry didn't go as easy on others, seizing and shutting down other .ly domains that linked to content they found objectionable, including adult content and depictions of the Prophet Muhammad.

    "This is deeply concerning for everyone, but especially .ly domain owners, because it sets a precedent that all websites running on a .ly domain must comply with Libyan Islamic/Sharia Law in order to maintain their domains. This is especially concerning for anyone running a url shortener or hosting user-generated content on a .ly domain."

    From "The .ly domain space to be considered unsafe"

  3. Seized AF

    A decade after the Bitly incident, it seems this lesson still needs to be learned by protocols and platforms too. One group had a very tongue-in-cheek .af domain (Afghanistan's ccTLD), and were quite aware of the risks involved, but they still found their users homeless when their domain was seized without warning by the Taliban. This incident exposed a critical gap in ActivityPub and Mastodon: there's no way to migrate an entire instance to a new domain. While the servers and data still existed, the domain was the most crucial part of hoaw users' identities are resolved on the Fediverse. Consequently, users were forced to start over with zero followers, highlighting how even decentralized platforms can fail due to ccTLD instability.

    “We were very much aware that the .AF TLD belonged to Afghanistan and that there were potential upsets in the future,” they added. “In some strange ways, that made it more appealing —we knew that there were ways that this community experiment could end that were outside of our control, and not just due to us burning out or similar.”

    From "Taliban Shuts Down 'queer.af' Domain, Breaking Mastodon Instance"


The crux of the matter is this: neither IANA nor ICANN can control what countries do with the ccTLDs they've been assigned. While these domains might offer clever branding opportunities or seem innocuous, history has shown us time and again that they can become liabilities overnight.

For businesses and critical online services, the risks far outweigh any potential benefits. A domain name isn't just a web address, it's the foundation of your digital identity and your online home. Losing it can mean losing everything you've built: your hard-earned SEO rankings, years of accumulated backlinks, and the trust and recognition you've established with your audience.

So, no matter how tempting or trendy a ccTLD might be, I can't in good conscience recommend using them for canonical URLs, or really anything besides a redirect. When it comes to your online presence, it's far better to prioritize stability and security over cleverness or novelty. It might seem boring, but this is precisely why .COM remains king.

Continue reading →

vision pro-dictions

2 min read

Yesterday Apple announced the new Vision Pro spatial computer (aka headset). One of the things I do at my job is kind of try to predict the future, or at least imagine how to get ahead of it so we can make the right moves today. With that, I've been assembling some predictions (most of which I assume will be proven wrong very quickly) on how I think the Vision Pro will change the current state of product, experiences and technology. They are:

  • This new platform is gonna bring a new monetization strategy with it. This isn’t the place for 99¢ apps, especially when every user has shown their willingness to spend and user base is small. Pricing will look more like Mac apps, or perhaps higher. Subscriptions will be the norm, or perhaps pay per hour/day for certain kinds of apps.

  • Entertainment is obviously a big part of this and VR events (court-side sports & front-row concerts) could be a game-changer. It has the chance to be a big disruptor to live sports so I’m predicting a Ticketmaster-like entity might sell expensive per-event ticketed access so VR doesn’t undercut in-person.

  • Streamers like Netflix and Disney are going to add VR/AR content to their libraries but put it behind a higher tier plan. Apple will raise the price of Apple TV+ but will still have some of the cheapest access to VR content and it will all be Vision Pro exclusive.

  • Zeiss lenses are going to be expensive for people who need them. DTC third parties like Warby Parker will probably replicate something pretty equivalent very quickly.

  • 3D photos and videos will be more interesting and more used than Live Photos, but not by much. 3D photos and videos will also be in a new Apple format that is not widely supported for a while.

If I think of more, I'll probably update this post. And if any of them are every confirmed or disproven I'll try to remember and update those too.

Continue reading →

More posts can be found in the archive.