<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Anders Björk</title>
    <description>The latest articles on Forem by Anders Björk (@andbjo).</description>
    <link>https://forem.com/andbjo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3847500%2F40d8bb9a-eeef-4d56-a8f5-ef3ebf255448.jpg</url>
      <title>Forem: Anders Björk</title>
      <link>https://forem.com/andbjo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/andbjo"/>
    <language>en</language>
    <item>
      <title>Finding real purpose with impact mapping</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Sun, 17 May 2026 16:48:00 +0000</pubDate>
      <link>https://forem.com/andbjo/finding-real-purpose-with-impact-mapping-b8a</link>
      <guid>https://forem.com/andbjo/finding-real-purpose-with-impact-mapping-b8a</guid>
      <description>&lt;p&gt;I’ve always had a soft spot for structured thinking tools, but there’s one that stands out when it comes to bringing real clarity into messy product work: &lt;a href="https://www.impactmapping.org/" rel="noopener noreferrer"&gt;Impact mapping&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most projects don’t actually fail because teams can’t build things. They fail much earlier, at the point where nobody has really agreed on why they are building anything in the first place. There is often a surface-level purpose, usually something like “replace legacy system X” or “build a new app for customers”. That kind of goal sounds concrete, but it hides a bigger problem: it describes activity, not value. It explains what we are doing, not what we hope will change.&lt;/p&gt;

&lt;p&gt;What’s usually missing is the real purpose. The uncomfortable but necessary question: what do we want this investment to give us in return?&lt;/p&gt;

&lt;p&gt;That question is where things start to get interesting, and also where many teams accidentally skip ahead. Because the real purpose is rarely about the system itself. It lives one level above it. It could be something like reducing customer effort, increasing conversion, lowering support dependency, improving retention, or enabling faster decisions. And importantly, it has to be something that matters outside the delivery team. If the purpose only makes sense inside IT or product, it tends to drift into output thinking again.&lt;/p&gt;

&lt;p&gt;Finding that purpose is less about creativity and more about structured conversation. It usually starts with pulling the right people into the same room, especially those who understand the business side, not just the technical constraints. Then it becomes a process of asking slightly uncomfortable follow-up questions. What changes if this succeeds? Who benefits? Why does that matter? And if we achieved that, what would that enable next?&lt;/p&gt;

&lt;p&gt;It helps to keep stripping away layers until you reach something that still feels meaningful without referencing the solution. If the discussion keeps returning to features or systems, it is often a sign that the real goal is still hiding underneath.&lt;/p&gt;

&lt;p&gt;Once that purpose starts to feel real, the next challenge is making sure it is actually something the product can influence. A purpose that is too broad, like “increase company profitability”, is not useless, but it is too far removed from day-to-day design decisions. On the other hand, a purpose that is too narrow, like “reduce number of clicks in form X”, risks becoming local optimization without strategic relevance.&lt;/p&gt;

&lt;p&gt;The sweet spot is when the purpose is clearly connected to business outcomes, but still reachable through changes in user behavior and experience. It should feel like something the product can genuinely move, even if it does not fully control it.&lt;/p&gt;

&lt;p&gt;From there, the thinking naturally shifts into mapping. This is where Impact mapping becomes especially powerful. You take that purpose and start asking who needs to act differently in order for it to happen. Not abstract personas, but real actors with intentions. Customers, internal users, partners, support staff. Then you ask what behaviors from those actors would actually create the desired outcome.&lt;/p&gt;

&lt;p&gt;This is where things start to become measurable, because behavior is observable. Not opinions, not intentions, but actions. If customers complete a purchase without contacting support, that is measurable. If users return weekly instead of dropping off after the first session, that is measurable. If employees resolve tasks without escalation, that is measurable.&lt;/p&gt;

&lt;p&gt;The important shift is that success stops being defined by whether features were delivered, and starts being defined by whether real-world behavior changed in the direction of the purpose. That question becomes central: if all this happens, will we be considered successful?&lt;/p&gt;

&lt;p&gt;And that is where the most useful measures tend to emerge. Not vanity metrics or isolated activity counts, but signals of actual usage over time. Because real value shows up when people interact with the product in their everyday life, not in a demo, not in a workshop, not in a test environment.&lt;/p&gt;

&lt;p&gt;It is in the repeated patterns that meaning appears. Do users come back without being pushed? Do they rely on the product to complete tasks they previously did manually? Do they trust it enough to make it part of their routine? These are the kinds of signals that tell you whether the product is actually doing its job in the world, not just whether it works technically.&lt;/p&gt;

&lt;p&gt;When teams get this right, design work becomes less about debating features and more about shaping behavior. Every design decision can be traced back to a chain: this supports this behavior, which contributes to this impact, which serves this purpose. It doesn’t remove complexity, but it gives it direction.&lt;/p&gt;

&lt;p&gt;And that is why Impact mapping keeps feeling so valuable. It doesn’t pretend to simplify reality. It just makes sure everyone is aiming at the same version of it.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>uxdesign</category>
      <category>strategy</category>
      <category>impactmapping</category>
    </item>
    <item>
      <title>A quiet idea taking shape</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Sun, 17 May 2026 15:51:20 +0000</pubDate>
      <link>https://forem.com/andbjo/a-quiet-idea-taking-shape-3bdf</link>
      <guid>https://forem.com/andbjo/a-quiet-idea-taking-shape-3bdf</guid>
      <description>&lt;p&gt;There’s something special about the feeling right after registering a new domain. That mix of anticipation and possibility. This time it became &lt;a href="https://vaggvisor.com" rel="noopener noreferrer"&gt;vaggvisor.com&lt;/a&gt; (Swedish word for lullabies), and even the name alone starts triggering a whole stream of ideas. It feels like it could become something warm, calm and a bit nostalgic, but also modern and genuinely useful.&lt;/p&gt;

&lt;p&gt;Right now it’s all very bare bones. A simple one-pager, mostly just to signal that something is coming. A bit like placing a sign on an empty plot of land: “Something nice will be built here.” But even at this early stage, the ideas are already branching out into what it could become. A collection of classic lullabies? Original recordings? Lyrics, sheet music, maybe even tools for building personalized bedtime playlists.&lt;/p&gt;

&lt;p&gt;One direction that feels especially interesting is treating each lullaby as more than just a song with audio attached. Almost like a small content experience. That naturally leads to thinking in terms of structured content, and here markdown files start to feel surprisingly powerful. Each lullaby could live as its own markdown file containing the lyrics, metadata like language, mood, tempo, origin, and maybe even references to different versions of the same song. It would keep everything very portable and human-readable, while still being flexible enough to evolve.&lt;/p&gt;

&lt;p&gt;From a technical point of view, there’s something appealing about building it from scratch in PHP. Not because it’s the most fashionable choice, but because it would be a good way to deepen skills and stay close to the actual mechanics of how everything works. A simple file-based system where PHP reads markdown files, parses them, and turns them into pages could be enough for a strong start. It would also keep the architecture transparent, which feels right for something that should stay lightweight and calm.&lt;/p&gt;

&lt;p&gt;On top of that, Bootstrap could handle the layout without overcomplicating things. A soft, responsive interface with just enough structure to make the content feel intentional, without getting in the way. The focus would stay on readability and mood rather than heavy interaction patterns.&lt;/p&gt;

&lt;p&gt;And then the ideas start to get more playful. Each lullaby could include multiple interpretations, maybe different tempos or arrangements depending on context. Not just a static page, but a small adaptive experience. You could even imagine background layers like subtle audio textures or gentle variations in rhythm depending on the time of night or user preference.&lt;/p&gt;

&lt;p&gt;Personalization also becomes an interesting layer. A simple account system where parents can assemble bedtime routines, selecting a sequence of lullabies that play in order with soft transitions. It could even allow recording a personal voice message directly in the browser, stored and tied into the playlist. There’s something powerful about the idea of a parent being away but still present at bedtime through something so simple and familiar.&lt;/p&gt;

&lt;p&gt;There’s also a more experimental direction where parts of the content could be generated. Not to replace the classics, but to complement them. Mood-based generation like “calm”, “safe”, “nature”, or “space”, producing either variations of melodies or accompanying text. Maybe even ambient layers like rain, wind or soft noise blended underneath.&lt;/p&gt;

&lt;p&gt;Visually, it would be just as important to keep things restrained. Slow animations, subtle color shifts, almost imperceptible motion in the background. The kind of interface that doesn’t demand attention but instead lowers the pace of everything around it. Something that feels like it gets quieter the longer you stay.&lt;/p&gt;

&lt;p&gt;At the same time, there’s a strong pull toward keeping it simple in the beginning. Starting with a small, carefully curated set of high quality lullabies, focusing on presentation and clarity rather than volume of content. Letting it grow organically based on what actually resonates.&lt;/p&gt;

&lt;p&gt;And that brings it back to the technical decisions again. GRAV feels tempting as a file-based system that already solves a lot of structure, but building it in raw PHP has its own appeal, especially for learning. A custom markdown pipeline where content lives in folders, maybe with a simple parser layer, caching, and a clean separation between content and templates. VZY.co sits on the other end of the spectrum, fast and visual, great for getting something polished quickly, but less flexible if the idea grows into something more complex and custom.&lt;/p&gt;

&lt;p&gt;There’s also something healthy in not locking everything down too early. Starting simple, testing ideas, and letting the project itself influence the architecture over time. Often what you think you are building changes once it starts to exist in the real world.&lt;/p&gt;

&lt;p&gt;So &lt;a href="https://vaggvisor.com" rel="noopener noreferrer"&gt;vaggvisor.com&lt;/a&gt; is still just a beginning. A quiet surface with potential underneath. And right now that’s enough. A space to experiment with content, structure and code at the same time, and slowly figure out what it actually wants to become.&lt;/p&gt;

&lt;p&gt;There’s also a realistic chance it never turns into anything more than this early spark, just another shiny domain that felt full of promise at the moment of registration. History has a way of showing how easily attention drifts, and how many ideas quietly fade once the novelty wears off.&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>php</category>
      <category>web</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Bedtime stories</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Mon, 13 Apr 2026 22:00:00 +0000</pubDate>
      <link>https://forem.com/andbjo/bedtime-stories-5ejn</link>
      <guid>https://forem.com/andbjo/bedtime-stories-5ejn</guid>
      <description>&lt;p&gt;I recently registered the domain &lt;a href="https://bedtimestories.kids" rel="noopener noreferrer"&gt;bedtimestories.kids&lt;/a&gt; and I'm excited about the possibilities, though I'm still figuring out exactly what to do with it. The idea of creating a dedicated space for cozy bedtime stories feels right, especially since this is a format I already love working with.&lt;/p&gt;

&lt;p&gt;My initial thought is to write original bedtime stories and publish them on the site. Nothing too complex or overstimulating, just warm, gentle tales that help children wind down at the end of the day. The kind of stories with soft imagery, reassuring themes, and that perfect drowsy rhythm that makes eyelids heavy.&lt;/p&gt;

&lt;p&gt;I'm also considering producing audiobook versions of the stories. Having worked with narration before, I know how much the right voice and pacing can add to a bedtime story. There's something special about a spoken story that a child can listen to in the dark, letting the words paint pictures as they drift off to sleep.&lt;/p&gt;

&lt;p&gt;For now, I've put up a simple landing page using &lt;a href="https://carrd.co" rel="noopener noreferrer"&gt;Carrd&lt;/a&gt;, which I've started experimenting with recently. It's perfect for getting something online quickly, and the one page format works well as a placeholder while I plan the real site. But Carrd's limitations are obvious when you're thinking about a content site with multiple stories, categories, and possibly audio players.&lt;/p&gt;

&lt;p&gt;That's why I'm planning to build the actual site using &lt;a href="https://getgrav.org" rel="noopener noreferrer"&gt;GRAV&lt;/a&gt;. It seems like a good fit for this project, offering the flexibility I need to organize stories properly, handle media files efficiently, and create a pleasant reading experience without the overhead of a database-driven CMS. Plus, being file-based means I can keep everything simple and focused on the content itself.&lt;/p&gt;

&lt;p&gt;I've really come to appreciate working with GRAV for several reasons, and it keeps proving itself as the right choice for my projects.&lt;/p&gt;

&lt;p&gt;The flat-file architecture is probably the biggest draw for me. No database to maintain, no MySQL configurations to worry about, no backup complications. Everything is just files and folders, which means I can version control the entire site with Git if I want to. It's straightforward and transparent in a way that feels refreshing after years of wrestling with WordPress databases.&lt;/p&gt;

&lt;p&gt;The Markdown-based content system fits perfectly with how I like to write. I can draft a story or article in any text editor, format it with simple Markdown syntax, and drop it into the right folder. No need to log into an admin panel unless I want to. For someone who writes a lot of content across multiple sites, this workflow feels natural and fast.&lt;/p&gt;

&lt;p&gt;GRAV's flexibility is another strength. It's lightweight enough to stay out of your way, but powerful enough to handle complex site structures when you need them. I can start simple and add functionality as the site grows, without feeling locked into decisions I made at the beginning. The modular approach with plugins means I only add what I actually need.&lt;/p&gt;

&lt;p&gt;The templating system using Twig is clean and logical. When I need to customize something, I'm working with actual code that makes sense, not trying to decipher some proprietary theme framework. And because everything is file-based, I can simply copy a template file, modify it, and see the changes immediately.&lt;/p&gt;

&lt;p&gt;Performance is solid right out of the box. Without database queries slowing things down, pages load quickly. For content-heavy sites like my children's story collections, where I want parents and kids to have a smooth, pleasant experience, this matters.&lt;/p&gt;

&lt;p&gt;The learning curve was gentler than I expected. The documentation is thorough, and the community, while smaller than WordPress, tends to be helpful and focused. I didn't need to become a GRAV expert to get productive with it.&lt;/p&gt;

</description>
      <category>contentwriting</category>
      <category>nocode</category>
    </item>
    <item>
      <title>One-page about Skiathos using Carrd</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Mon, 13 Apr 2026 09:34:38 +0000</pubDate>
      <link>https://forem.com/andbjo/one-page-about-skiathos-using-carrd-4ahl</link>
      <guid>https://forem.com/andbjo/one-page-about-skiathos-using-carrd-4ahl</guid>
      <description>&lt;p&gt;I've been experimenting with Carrd.co to build a simple one-page &lt;a href="https://www.skiathosgreece.co.uk/" rel="noopener noreferrer"&gt;guide to Skiathos&lt;/a&gt;, one of my favorite Greek islands in the Sporades archipelago. The tool turned out to be perfect for this kind of project since I wanted something clean and straightforward without getting bogged down in code.&lt;/p&gt;

&lt;p&gt;The site opens with a hero image of Koukounaries Beach, that stunning stretch of golden sand backed by pine forest that makes Skiathos so distinctive. I kept the introduction brief, just a few lines about why the island stands out: incredibly accessible beaches, lush green landscapes, and that perfect balance between developed tourism infrastructure and genuine Greek character.&lt;/p&gt;

&lt;p&gt;I structured the guide into sections to keep everything on one page without overwhelming visitors. The beaches section was essential, covering everything from the famous Lalaria Beach with its white pebbles and natural rock arch (accessible only by boat) to the more family-friendly options like Vromolimnos and Agia Paraskevi. I made sure to mention Banana Beach for those looking for a livelier scene.&lt;/p&gt;

&lt;p&gt;For practical information, I added sections on getting there (flights to Skiathos airport, which has one of the most dramatic runway approaches in Europe, or ferry connections from Volos and Thessaloniki), getting around (rental cars, scooters, or the island bus that connects most beaches), and where to stay. I highlighted both Skiathos Town with its charming old quarter and the quieter options along the southwest coast.&lt;/p&gt;

&lt;p&gt;Carrd's simplicity really shone here. The drag-and-drop interface made it easy to add image galleries, embed a Google Map showing key locations, and create a clean, mobile-responsive layout. I used one of their minimalist templates and customized the colors to match the island's palette: deep blues for the Aegean, warm terracotta for the traditional rooftops, and soft greens for the pine forests.&lt;/p&gt;

&lt;p&gt;The whole project took maybe two hours from start to finish, and the result is a clean, focused resource that loads fast and works beautifully on phones, which is exactly what you want for a travel guide people might reference while actually on the island.&lt;/p&gt;

&lt;p&gt;Looking back at what it took to create a website 20 years ago versus what I just did with Carrd, the contrast is almost absurd.&lt;/p&gt;

&lt;p&gt;In 2005, if I wanted to build even a simple one-page guide to Skiathos, I would have been writing HTML by hand in a text editor, probably Notepad or maybe Dreamweaver if I was willing to pay for it. Every &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;, every &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; (because that's how we did layouts back then), every bit of CSS had to be typed out manually. Want to center an image? Good luck with the browser compatibility issues between Internet Explorer 6, Firefox, and whatever else people were using.&lt;/p&gt;

&lt;p&gt;And that's just the markup. Getting the site online meant finding a web host, figuring out FTP credentials, uploading files through FileZilla or some similar client, and hoping you didn't break anything in the process. If you wanted to update a single line of text, you had to edit the HTML file locally, save it, re-upload it via FTP, and then clear your cache to see if it actually worked.&lt;/p&gt;

&lt;p&gt;Responsive design didn't really exist yet. Mobile web was WAP and flip phones. You built for desktop monitors at 800x600 or 1024x768 resolution and called it a day. If someone tried to view your Skiathos guide on their Nokia phone, they'd get a tiny, barely-readable version of the desktop site.&lt;/p&gt;

&lt;p&gt;Image optimization was manual. I would have needed Photoshop or GIMP to resize and compress photos, save them as JPEGs at the right quality level, and hope the file sizes weren't too large for people on dial-up or early broadband connections.&lt;/p&gt;

&lt;p&gt;With Carrd, I dragged and dropped. The tool handled responsive breakpoints automatically. Images got optimized on upload. The site was SSL-secured and CDN-hosted without me thinking about it. Form integrations, if I wanted them, were just toggles. The whole thing was live on a custom domain within minutes.&lt;/p&gt;

&lt;p&gt;What took specialized knowledge, multiple software tools, and genuine technical skill two decades ago is now something anyone can do in an afternoon with zero coding knowledge. The democratization is remarkable, honestly. But there's also something I miss about that era: the constraint of having to actually understand how things worked under the hood made you a better builder, even if it was slower and more frustrating.&lt;/p&gt;

</description>
      <category>nocode</category>
      <category>website</category>
    </item>
    <item>
      <title>Ramen.tools: Yet another beautiful way to flex your SaaS subscriptions</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Sun, 12 Apr 2026 15:42:26 +0000</pubDate>
      <link>https://forem.com/andbjo/ramentools-yet-another-beautiful-way-to-flex-your-saas-subscriptions-1dk0</link>
      <guid>https://forem.com/andbjo/ramentools-yet-another-beautiful-way-to-flex-your-saas-subscriptions-1dk0</guid>
      <description>&lt;p&gt;Look, we need to talk about our collective addiction to "show your stack" websites. And yes, &lt;em&gt;ramen.tools&lt;/em&gt; is absolutely one of them, and yes, I'm about to spend several paragraphs gushing about it because I have no self-control.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Phenomenon
&lt;/h2&gt;

&lt;p&gt;Somewhere between LinkedIn humble-bragging and actual productivity, there exists a special corner of the internet where people lovingly curate lists of the 47 different SaaS tools they pay for monthly. It's like Pokemon, except instead of catching them all, you're &lt;em&gt;paying&lt;/em&gt; for them all, and your bank account is crying softly in the corner.&lt;/p&gt;

&lt;p&gt;First there was StackShare. Then there was uses.tech. Then someone made YC companies share their stacks. Then indie hackers started posting theirs. Now we have ramen.tools, and honestly? We're probably three weeks away from "show me your Notion templates for organizing your stack-sharing profiles."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Ramen Though?
&lt;/h2&gt;

&lt;p&gt;The name is actually kind of brilliant in that startup-cutesy way that makes you simultaneously cringe and smile. Ramen is cheap, scrappy, bootstrapper food. The irony of using a ramen-themed site to show off your $3,000/month SaaS budget is &lt;em&gt;chef's kiss&lt;/em&gt;. It's like calling your luxury car dealership "Beans on Toast Motors."&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes This One Different?
&lt;/h2&gt;

&lt;p&gt;Here's the thing about ramen.tools: it's clean, it's simple, and it presents your tech stack like it's a Michelin-starred tasting menu instead of a screenshot of your browser's bookmark bar. Each tool gets a little card. There are categories. Everything is organized. It's beautiful.&lt;/p&gt;

&lt;p&gt;Is it &lt;em&gt;necessary&lt;/em&gt;? Absolutely not. Could you just... write a blog post? Sure. Make a GitHub gist? Yep. But would any of those options make your use of &lt;em&gt;Superhuman&lt;/em&gt; and &lt;em&gt;Linear&lt;/em&gt; look quite as impressive? I think not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Question
&lt;/h2&gt;

&lt;p&gt;How many of these sites will AI spawn? Oh buddy, buckle up. We're going to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated stack recommendations based on your vibe&lt;/li&gt;
&lt;li&gt;Sites that auto-populate your stack by scanning your credit card statements (terrifying)&lt;/li&gt;
&lt;li&gt;"Stack dating" where you match with other developers based on tool compatibility&lt;/li&gt;
&lt;li&gt;NFTs of famous developers' stacks (please no)&lt;/li&gt;
&lt;li&gt;A site that tells you which YC batch you would have gotten into based on your tooling choices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI slop tsunami is real, and "show your stack" sites are the perfect victim because they're 90% template and 10% content. We're going to drown in them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Love Them Anyway
&lt;/h2&gt;

&lt;p&gt;But here's why we keep clicking, keep sharing, keep making new ones: there's something deeply human about wanting to peek inside someone else's workflow. It's the digital equivalent of checking out what's in someone's grocery cart. We're nosy. We want to optimize. We're convinced that if we just find the &lt;em&gt;right&lt;/em&gt; combination of tools, we'll finally be productive enough to justify spending four hours setting them all up.&lt;/p&gt;

&lt;p&gt;Plus, let's be honest: half the fun of being a developer/founder/creator in 2026 is having &lt;em&gt;opinions&lt;/em&gt; about tools. Vim vs VS Code? Notion vs Obsidian? Whether Vercel's pricing is highway robbery? These are the debates that sustain us.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;Ramen.tools is good, actually. It's well-designed, it serves its purpose, and if you're going to waste time comparing your stack to other people's stacks (and you are, don't lie), you might as well do it somewhere pretty.&lt;/p&gt;

&lt;p&gt;Will we need 50 more of these? No. Will we get them anyway? Absolutely. Will I check out every single one and probably add my stack to at least three of them? You know I will.&lt;/p&gt;

&lt;p&gt;Now if you'll excuse me, I need to go update &lt;a href="https://ramen.tools/@andbjo" rel="noopener noreferrer"&gt;my ramen.tools profile&lt;/a&gt; to add that new AI-powered clipboard manager I just signed up for. It's essential. Revolutionary, even. I'll definitely use it.&lt;/p&gt;

</description>
      <category>saas</category>
    </item>
    <item>
      <title>The Wild West of ASP: A Love Letter to the Early Web</title>
      <dc:creator>Anders Björk</dc:creator>
      <pubDate>Sat, 28 Mar 2026 10:56:06 +0000</pubDate>
      <link>https://forem.com/andbjo/the-wild-west-of-asp-a-love-letter-to-the-early-web-4j5k</link>
      <guid>https://forem.com/andbjo/the-wild-west-of-asp-a-love-letter-to-the-early-web-4j5k</guid>
      <description>&lt;h1&gt;
  
  
  The Wild West of ASP: A Love Letter to the Early Web
&lt;/h1&gt;

&lt;p&gt;There was something gloriously chaotic about learning ASP in the late 1990s and early 2000s. No bootcamps, no TypeScript configs, no package.json files with 47,000 dependencies. Just you, Notepad, and a burning desire to make things happen on the server side.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Learning Landscape
&lt;/h2&gt;

&lt;p&gt;The internet back then was a different place for developers. You didn't have Stack Overflow. You didn't have thousands of YouTube tutorials. What you had were a handful of websites run by enthusiasts who genuinely loved this stuff and wanted to share what they knew.&lt;/p&gt;

&lt;p&gt;4GuysFromRolla.com was the crown jewel. Scott Mitchell and his crew weren't just writing documentation, they were building a community. Their tutorials had personality. They'd walk you through creating a guest book, building a simple CMS, or implementing user authentication, and they'd do it in plain English with working code samples you could actually copy and paste. The site had this warm, collegial feeling, like you were learning from friends who happened to be a few steps ahead of you.&lt;/p&gt;

&lt;p&gt;Then there were sites like ASPToday, which ran daily articles (an ambitious publishing schedule even by today's standards), and the various forums scattered across the web. Dev Shed, WebDeveloper.com, and countless personal sites with names like "Bob's ASP Corner" or "The ASP Zone." These weren't slick, venture-capital-backed platforms. They were hobbyist sites with garish color schemes, animated GIFs in the headers, and genuinely helpful people answering questions.&lt;/p&gt;

&lt;p&gt;You'd bookmark dozens of these sites. You'd print out tutorials on actual paper. You'd keep a binder of code snippets because searching your hard drive was less reliable than just flipping through printed pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code Itself: Beautiful Chaos
&lt;/h2&gt;

&lt;p&gt;ASP code from that era was wonderfully, terrifyingly free. There was no webpack, no linting, no CI/CD pipeline complaining about your coding standards. You just wrote code, uploaded it via FTP, and refreshed your browser.&lt;/p&gt;

&lt;p&gt;A typical ASP page might look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;%@ Language=VBScript %&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;My Cool Page&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;%
Dim conn, rs, sql
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp;amp; Server.MapPath("database.mdb")

sql = "SELECT * FROM products WHERE category = '" &amp;amp; Request.QueryString("cat") &amp;amp; "'"
Set rs = conn.Execute(sql)

While Not rs.EOF
    Response.Write "&amp;lt;h3&amp;gt;" &amp;amp; rs("ProductName") &amp;amp; "&amp;lt;/h3&amp;gt;"
    Response.Write "&amp;lt;p&amp;gt;Price: $" &amp;amp; rs("Price") &amp;amp; "&amp;lt;/p&amp;gt;"
    rs.MoveNext
Wend

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
%&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Look at that. SQL injection vulnerability right there in the open. Presentation logic mixed with data access. No separation of concerns. Connection handling that would make a modern DBA weep. And yet... it worked. You could build something functional in an afternoon.&lt;/p&gt;

&lt;p&gt;The coding style was utterly unstructured by today's standards. Everything lived in one file if you wanted it to. You'd have a page that handled form submission, database queries, business logic, and HTML rendering all mixed together in a glorious spaghetti of &amp;lt;% %&amp;gt; tags and HTML. &lt;/p&gt;

&lt;p&gt;People would create "libraries" by just including other ASP files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!--#include file="header.asp"--&amp;gt;
&amp;lt;!--#include file="database_functions.asp"--&amp;gt;
&amp;lt;!--#include file="user_functions.asp"--&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These includes would just dump their code right into your page. Variable scope? Session variables everywhere. Global state? Sure, why not. It was the Wild West, and we were all cowboys.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Access Database Era
&lt;/h2&gt;

&lt;p&gt;And then there were Access databases. Beautiful, maligned, wonderful Access databases.&lt;/p&gt;

&lt;p&gt;For small projects, Access was perfect. You didn't need to install MySQL. You didn't need to configure anything. You just created a .mdb file in Microsoft Access, designed your tables with the GUI (relationships and all), and boom, you had a database. Upload it to your web server, point your connection string at it, and you were in business.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &amp;amp; Server.MapPath("mydb.mdb")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That was it. No credentials, no server configuration, no port numbers to remember. The database was just a file sitting in your web directory (hopefully in a folder outside the web root, but let's be honest, not always).&lt;/p&gt;

&lt;p&gt;Access databases could handle thousands of records just fine. For a small business website, a personal blog, a community forum with a few hundred users, they were absolutely adequate. They got a bad reputation because people would try to use them for high-traffic applications, and yes, they'd fall over. But for what they were designed for, they were brilliant.&lt;/p&gt;

&lt;p&gt;The Access interface itself was approachable. You could design forms, create queries visually, build simple reports. Non-programmers could maintain the data. It was democratic in a way that PostgreSQL command-line tools could never be.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Speed of Development
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody talks about when they reminisce about the old days: you could build something useful incredibly fast.&lt;/p&gt;

&lt;p&gt;Need a contact form that saves to a database? Thirty minutes, maybe an hour if you wanted it to look nice. Need a simple content management system? A weekend project. Want to add user authentication to your site? Copy some code from 4GuysFromRolla, modify it for your needs, done.&lt;/p&gt;

&lt;p&gt;There was no ceremony. No setting up Docker containers, no configuring webpack, no deciding between seventeen different JavaScript frameworks. You opened Notepad (or if you were fancy, HomeSite or Dreamweaver), wrote some code, saved it as .asp, uploaded it, and you were live.&lt;/p&gt;

&lt;p&gt;The feedback loop was immediate. Change code, hit F5, see results. No build step. No compilation. No waiting for hot module replacement to kick in. Just instant gratification.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community Spirit
&lt;/h2&gt;

&lt;p&gt;The ASP community had something special. It was small enough that you'd recognize the same names helping people on different forums. There was no snark, no "let me Google that for you" responses. People genuinely wanted to help.&lt;/p&gt;

&lt;p&gt;When someone posted a question, they'd often include their entire code file. Not a minimal reproducible example, just all 300 lines of their product catalog page. And people would actually read through it and help. They'd spot the error on line 187 where you forgot to set an object to Nothing, or notice that you were opening a database connection inside a loop.&lt;/p&gt;

&lt;p&gt;There were personalities. The "ASP gurus" who seemed to know everything. The newcomers asking basic questions. The intermediate folks helping out while still learning themselves. It felt like a real community, not just a Q&amp;amp;A marketplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We've Gained
&lt;/h2&gt;

&lt;p&gt;Today's web development landscape is objectively better in many ways. The tooling is incredible. TypeScript catches errors before they reach production. Modern frameworks handle state management in ways that make sense. Package managers mean you don't have to reinvent the wheel for every common task.&lt;/p&gt;

&lt;p&gt;Security is taken seriously now. We have HTTPS everywhere, proper encryption, frameworks that sanitize inputs by default. The SQL injection vulnerability in that code sample above would never make it past a code review today.&lt;/p&gt;

&lt;p&gt;The databases are better. PostgreSQL, MySQL, SQL Server, they're all powerful, reliable, and can scale to millions of records. ORMs handle the tedious parts of data access. Migrations track schema changes.&lt;/p&gt;

&lt;p&gt;Development environments are sophisticated. VS Code with its extensions, IntelliSense, debugging tools, Git integration. The modern developer has superpowers compared to someone in 1999 with Notepad and an FTP client.&lt;/p&gt;

&lt;p&gt;Testing is built into the workflow. CI/CD pipelines catch issues before deployment. Monitoring tools tell you when things break. The entire ecosystem around professional software development has matured enormously.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We've Lost
&lt;/h2&gt;

&lt;p&gt;But we've also lost some things, and not all the changes are pure progress.&lt;/p&gt;

&lt;p&gt;We've lost simplicity. A new developer today faces an overwhelming landscape. Which framework should they learn? React? Vue? Svelte? What about the backend? Node? Python? Go? What about databases, deployment, cloud providers, containerization? The barrier to entry is so much higher now.&lt;/p&gt;

&lt;p&gt;We've lost immediacy. The edit-save-refresh cycle has been replaced with build processes, transpilation, bundling. Yes, hot reload helps, but there's still something between you and the metal. You can't just FTP a file and see your changes live in seconds.&lt;/p&gt;

&lt;p&gt;We've lost that scrappy, make-it-work attitude. Today's best practices are genuinely better practices, but they also add ceremony. You're supposed to write tests first. You're supposed to separate concerns. You're supposed to use dependency injection. These are all good ideas, but they slow you down when you just want to make something.&lt;/p&gt;

&lt;p&gt;We've lost some of the community intimacy. Stack Overflow is fantastic, but it's transactional. You post a question, someone answers it, you move on. The old forums had ongoing relationships. You'd see the same people week after week. You'd graduate from asking questions to answering them. It felt like growth.&lt;/p&gt;

&lt;p&gt;We've lost the personal websites. Those individual developers who'd post tutorials on their own domains, with their own personality shining through. Now everything is on Medium, Dev.to, or corporate blogs. It's more polished but less personal.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Still Rocks from the Early Days
&lt;/h2&gt;

&lt;p&gt;Some things from the ASP era deserve recognition, even reverence:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The directness of it all.&lt;/strong&gt; You could look at an ASP page and understand the entire flow from request to response. No magic, no framework abstractions, just code executing from top to bottom. That transparency was pedagogically valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The completeness of simple solutions.&lt;/strong&gt; An Access database application was completely self-contained. You could zip up a folder and hand someone a working application. Try doing that with a modern web app and its node_modules folder, database migrations, environment variables, and cloud dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The low stakes experimentation.&lt;/strong&gt; You could try things without committing to an entire ecosystem. Want to experiment with e-commerce? Just add a shopping cart table to your Access database and write some checkout code. No need to evaluate payment processing SDKs, comply with PCI requirements from day one, or set up a secure key management system. You could prototype fast and learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The view source culture.&lt;/strong&gt; You could right-click on any page, view source, and see how it was built. Yes, you only saw the HTML output, not the ASP code, but people would share their actual code liberally. Today's minified, bundled, compiled output is technically superior but pedagogically opaque.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 80/20 solutions.&lt;/strong&gt; Access databases and simple ASP code got you 80% of the way there for probably 5% of the effort. Yes, the last 20% was hard, but most projects didn't need that last 20%. Most projects just needed to work well enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;Is everything better today? In terms of capability, scalability, security, and professional software engineering practices, absolutely yes. Modern web development produces better software, more reliably, at greater scale.&lt;/p&gt;

&lt;p&gt;But we've paid a price in accessibility and joy. The early web was a place where a curious teenager could view source, learn some ASP from 4GuysFromRolla, spin up an Access database, and build something real. That ladder into programming still exists, but it's gotten longer and more complex.&lt;/p&gt;

&lt;p&gt;The truth is, we need both. We need the rigor and sophistication of modern development for the applications that run our world. But we also need to preserve some of that early-web spirit: the idea that someone with curiosity and determination can build something without asking permission, without a computer science degree, without mastering a dozen tools first.&lt;/p&gt;

&lt;p&gt;Maybe that's what still rocks most about those early days. Not the specific technologies, which were genuinely limited in many ways, but the feeling that the web was this open, malleable space where anyone could make something. Where the barrier between user and creator was permeable. Where "I wonder if I could build that" was answered by opening a text editor and just trying.&lt;/p&gt;

&lt;p&gt;The 4GuysFromRolla.com crew and all those other tutorial writers weren't just teaching ASP syntax. They were teaching a mindset: that the web is yours to shape, that building things is learnable, that imperfect working code beats perfect planning every time.&lt;/p&gt;

&lt;p&gt;That spirit, more than any specific technology, is what deserves to survive from those early, chaotic, wonderful days.&lt;/p&gt;

</description>
      <category>vintageweb</category>
      <category>web</category>
      <category>asp</category>
      <category>aspnet</category>
    </item>
  </channel>
</rss>
