<?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>DEV Community: David Maidment</title>
    <description>The latest articles on DEV Community by David Maidment (@dlm).</description>
    <link>https://dev.to/dlm</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%2F594659%2F59f370b1-b0d5-45a7-b8ba-a3e50c22ec05.jpg</url>
      <title>DEV Community: David Maidment</title>
      <link>https://dev.to/dlm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dlm"/>
    <language>en</language>
    <item>
      <title>'I wonder if...': Moving ASCII art</title>
      <dc:creator>David Maidment</dc:creator>
      <pubDate>Fri, 14 May 2021 06:52:17 +0000</pubDate>
      <link>https://dev.to/ctowestmidlands/i-wonder-if-moving-ascii-art-5b67</link>
      <guid>https://dev.to/ctowestmidlands/i-wonder-if-moving-ascii-art-5b67</guid>
      <description>&lt;p&gt;'ASCII cinema,' was all that I heard. Sat in a weekly sprint meeting, my mind focused more on arranging my upcoming week of work than paying attention to the person offering a retrospective of their just-completed sprint, my ears perked up at the mention of what sounded like something magical.&lt;/p&gt;

&lt;p&gt;The reference was, of course, to asciinema, a tool for recording terminal sessions that was wholly-relevant to the retrospective. But all I heard was, 'You could play The Godfather in the terminal.'&lt;/p&gt;

&lt;p&gt;Such technology speaks for itself, surely?&lt;/p&gt;

&lt;p&gt;We all joked about my absentmindedness and mused for a few minutes on the practicalities of playing back video as moving ASCII art, then continued with the retrospective. But my brain couldn't let go of the challenge; by the end of the meeting I had already mapped out the basic workings of the codec in my mind's IDE.&lt;/p&gt;

&lt;p&gt;For those as lazy as me who just want to see the end result, this is what I managed to code in the space of about half an hour, using a GIF as input, JSON as the storage format and Golang as the programming language:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.maidment.dev%2Fuploads%2Fab0c5776-1372-451b-9519-45415835a8c1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.maidment.dev%2Fuploads%2Fab0c5776-1372-451b-9519-45415835a8c1.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it so
&lt;/h2&gt;

&lt;p&gt;Having decided to write the most [un]necessary codec I could think of, my first thought was how to store the data.&lt;/p&gt;

&lt;p&gt;In the spirit of misusing technology, I decided that JSON would be the way to go. The format certainly lent itself to storing necessary metadata such as the frame rate, which I planned to preserve from the input file and match on playback with dynamically calculated &lt;code&gt;sleep&lt;/code&gt; commands.&lt;/p&gt;

&lt;p&gt;I recently gained some experience working with images on the pixel level for &lt;a href="https://blog.maidment.dev/posts/writing-a-2d-platform-game-engine-in-golang" rel="noopener noreferrer"&gt;another project&lt;/a&gt;, so my go-to approach was to read in an image (a GIF version of a movie seemed to make sense) and grab the RGB value of each pixel to save losslessly in some manner that could later be displayed in the terminal.&lt;/p&gt;

&lt;p&gt;To begin with, I knew that I needed to store an initial key frame containing the colour values of all of the first frame's pixels. Coding in Golang, a map of maps of integers (an associative multidimensional array, in other languages) seemed to fit the bill, where the map keys would represent &lt;code&gt;x&lt;/code&gt;/&lt;code&gt;y&lt;/code&gt; pixel coordinates and the leaf values would be &lt;code&gt;-1&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt; or &lt;code&gt;1&lt;/code&gt; to denote the pixel's colour—I initially opted for a black / grey / white colour palette.&lt;/p&gt;

&lt;p&gt;The JSON for such a key frame would look something like:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "1":           // Row 1
    {
      "1": 1,    // Column 1
      "2": 0,    // Column 2
      "3": -1    // Column 3
    },
  "2":           // Row 2
    {
      "1": 0,    // Column 1
      "2": 0,    // Column 2
      "3": 0     // Column 3
    },
  "3":           // Row 3
    {
      "1": -1,   // Column 1
      "2": 1,    // Column 2
      "3": 1     // Column 3
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When the values for such a data set are arranged in order, a basic picture emerges:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00000000000000
00001111110000
00011111111000
00111111111100
00011111111000
00011111111000
00001111110000
00000000000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Subsequent frames would also have their pixels traversed, but only those pixels whose values differed from the previous frame would be stored on the next frame map. For example:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "1":           // Row 1
    {
      "2": 1,    // Column 2
      "3": 0     // Column 3
    },
  "3":           // Row 3
    {
      "3": -1    // Column 3
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If the only change in a frame was that a character blinked, then only data for the pixels around their eyes would need to be stored.&lt;/p&gt;

&lt;h2&gt;
  
  
  Playing it all back
&lt;/h2&gt;

&lt;p&gt;As mentioned previously, I opted for black, white and grey as the three colours of the palette. My theory was that you could get a fairly good image out of those three colours by taking the average of each pixel's RGB components, &lt;code&gt;((R+G+B)/3)&lt;/code&gt;, and assigning the lower third to black, the middle third to grey and the upper third to white.&lt;/p&gt;

&lt;p&gt;Characters that covered an appropriate amount of space on-screen could be used to represent those colours (I chose a space, a slash and a capital W, respectively). Displaying them would simply involve building up multiple strings (one per scanline), flushing them all to the terminal once per frame and then issuing &lt;code&gt;sleep&lt;/code&gt; and &lt;code&gt;clear&lt;/code&gt; commands.&lt;/p&gt;

&lt;p&gt;The first test produced this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.maidment.dev%2Fuploads%2F6c99c9f9-3a35-4d2c-8ea5-19f0e3630c66.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.maidment.dev%2Fuploads%2F6c99c9f9-3a35-4d2c-8ea5-19f0e3630c66.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Three 'colours' worked, but not well enough.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The result wasn't terrible, but the image also wasn't as clear as I had hoped. I needed to preserve more colour data. After some googling I managed to find a list of around 70 characters that covered a wide range of screen real estate.&lt;/p&gt;

&lt;p&gt;I processed my test video again but the result was disappointing—the animation was mostly recognisable, but the resolution was simply too low to make the extra 'colours' worth it.&lt;/p&gt;

&lt;p&gt;After much tinkering, a selection of ten characters seemed to yield the best results. This is what you saw in the first GIF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improvements I should have made
&lt;/h2&gt;

&lt;p&gt;There were some obvious improvements that I could have made to the codec, had I not given up once I had proved to myself that, yes, I could watch The Godfather in the terminal, if I really wanted to.&lt;/p&gt;

&lt;p&gt;Experimenting with a 500MiB JSON file (converted from a 20-minute TV show), I was faced with a lead time of around one minute while the data was loaded into memory. It strikes me that abandoning JSON and switching to a one-frame-per-line format would enable streaming to begin instantly.&lt;/p&gt;

&lt;p&gt;Switching to a non-JSON format would probably also yield lower file sizes, perhaps as small as 200MiB in this instance, assuming that low-impact delimiters were used in favour of the quotes and braces that comprise a sizeable percentage of JSON strings.&lt;/p&gt;

&lt;p&gt;It would also be interesting to explore run-length encoding for key frames (and/or those frames with over 50% of pixel values changed). Although I have not yet carried out any experiments to confirm it, I suspect that the small 'colour' palette would lend itself nicely to this kind of compression.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>silly</category>
    </item>
    <item>
      <title>Should you build it, or abandon it?</title>
      <dc:creator>David Maidment</dc:creator>
      <pubDate>Thu, 29 Apr 2021 21:28:43 +0000</pubDate>
      <link>https://dev.to/ctowestmidlands/should-you-build-it-or-abandon-it-381n</link>
      <guid>https://dev.to/ctowestmidlands/should-you-build-it-or-abandon-it-381n</guid>
      <description>&lt;p&gt;Over time a product will accumulate many features. Some are core features. Some are proofs of concept that have yet to be validated. Some are proofs of concept that failed. Some were once extremely relevant but are no longer fit for purpose. Some are a work in progress.&lt;/p&gt;

&lt;p&gt;The point is: features accumulate, and when it comes to determining their relevance and maintainability, no two are the same. But one thing most features &lt;em&gt;do&lt;/em&gt; have in common is that, at some point in time, someone thought they were a good idea.&lt;/p&gt;

&lt;p&gt;We've all maintained poorly designed features. If we've been lucky (or maybe unlucky, depending on how you look at it), someone else was responsible for them. We've all looked at something and thought, 'Who built this, and what were they smoking?'&lt;/p&gt;

&lt;p&gt;Hindsight is a wonderful thing.&lt;/p&gt;

&lt;p&gt;And so the question presents itself: when confronted with the option of building or not building, of maintaining or abandoning, how should you proceed? How can you avoid becoming the guilty party at the other end of the 'What were they smoking?' jibe?&lt;/p&gt;

&lt;p&gt;This question is particularly pertinent for early-stage companies, where resources are considerably more finite and the potential impact of every feature (positive &lt;em&gt;or&lt;/em&gt; negative) is considerably larger.&lt;/p&gt;

&lt;p&gt;It can be helpful to take a step back and answer two simple questions as bluntly as possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did users ask for it?&lt;/li&gt;
&lt;li&gt;Are users actually using it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or, if the feature has yet to be built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have users asked for it?&lt;/li&gt;
&lt;li&gt;Have we validated that they actually need it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The answers to those questions can help you categorise the current state of the feature; it may be: &lt;strong&gt;Mission Critical&lt;/strong&gt;, a &lt;strong&gt;Stroke of Genius&lt;/strong&gt;, a &lt;strong&gt;Waste of Time&lt;/strong&gt; or a reminder that, often, &lt;strong&gt;Vision ≠ Reality&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RmTw2Flm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.maidment.dev/uploads/ff4fd53b-b1f5-4bbe-9bf4-abd8b885980b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RmTw2Flm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://blog.maidment.dev/uploads/ff4fd53b-b1f5-4bbe-9bf4-abd8b885980b.png" alt="A graphic with four quadrants, asking on the X axis if users asked for a feature and on the Y axis if they are using it. Quadrants are labelled as follows: top-left is 'Stroke of Genius', top-right is 'Mission Critical', bottom-left is 'Waste of Time' and bottom-right is 'Vision Does Not Equal Reality'." width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The obvious takeaway may be: &lt;em&gt;Spend most of your time building Mission Critical features and have game-changing innovations&lt;/em&gt;. However, it is important to understand that other types of features will end up in your product and to be realistic about your ability to consistently innovate.&lt;/p&gt;

&lt;p&gt;By understanding the qualities of each quadrant, and how a feature may be masquerading as a different type, this process becomes easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mission Critical features
&lt;/h2&gt;

&lt;p&gt;These are the features your users have asked for, you have duly built and everyone uses. They are the bread and butter of your business and should be no-brainers. If you are a car manufacturer, these features are engines, airbags and steering wheels.&lt;/p&gt;

&lt;p&gt;The decision to build these features comes from a combination of thorough market research, common sense and (if you are doing things right) dogfooding your own product.&lt;/p&gt;

&lt;p&gt;However, as obvious as these features seem, it can still be worth challenging your assumptions about them. Especially if they are the product of well established received wisdom.&lt;/p&gt;

&lt;p&gt;Do they represent an extremely ineffective way of doing things that your users have come to accept as an inevitable part of life? This is a hard question to answer, as it requires really thinking outside the box.&lt;/p&gt;

&lt;p&gt;If the answer is 'yes', then also ask yourself whether an opportunity exists to remove the feature (it may actually be a &lt;strong&gt;Waste of Time&lt;/strong&gt; that people have become accustomed to) or, even better, make a radical departure from the norm and disrupt the status quo by evolving it into a &lt;strong&gt;Stroke of Genius&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As the quote often attributed to Henry Ford goes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;'If I had asked people what they wanted, they would have said faster horses.'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Stroke of Genius features
&lt;/h2&gt;

&lt;p&gt;When you shake up the industry and create something no one realised they needed, you have a &lt;strong&gt;Stroke of Genius&lt;/strong&gt; on your hands.&lt;/p&gt;

&lt;p&gt;Features (or often, entire products) that fall into this category usually take two forms: entirely new inventions, and things that are suddenly possible because of a larger paradigm shift brought on by those new inventions.&lt;/p&gt;

&lt;p&gt;Most of our innovations will not fall into the &lt;em&gt;new inventions&lt;/em&gt; category. As much as we like to think that our idea will change the world, very few ever do. So it helps to be realistic about the scope of whatever you are building.&lt;/p&gt;

&lt;p&gt;Much of what we build instead rides the waves of new inventions. At the moment, the invention that many products and features piggyback off is the Internet. Many industries have been disrupted in a way that no one ever thought possible, largely down to the new abilities the Internet brought with it. Banking, shopping, photo processing, TV and film are just a few industries that now operate in entirely new ways.&lt;/p&gt;

&lt;p&gt;So apply that thinking to your own product. Maybe you'd love to build a widget that helps to automate people's lives. The technology to build it has always been science fiction (maybe some kind of advanced AI?), and no one has asked for it because humans have been successfully living their lives for hundreds of thousands of years without it. Then suddenly the technology to build it becomes available; you're ready to change the world.&lt;/p&gt;

&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;Perhaps not. With a product no one has asked for, you will find yourself fighting against years, decades or centuries of established status quo. You'll have to convince &lt;em&gt;everyone&lt;/em&gt; that they've been doing it wrong all this time. And no one likes to be proven wrong.&lt;/p&gt;

&lt;p&gt;Just because you build it, it doesn't necessarily follow that they will come. You may even find building the feature to be the easiest part of the process, with huge amounts of time, effort and money required to run a successful awareness campaign to obtain even your first few hesitant users (electric cars might be a good example of this). This is where a &lt;strong&gt;Stroke of Genius&lt;/strong&gt; risks becoming a &lt;strong&gt;Waste of Time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To combat this, aim to work in MVPs and spend the least time possible to get a workable version of an unvalidated idea out into the world. Take feedback, iterate, but don't commit huge quantities of time to it. By operating in this way you can run far more high-potential experiments in a given period of time and will feel less guilty about axing one of them when the numbers don't add up.&lt;/p&gt;

&lt;p&gt;It is also worth keeping perspective on the uniqueness of your idea. If it's been possible for a while to build your feature and no one in the market is currently doing so, this may not be an indication that you have a unique idea, but instead that it is a &lt;em&gt;really bad&lt;/em&gt; idea that others have already tried and failed at. Take this into consideration when deciding how much time you're willing to sink into an MVP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Waste of Time features
&lt;/h2&gt;

&lt;p&gt;Your users haven't asked for the feature, you built it anyway and they aren't using it. This is a waste of your time and resources, and such features will always benefit from being put on hold.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;Waste of Time&lt;/strong&gt; &lt;em&gt;may&lt;/em&gt; be an unrealised &lt;strong&gt;Stroke of Genius&lt;/strong&gt;, but probably not. Even if you are certain that you are onto something—something visionary and years ahead of its time—it is still worth limiting the time you spend on these features while you carry out market research (which may take the form of user feedback loops) and explore the implications of an awareness campaign.&lt;/p&gt;

&lt;p&gt;For anything that falls short of &lt;em&gt;game changing&lt;/em&gt;, do not be afraid of culling these kind of features from your product backlog before anyone gets a chance to build them. If an idea truly is worth building, you won't be able to keep it from reappearing time and time again in the backlog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features where Vision ≠ Reality
&lt;/h2&gt;

&lt;p&gt;What a user &lt;em&gt;wants&lt;/em&gt; vs what they &lt;em&gt;need&lt;/em&gt;. Features that fall into this category are those that are prescribed to be essential by users who do not yet have a use for them. This is sometimes due to ignorance, sometimes wishful thinking.&lt;/p&gt;

&lt;p&gt;These features may present themselves as being &lt;strong&gt;Mission Critical&lt;/strong&gt; due to received wisdom, especially in industries that have not recently been disrupted.&lt;/p&gt;

&lt;p&gt;Suppose your company builds an advanced web analytics suite. You came from a background in Big Marketing where this was an essential feature. But your clients have ended up being mostly small businesses. Like you, the folk at the small businesses are thinking big; they dream of the game-changing insights you might help them uncover. But in reality, they have almost no data for you to work with and all they really need is a way of correlating banner impressions with online sales.&lt;/p&gt;

&lt;p&gt;Features that fall into this category may also be the product of a vocal minority. If those taking part in your market research do not accurately represent your target audience, you may end up building 90% of your product for 10% of your users. Beware those who shout the loudest, and try to avoid launching into Build Mode as a knee-jerk reaction to every shiny new feature request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the obvious, then experiment
&lt;/h2&gt;

&lt;p&gt;When you are trialling new ideas or deciding what to do with old ideas, objectivity is key.&lt;/p&gt;

&lt;p&gt;Build the obvious &lt;strong&gt;Mission Critical&lt;/strong&gt; features and spend the time needed to validate your &lt;strong&gt;Stroke of Genius&lt;/strong&gt; ideas. Work in cycles and advance your bold ideas a bit at a time, doubling down on them when the data shows you're onto something, and cutting your losses when it's obvious you made a mistake.&lt;/p&gt;

&lt;p&gt;Always avoid the temptation to build shiny and complex things where &lt;strong&gt;Vision ≠ Reality&lt;/strong&gt; just because they excite you, and make a habit of frequently—and brutally—culling unvalidated &lt;strong&gt;Waste of Time&lt;/strong&gt; ideas from your backlog.&lt;/p&gt;

&lt;p&gt;As a business &lt;em&gt;and&lt;/em&gt; as an individual, you only have so much time and money, so use both wisely. Keep it simple, triage features with a detached objectivity and avoid the obvious traps.&lt;/p&gt;

</description>
      <category>features</category>
      <category>planning</category>
      <category>technology</category>
    </item>
    <item>
      <title>'Just because I can build this, should I?'</title>
      <dc:creator>David Maidment</dc:creator>
      <pubDate>Thu, 18 Mar 2021 08:49:20 +0000</pubDate>
      <link>https://dev.to/ctowestmidlands/just-because-i-can-build-this-should-i-52k5</link>
      <guid>https://dev.to/ctowestmidlands/just-because-i-can-build-this-should-i-52k5</guid>
      <description>&lt;p&gt;When it first became available to anyone with a telephone line and a modem, The World Wide Web was a very special place. Every trip onto the Web was a voyage of discovery. Content was being created at breakneck speeds, and behind every website was someone who took on the mantle of 'webmaster' for the pure love of the subject matter.&lt;/p&gt;

&lt;p&gt;Interested in the ecology of Iceland? The works of Chaucer? The Powerpuff Girls? You could guarantee there would be at least one website on the subject painstakingly curated by someone just as fanatical as you. Someone who cared so much about the subject they taught themselves HTML just to share what they knew. It was fandom-driven-development.&lt;/p&gt;

&lt;p&gt;The Web was also a beautiful maze.&lt;/p&gt;

&lt;p&gt;There were no search engines. No algorithms telling you what to look at next. Nothing to serve up content specifically to support your worldview. Anything you wanted to see, you had to go out and specifically look for it. And if in the process you came across a little pocket of culture that was foreign to you, you would learn something new about the world. There were no comments sections telling you that what you had just read was wrong and that the author should harm themselves—you were trusted to use common sense to form an original opinion.&lt;/p&gt;

&lt;p&gt;Perhaps most importantly, The Web was a place where communities sprang up organically.&lt;/p&gt;

&lt;p&gt;In 2021, companies pour huge amounts of time and money into curating communities—Chief Community Officer is a real job title you can hold. It's taken a long time, but the importance of communities is increasingly being recognised by businesses.&lt;/p&gt;

&lt;p&gt;But back in the 1990s? Any enthusiast with a modem was capable of bringing together hundreds or thousands of strangers. Those online communities came about naturally, and from them, you could make friends. Real friends. Friends you would stay up until the early hours of the morning talking to about everything and nothing. Far-flung friends who would teach you about their interests, their part of the world and their culture. You never stopped learning.&lt;/p&gt;

&lt;p&gt;In those days I ran a number of vibrant communities, none of which were intentional. They just happened, because humans are good at organising into groups. It's literally in our DNA. That evolutionary trick helped us grow from cavepeople to a global civilisation. It put people on The Moon. But working in groups requires trust, and trust is built by getting to know someone.&lt;/p&gt;

&lt;p&gt;We tend now to treat the problem of 'community' as though it's a new one, but it isn't. We've always known how to build them. Decades ago, online, they were everywhere. So what changed?&lt;/p&gt;

&lt;p&gt;In the early 2000s, The Web took a hard right as Social Media took off. The importance of The Individual over The Community soared, and many of the old vibrant communities migrated to social platforms to die a slow, undignified death.&lt;/p&gt;

&lt;p&gt;Why did this happen?&lt;/p&gt;

&lt;p&gt;Once advertising became a viable online business model, finding ways to make users return to your site every day took centre stage. Almost overnight, dopamine became the currency of The Web, and interactions became more individual-centric. Where we used to have to get to know someone and form a real, human connection, it became the norm to broadcast short messages about ourselves—Status Updates, which we all knew and loved as the taglines of our IM profiles, now without the need to have the accompanying conversation. And when typing became too much work, &lt;em&gt;Likes&lt;/em&gt; simplified the process even further. We collected hundreds of 'friends', knowing precisely nothing about most of them. It was how all the platforms operated, so it became the new normal.&lt;/p&gt;

&lt;p&gt;To keep the dopamine flowing, the new generation of community tech worked hard to avoid negative experiences. Keeping you in an echo chamber is the easiest way to do this: see more of what you like, and less of what you do not. On paper it sounds like a good idea, but in practice it deepens trivial political divides and removes healthy challenges to your worldview.&lt;/p&gt;

&lt;p&gt;Soon enough lines were being drawn everywhere between imagined &lt;em&gt;us&lt;/em&gt; and &lt;em&gt;thems&lt;/em&gt;. We forgot that life is messy, people are not perfect and that there is nuance is every single situation; that nothing is simply good or evil; that some things require considered conversations rather than emojis. We stopped learning about each other and started making dangerous assumptions about each other.&lt;/p&gt;

&lt;p&gt;It. Was. Devastating. We had lost something truly beautiful.&lt;/p&gt;

&lt;p&gt;Growing up with technology, I was in constant awe of the possibilities. With The Web, I saw those possibilities flourish as communities self-organised around fansites, encouraging endless learning, conversations and friendships. The future was going to be something extraordinary, and it was all thanks to technology.&lt;/p&gt;

&lt;p&gt;But here's the thing: while technology &lt;em&gt;can&lt;/em&gt; be amazing, it is not amazing in and of itself; it requires us to &lt;em&gt;make&lt;/em&gt; it amazing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;We&lt;/em&gt; make technology. Technology that can go viral overnight and gain a large percentage of the world's population as users. So we have a responsibility to ensure that the things we create are carefully considered at every stage. No one set out to create today's individualistic online culture, and that's the most terrifying part—that it happened not because someone said, 'Let's change online behaviour for the worse,' but because they had to figure out how to monetise platforms that people were increasingly expecting to access for free.&lt;/p&gt;

&lt;p&gt;We have a responsibility to ensure that the technology that powers the next twenty years is better than the technology that powered the last twenty years.&lt;/p&gt;

&lt;p&gt;Regaining the lost potential of The Web (which I honestly believe is in self-organising, tangentially educational, social groups) is not a complex problem, but it will take a concerted effort to solve. If enough technologists work to reframe what is 'normal' online, we can undo some of the damage accidentally wrought by The Web. And it starts by asking a simple question at the beginning of each new project: 'Just because I &lt;em&gt;can&lt;/em&gt; build this, &lt;em&gt;should&lt;/em&gt; I?'&lt;/p&gt;

</description>
      <category>watercooler</category>
      <category>technology</category>
      <category>leadership</category>
      <category>healthydebate</category>
    </item>
  </channel>
</rss>
