<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[BBC Product &amp; Technology - Medium]]></title>
        <description><![CDATA[Building the best BBC products, platforms and services for audiences in the UK and around the world - Medium]]></description>
        <link>https://medium.com/bbc-product-technology?source=rss----ccd524e1760a---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>BBC Product &amp;amp; Technology - Medium</title>
            <link>https://medium.com/bbc-product-technology?source=rss----ccd524e1760a---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 13 Nov 2026 10:37:05 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/bbc-product-technology" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Things I have learned about Tech Leadership]]></title>
            <link>https://medium.com/bbc-product-technology/things-i-have-learned-about-tech-leadership-5efcf94065ca?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/5efcf94065ca</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[management-and-leadership]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[leadership]]></category>
            <dc:creator><![CDATA[Polly McEldowney]]></dc:creator>
            <pubDate>Wed, 21 Feb 2024 12:15:40 GMT</pubDate>
            <atom:updated>2024-02-21T12:15:40.873Z</atom:updated>
            <content:encoded><![CDATA[<p>I have now been a Software Engineering Team Lead on the BBC Sounds mobile apps team for 4 years. So what have I learned from this once-daunting, now-familiar role?</p><h3>Leadership does not mean telling people what to do.</h3><figure><img alt="a baby goose walking in front of its mother goose" src="https://cdn-images-1.medium.com/max/1024/1*fTMnEJSAeFJrGe3LIiTlxQ.jpeg" /><figcaption>Mother Goose is holding back here and letting the baby gosling stride confidently ahead</figcaption></figure><p>Before working at the BBC, I thought a tech lead’s job was to think of some work to do and command others to do it.</p><p>It was quite a damaging misconception, because it stopped me considering moving up from a software engineer into management. I don’t like telling people what to do. This is because I also don’t like being told what to do. As the youngest of four siblings, I have perhaps been overexposed to being bossed around. If someone ever talks to me in the imperative, I have an immediate, instinctive visceral response which vastly reduces the likelihood of my compliance with the request. I suspect I am not unique in this. So I never wanted to be That Guy, who makes other people feel like that.</p><p>But the excellent news is — it turns out you don’t need to be! The great thing is, grown up people are entirely capable of managing their own workloads. Assigning people specific tasks can often feel like micromanagement to them. If it is clear what tasks need to be done, people will prioritise the tasks into their own work streams and pick them up when they have capacity to do so.</p><h3>Collective decision making is good</h3><p>Another thing I used to think leaders had to do, was go and make up bold, dazzling strategies all by themselves and then tell everyone about their vision. Dictatorially make a swathe of tickets and dump them onto the board, whilst loudly trumpeting about their own self-worth in some public channel. In real life this will get you a lot of side-eye of course.</p><p>I vastly prefer the approach of talking through what needs to be done with the team and making sure everyone understands why it is important. We can work together to outline the high level goals and then discuss breaking the work down into tickets. Working together towards a shared vision is much more motivating for the team than being told exactly what to do and when. You want to get plenty of input from everyone when defining a scope of work — a team are likely to come up with better ideas for implementing stuff than a single person.</p><h3>Not every hill is worth dying on</h3><figure><img alt="The author, standing on a hill that she did not die on" src="https://cdn-images-1.medium.com/max/699/1*i_QE3KiZ3ZPEWDNjhi_AaQ.jpeg" /><figcaption>This was a lovely hill for example. No deaths were required.</figcaption></figure><p>Like many things in people management, this is reminiscent of a common parenting strategy — often summarised as “pick your battles”.<br>Influence in the workplace is like a currency which you can choose to spend in a particular argument or not. You can only really build this up to a high level in a slow, laborious way by gaining people’s trust over time. You get people’s trust by listening to their problems, seeing things from their side and helping them to fix things.</p><p>There aren’t really any shortcuts here unfortunately. If you try and wield influence without having enough trust behind it, people will generally politely ignore you. And even if you have plenty of trust, trying to influence too many things is not a good idea. People’s goodwill gets depleted the more you mither them. They will eventually stop listening to you if you are constantly sticking your oar in where it’s not required. You should also trust your team to make their own decisions.</p><p>Influence is most powerful when it’s used sparingly on something that is genuinely important — eg. you have an idea which will have a significant observable impact on your users, and you can clearly explain how it works and how it could be measured. If someone has used tabs instead of spaces in a PR, whilst it may superficially irritate you on a stylistic level, you might want to consider saving up that influence for another day.</p><h3>Rumpelstiltskin is a role model</h3><p>To be 100% clear, not in terms of theft of babies or weird name-guessing antics. For metaphorical purposes I am specifically thinking about this fairytale character’s ability to spin a roomful of straw into gold.</p><figure><img alt="A small gnome in a pointy hat stands by a spinning wheel and a worried looking lady in a room full of straw" src="https://cdn-images-1.medium.com/max/760/1*alficc7ixfBnZnIgGFfepQ.jpeg" /><figcaption>Side note: Rumpelstiltskin has a magnificent outfit here, he could be a fashion role model also</figcaption></figure><p>Sometimes at work, you will be given a task that you do not agree with but have little influence over. In this case, I think it’s useful to flag any concerns, with a clear, objective description of where you can foresee problems. But sometimes, the needs of other stakeholders outweigh other issues that you may have identified. I don’t generally expect my concerns to override everyone else’s and do not seek to veto every decision according to my personal whims.</p><p>So maybe a decision didn’t go your way. Congratulations! You are now the proud owner of a roomful of straw and you need to give this to your team to build meaningful things from. They are not going to like being given straw. So I recommend spinning it into gold first before presenting it to the team. Yes, this is basically politics, a word which is often used pejoratively at work. But it is an incredibly useful skill for keeping teams engaged.</p><p>Nobody is going to feel inspired and motivated to build something that is presented to them as a bad idea from the outset.<br>Your goal is to try and build team enthusiasm in the project. How do you do this if you don’t feel 100% behind the idea? It is hard, when your ego has been bruised. But at work in general, your ego is best left at the door. You could present the motivations that other people have given for it — acknowledge concerns but focus on the positives. If you are not in a situation where you can influence the decision, there is no benefit from stating that you don’t agree with it. And actually this can end up being more frustrating to the team than if you commit to an unpalatable outcome. <br>It’s good to document difficult decisions like this, as it can be painful to keep re-hashing conversations. You could use the document to finesse the framing of the approach — focussing on a long term preferred vision which addresses all concerns and keeps all stakeholders happy.</p><h3>What is the most helpful thing I can do for the team right now?</h3><p>This is a question I like to ask myself a lot.<br>As a leader, it can be hard to know what to focus on. Gone are the days of all your work being nicely encapsulated for you in tickets and your days punctuated by meetings that other people organise.<br>Instead you often veer between having a deluge of messages clamouring for your attention, to periods of complete radio silence where you suddenly need to decide what is the best use of your time.</p><p>I like the idea of the ‘servant leader’ — who keeps themselves fully aware of the challenges the team is facing, and constantly works to remove blockers and resolve problems. A ‘fixer’ if you will. Like Mike Ehrmantraut in Breaking Bad or The Wolf in Pulp Fiction.</p><p>Sometimes this could be putting in a PR for some dull but essential code that is important but would disrupt the team’s current focus.</p><p>Sometimes this could be a difficult conversation where people are arguing and you can help mediate.</p><p>Sometimes this could be a boring conversation about who owns that repo and how to get access.</p><p>Sometimes, after spending too long in Rumpelstiltskin mode, this could be simply to go into a quiet room and scream into the void for a while until you feel a bit better. If you are feeling stressed and emotional, getting your own head straight is often genuinely the best thing you can do for your team right now.</p><h3>Burnout</h3><p>I should put in a disclaimer before starting this bit, that I haven’t done much reading about burnout, because I have been too busy.<br>So I have an idea in my head of what this word means, which may or may not have any overlap with accepted clinical definitions.</p><figure><img alt="The “this is fine” meme image of a dog sitting in a room which is on fire" src="https://cdn-images-1.medium.com/max/1024/1*a5G0rS8Fii5D0tPmm-tfSQ.jpeg" /><figcaption>Is it though?</figcaption></figure><p>I do know that I love my job, and I love being busy. But occasionally, one day of continuous consecutive context-switching too many has tipped me over into a state where I am unable to sleep because my brain is constantly buzzing with work related problems. This is not a good place for a person to be. The fatigue carries over into their working day and feeds a positive feedback loop of increased stress which further impedes their ability to sleep. At this point, they really just need a bit of a break to regain their mental and physical composure. Everyone has a limit and I feel there’s little to be gained in the workplace by stumbling over it into a self-destructive realm of vastly reduced productivity.</p><p>The good thing about having had this experience is, I can now recognise the early stages of this process. <br>If I notice this happening to me, I know it’s really important to say no to things for a bit until my concurrent workload subsides. <br>I also think it’s a great idea to look out for this in other people. I have seen people at work actively defend other people’s diaries. e.g. In the classic case of a meeting that only exists to spawn another meeting. When someone comes up with a knee-jerk “let’s have another call and invite X” I’ve heard some people reply “Is this really relevant to X? X is pretty busy — I don’t think they really need to go to that call”. These people are legit heroes and we should carry them round on our shoulders cheering.</p><h3>Relationships</h3><p>Interpersonal relationships, to me, are the most important part of a job.<br>I like to invest as much time as possible into building good relationships with my colleagues. Small talk may feel like an indulgence, but it makes the big talk easier to approach when it becomes necessary.</p><p>If you have fallen out with someone at work, it is important to try and resolve it, however much you may want to skip around the edges of a conflict. If communication is not flowing, it can severely impact the work you are doing.</p><p>Conversely, if you have good relationships with your team, literally everything is easier. Understanding a task, asking all the stupid little questions that are in your head. It is much easier to reach out to people that you get on with. And if you genuinely value your colleagues, it makes it a much happier place to work.</p><p>The only slight disadvantage of this approach is that there is a risk that when you leave, you will have built up relationships that are very dear to you, and the leaving process may end up accidentally breaking your heart.</p><h3>Are you a leader?</h3><p>Tech leadership may have its tribulations but it is a wonderful and rewarding path to follow. I have learned a lot during my tenure as team lead from the various amazing people that I have had the privilege of working with. I would recommend this path to anyone who hasn’t been put off by my ramblings above. Thank you for reading and good luck upon your quest x</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5efcf94065ca" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/things-i-have-learned-about-tech-leadership-5efcf94065ca">Things I have learned about Tech Leadership</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Getting inspired at the BBC Engineering Conference]]></title>
            <link>https://medium.com/bbc-product-technology/getting-inspired-at-the-bbc-engineering-conference-79be80ec30b7?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/79be80ec30b7</guid>
            <category><![CDATA[tech-conference]]></category>
            <category><![CDATA[conference]]></category>
            <category><![CDATA[bbc]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[David Andrade]]></dc:creator>
            <pubDate>Thu, 17 Nov 2022 14:46:00 GMT</pubDate>
            <atom:updated>2022-11-17T14:46:00.246Z</atom:updated>
            <content:encoded><![CDATA[<p>The BBC’s Engineering teams develop and run our digital products at scale — ensuring our digital services are available and accessible to audiences that need them the most, and as as reliable as our broadcast ones.</p><p>Recent times have tested the resilience of our teams and our services but we’ve delivered at every moment. Overcoming significant technical challenges and enabling the BBC to serve millions of users with great content, across different products and devices.</p><p>And so we thought it was about time that the team had a chance to get together, connect with each other face to face, and get inspired by how much we do for our audiences.</p><p>In October, over 600 colleagues from more than 150 technical teams from across the BBC got together in Manchester for the first BBC Engineering Conference. The day covered a range technical areas, knowledge sharing and networking. We had both internal and external speakers, as well as a leadership panel.</p><p>Sometimes we set out to inspire our teams and they inspire us even more in return, this was one of those moments. It sets up perfectly for a great end of 2022 and also for a future Digital First BBC.</p><p>The video is a snapshot of what we got up to!</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FTM92vzwhx54&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DTM92vzwhx54&amp;image=http%3A%2F%2Fi.ytimg.com%2Fvi%2FTM92vzwhx54%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/5c612b0a119a4270f7864e92823c0d82/href">https://medium.com/media/5c612b0a119a4270f7864e92823c0d82/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=79be80ec30b7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/getting-inspired-at-the-bbc-engineering-conference-79be80ec30b7">Getting inspired at the BBC Engineering Conference</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Hello from Delivery at the BBC]]></title>
            <link>https://medium.com/bbc-product-technology/hello-from-delivery-at-the-bbc-5ca9622b29e4?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/5ca9622b29e4</guid>
            <category><![CDATA[delivery-management]]></category>
            <category><![CDATA[bbc]]></category>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[agile-delivery]]></category>
            <category><![CDATA[product-development]]></category>
            <dc:creator><![CDATA[Sara Bowley]]></dc:creator>
            <pubDate>Fri, 14 Oct 2022 13:18:49 GMT</pubDate>
            <atom:updated>2022-10-14T13:07:03.146Z</atom:updated>
            <content:encoded><![CDATA[<p>At the start of the year I took up a job as Head of Delivery for BBC Product Group as part of a new cross discipline leadership team led by our CPO Storm Fagan.</p><p>It’s my job to help the BBC get the most out of modern digital agile ways of working. Bringing more product thinking to how we work by focussing on outcomes and putting user needs at the heart of what we do.</p><p>Much of my role is helping teams collaborate effectively together at scale. Product Group is over 100 teams and we work with many more teams in editorial, marketing and across the BBC. We are responsible for products like iPlayer, Sounds, Bitesize, BBC News and Sport. We’ve got huge ambitions at the BBC to deliver more value to users through our digital products and services by taking a more user led iterative approach to what we do.</p><h4><strong>Creating our Delivery Profession</strong></h4><p>Over the last few months one of my priorities as Head of Delivery has been to create and build a new Delivery Profession at the BBC for agile delivery practitioners. I’m thrilled that this work is now complete and we have a dedicated Delivery Profession with a new career path framework, new roles and new job descriptions at the BBC.</p><p>When designing what we needed I was keen we also introduced an individual contributor track so that people could develop their careers here by deepening their skill and practice as well as through the traditional line management route.</p><p>We are building a thriving Community of Practice who meet weekly to network, share and learn together. More on that to come!</p><figure><img alt="BBC Delivery Community of Practice" src="https://cdn-images-1.medium.com/max/656/1*ib3GL2gppOtFWH_24n4yVw.png" /></figure><h4><strong>Our Vision</strong></h4><p>We recently wrote down our vision for Delivery Management at the BBC and we think this encapsulates pretty well who we are and what we’re here to to do:</p><blockquote><strong><em>“We inspire ourselves and our teams to raise the standard of agile collaborative delivery at the BBC.</em></strong></blockquote><blockquote><strong><em>We help make teams more effective and maximise their impact so we deliver value for users often, iteratively and repeatedly.</em></strong></blockquote><blockquote><strong><em>We focus on outcomes and making it happen.”</em></strong></blockquote><h4>We’re looking for Delivery Managers</h4><p>Delivery Managers play a huge part in our multi-disciplinary teams driving forward our change to user centred agile ways of working at the BBC. It is an exciting time to join us and we’ve got plenty of new roles in locations across Salford, London, Glasgow and Newcastle.</p><p><a href="https://lnkd.in/ehReeWnV">Current vacancies</a> can be found on our careers hub page and we’ve got lots of opportunities across multiple locations including:<br> Associate Delivery Manager, Delivery Manager, Agile Coach, Senior Delivery Manager and Lead Delivery Manager.</p><p>Just type the role and location into the careers hub search.</p><p>Come and help us build the BBC.</p><p><a href="https://twitter.com/sazzle">Sara Bowley</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5ca9622b29e4" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/hello-from-delivery-at-the-bbc-5ca9622b29e4">Hello from Delivery at the BBC</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[UK Bank Holidays with Pandas on Jupyter]]></title>
            <link>https://medium.com/bbc-product-technology/uk-bank-holidays-with-pandas-on-jupyter-35591e52a4ae?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/35591e52a4ae</guid>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[jupyter-notebook]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[pandas]]></category>
            <category><![CDATA[kaggle]]></category>
            <dc:creator><![CDATA[Simone Spaccarotella]]></dc:creator>
            <pubDate>Wed, 21 Sep 2022 17:22:24 GMT</pubDate>
            <atom:updated>2022-09-23T07:23:40.264Z</atom:updated>
            <content:encoded><![CDATA[<h4>How I learned to manipulate JSON data with Pandas on a Jupyter Notebook and deconstruct it to a DataFrame ready for queries.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*XJpmw7oZX8ZwuzsTcyraNQ.png" /><figcaption>Image by author created from Jupiter photo by NASA and Pandas photo by Pascal Müller on Unsplash</figcaption></figure><h3>A bit of context first</h3><p>I started a self-study path to learn the theoretical fundamentals of Data Science and Machine Learning. I have also been playing with Python ever since, with coding exercises during the “<strong>Friday 10% time</strong>” here at the BBC and on my own time when I have some to spare.</p><p>I created this playground repository to refresh my Pythonic knowledge that was buried deep inside the funny head of mine. This repo is a mix of material and exercises to keep my Python coding skills sharp.</p><p><a href="https://github.com/simonespa/python-playground">GitHub - simonespa/python-playground: A playground repo for Python</a></p><p>I also created a specific playground focused on Data Science and Machine learning. In this playground I practice with libraries such as <a href="https://numpy.org/">NumPy</a>, <a href="https://pandas.pydata.org/">Pandas</a>, <a href="https://scikit-learn.org/">Scikit-Learn</a>, <a href="https://www.tensorflow.org/">TensorFlow</a> (et. all) with a <a href="https://jupyter.org/">Jupyter Notebook</a>. It also contains notes and summaries of what I learn in forms of README or notebooks.</p><p><a href="https://github.com/simonespa/machine-learning-playground">GitHub - simonespa/machine-learning-playground: A playground to practice machine learning, data modelling and visualisation</a></p><p>Nothing fancy or ground-breaking, just a couple of playground repos for me to practice and learn at my own pace.</p><h3>The 10% time at the BBC</h3><p>This happens every other Friday and it is about learning. Engineers use this time to learn new technologies and/or languages, discover new approaches and techniques.</p><p>We can organise the day as we want. It could be a self-paced learning session (reading, watching tutorials, etc.), a day of study for an apprenticeship or a university degree etc., an actual hands-on prototyping session to work on a long-running personal project, or a group collaboration with other like-minded people.</p><p>There is no limitation to how we plan our day, as long as we keep in mind the end goal. In simple terms, satisfy our own curiosity and creativity by strengthening our technical knowledge and acquire new skills to widen our horizon towards new engineering areas.</p><p>Unlike the hack day, we don’t have to present a demo to a panel. Nonetheless, we like to share with the other members of the wider team what we’ve learned during the day if we want to, discussing about different topics, Q&amp;A and why not, showcasing a prototype if someone has built one. No prizes but praises.</p><h3>The UK Bank Holidays data</h3><p>I needed to find a dataset that I could use to practice with Pandas on a Jupyter Notebook.</p><p>You may be familiar with the Gov.uk page that shows the list of past and upcoming UK bank holidays (i.e. <a href="https://www.gov.uk/bank-holidays">https://www.gov.uk/bank-holidays</a>) and maybe less familiar with <a href="https://www.gov.uk/bank-holidays.json">https://www.gov.uk/bank-holidays.json</a> which is the same URL plus the “.json” part appended at the end.</p><p>The JSON URL returns the same information of the HTML page but in a machine-readable format (i.e. <a href="https://www.json.org/json-en.html">JSON</a> response) and it’s that URL that I used to retrieve the information i needed to manipulate.</p><p><a href="https://www.gov.uk/bank-holidays">UK bank holidays</a></p><p>The data is released under <a href="https://github.com/alphagov/calendars/blob/master/LICENCE.txt">MIT License</a> and if you are curious about its implementation, you can find more details at the following link</p><p><a href="https://github.com/alphagov/calendars/blob/master/README.md">calendars/README.md at master · alphagov/calendars</a></p><p>This is my first Notebook by the way, which I wrote using plain Jupyter on my localhost. Once I mastered the craft, I then decided to publish it on <a href="https://www.kaggle.com/">Kaggle</a> which is way better if you then want to practice on more interesting datasets and tasks: from simple data manipulation and visualisation to fully fledged machine learning competitions. You can find my published UK Bank Holidays Kaggle at the following link.</p><p><a href="https://www.kaggle.com/code/monsai/uk-bank-holidays">UK Bank Holidays</a></p><p>In this project I use Pandas to fetch, manipulate and query the JSON data. The main trick to work with JSON datasets and manipulate them as Pandas DataFrame is to flatten the portion of properties you need with the “json_normalize” Pandas function, no matter how deep the props are.</p><blockquote>N.B. In this post I’m assuming that you are familiar with the tools and libraries I’m referring to. If not, it would be presumptuous of me to tell you where and how to find material on the Internet. But if I were asked, I’d recommend <a href="https://towardsdatascience.com/">https://towardsdatascience.com</a>, a publication of independent authors and volunteer editors of dedicated and curated Medium blog posts specialised in Data Science and Machine learning. I read it myself to support the material I am currently studying and it’s being really useful so far.</blockquote><h3>The Notebook</h3><p>The JSON structure of the response returned by <a href="https://www.gov.uk/bank-holidays.json">https://www.gov.uk/bank-holidays.json</a> is the following</p><pre>{<br>  <strong>&quot;england-and-wales&quot;</strong>: {<br>    <strong>&quot;division&quot;</strong>: &quot;england-and-wales&quot;,<br>    <strong>&quot;events&quot;</strong>: [<br>      {<br>        <strong>&quot;title&quot;</strong>: &quot;New Year’s Day&quot;,<br>        <strong>&quot;date&quot;</strong>: &quot;2017-01-02&quot;,<br>        <strong>&quot;notes&quot;</strong>: &quot;Substitute day&quot;,<br>        <strong>&quot;bunting&quot;</strong>: true<br>      },<br>      { ... },<br>      ...<br>    ]<br>  },<br>  <strong>&quot;scotland&quot;</strong>: {<br>    <strong>&quot;division&quot;</strong>: &quot;scotland&quot;,<br>    <strong>&quot;events&quot;</strong>: []<br>  },<br>  <strong>&quot;northern-ireland&quot;</strong>: {<br>    <strong>&quot;division&quot;</strong>: &quot;northern-ireland&quot;,<br>    <strong>&quot;events&quot;</strong>: []<br>  }<br>}</pre><p>Pandas plays well with tabular data and it is able to read JSON too. The challenge with JSON though is hat it is hierarchical by nature, and Pandas can only go as far as 2 levels deep to cover the two dimensions (columns and rows). In order to get nested properties, we need to specify their path in order to flatten the data in tabular format.</p><h4>Data collection</h4><p>First of all, we need to import the Pandas library</p><pre>import pandas as pd</pre><p>and fetch the data from <a href="https://www.gov.uk/bank-holidays.json">https://www.gov.uk/bank-holidays.json</a></p><pre>bank_holidays = pd.read_json(path_or_buf = &#39;https://www.gov.uk/bank-holidays.json&#39;)</pre><h4>Data exploration and transformation</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Yt8Hb7fwu7tQnKmkJZZRhA.png" /><figcaption>Pandas DataFrame</figcaption></figure><p>The data frame has a row called events which contains data in JSON format. We need to deconstruct this data in tabular format, so that we are able to query it with Pandas.</p><p>With this approach we transform the bank_holidays DataFrame to a Python dictionary. The dictionary can then be manipulated with the json_normalize Pandas function, by selecting the nested property to flatten into a table.</p><p>The data frame is then returned with the appropriate data types set for each column.</p><p>The following examples refer to the bank holidays in <strong>England</strong> and <strong>Wales</strong>.</p><pre>def get_england_and_wales(data_frame):<br>    return (<br>        pd<br>        .json_normalize(<br>            data_frame.to_dict(),<br>            record_path=[[&#39;england-and-wales&#39;, &#39;events&#39;]]<br>        )<br>        .astype({<br>            &#39;title&#39;: &#39;string&#39;,<br>            &#39;date&#39;: &#39;datetime64[ns]&#39;,<br>            &#39;notes&#39;: &#39;string&#39;,<br>            &#39;bunting&#39;: &#39;bool&#39;<br>        })<br>    )</pre><pre>bh = get_england_and_wales(bank_holidays)</pre><blockquote>NOTE: This approach can be used with any JSON data no matter the complexity of its structure and how nested a property is.</blockquote><h4>Get all bank holidays within a specified time interval</h4><p>The following examples return the 2022 holidays in England and Wales. Let’s declare the “start” and “end” dates.</p><pre>start_date = &#39;2022-1-1&#39;<br>end_date = &#39;2022-12-31&#39;</pre><p>Create a boolean mask</p><pre>mask = (bh[&#39;date&#39;] &gt; start_date) &amp; (bh[&#39;date&#39;] &lt;= end_date)</pre><p>Query the data frame to select the subset rows</p><pre>bh[mask]</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VV7qKpS4Gg9PUzeFU6QFUA.png" /><figcaption>Bank holidays 2022</figcaption></figure><p>Another way to query the data frame is by using the query function. It gives you the same result as before but the syntax is powerful and more readable. Note that the @ syntax is used to reference the global variables previously defined.</p><pre>bh.query(&#39;date &gt; <a href="http://twitter.com/start_date">@start_date</a> and date &lt;= <a href="http://twitter.com/end_date">@end_date</a>&#39;)</pre><p>If you are going to do a lot of selections by date, you may want to set the date column as the index for the data frame.</p><pre>bh = bh.set_index([&#39;date&#39;])</pre><p>Now you can select the rows by date using pd.loc[start_date:end_date].</p><pre>bh.loc[start_date:end_date]</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MrWP1bW2jdIuNke5jP2Bqg.png" /><figcaption>Bank holidays 2022 with the “date” column set as DataFrame index</figcaption></figure><h4>Upcoming bank holidays in England and Wales</h4><p>The following example returns the remaining holidays between “now” until the end of the year.</p><p>To do so, we need to import the date object from the datetime module.</p><pre>from datetime import date</pre><p>Calculate the date range from today to the end of the year</p><pre>today = date.today().strftime(&#39;%Y-%m-<strong>%d</strong>&#39;)<br>end_of_the_year = f&#39;<strong>{</strong>date.today().year<strong>}</strong>-12-31&#39;</pre><p>Now you can query the data frame</p><pre>bh.loc[today:end_of_the_year]</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cF1JEx5vVaI5mw_pGIuebw.png" /></figure><h3>Conclusion</h3><p>This for me was a pretty good learning on how to use Pandas and Jupyter with a real example and how to manipulate and query data. Don’t get me wrong, I just scratched the surface of the iceberg by using just a few of the many functions that this library provides. It’s a powerful tool and it takes a bit more practice on many more projects to really get the hang of it. But the good news is that the documentation is comprehensive and well written plus there is plenty of examples and informations out there for you to find and support your work.</p><p>If you are already familiar with the tool and are looking for interesting datasets, I’d suggest to signup on <a href="https://www.kaggle.com/">Kaggle</a> as I did, search for the right exercise that fit your level of expertise, and practice with it. If that is not enough, just remember that many big organisations, government agencies, public bodies etc. provide open data for the public to use: e.g <a href="https://data.nasa.gov/">https://data.nasa.gov</a> and <a href="https://data.police.uk/data/">https://data.police.uk/data</a> just to name two.</p><p>In conclusion, if you are in the UK and you want to check how long until the next holiday to have some time off, please just consult the Gov.uk website, it’s faster 😃. But if like me you want to learn something new while you do it, well you’ve found the right post to read.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=35591e52a4ae" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/uk-bank-holidays-with-pandas-on-jupyter-35591e52a4ae">UK Bank Holidays with Pandas on Jupyter</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Optimising BBC Online’s Code Splitting Strategy]]></title>
            <link>https://medium.com/bbc-product-technology/optimising-bbc-onlines-code-splitting-strategy-eb17172dea44?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/eb17172dea44</guid>
            <category><![CDATA[webpack]]></category>
            <category><![CDATA[react]]></category>
            <category><![CDATA[code-splitting]]></category>
            <category><![CDATA[performance]]></category>
            <dc:creator><![CDATA[Matt Williams]]></dc:creator>
            <pubDate>Mon, 30 May 2022 15:21:09 GMT</pubDate>
            <atom:updated>2022-05-30T15:21:09.689Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*-CxV7bX8nDyfbOnX" /><figcaption>Photo by <a href="https://unsplash.com/@sen7?utm_source=medium&amp;utm_medium=referral">Sen</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><p>Modern JavaScript websites are the result of complex code bases, and the code base which powers BBC Online is no exception. There are many dependencies and frameworks that we rely upon in order to provide the functionality that our end-users expect, as well as code written in-house to cater to the needs of our website and its users; being able to click a button to follow a topic, search for content and play videos all require JavaScript code to be run by the browser.</p><p>For a website as large and with as many seemingly disparate needs as the BBC’s various pages, the amount of code required can grow exponentially. The code needed to render a news article - with images, social media embeds, videos and onward journeys - has only small elements of commonality with the code required to power complex sports data tables - with team badges, functionality to hide or show columns based on the screen width of the user’s device, display a team’s form, or provide live in-page updates for events that are happening live.</p><p>As such, it has long been the practice of the JavaScript community to implement code splitting. Rather than providing all of our JavaScript and dependencies into a single large file to be downloaded by the user, we can split our code into separate files. This can provide advantages on two fronts; downloading multiple smaller files can be more efficient when devices can start those downloads in parallel (though going too far and downloading too many small files can cause problems itself!), and the way that we choose to split our files can mean that some only need to be downloaded on certain pages. It is this second benefit which can be most powerful; if you have a large piece of code on your site that is only needed for a single page, then forcing users to download that code on <em>every</em> page is wasteful, and can cause problems for users who might have limits on the amount of data they can download on their network.</p><p>We have been using code splitting within the Presentation Layer, which powers large portions of BBC Online, for a number of years now. However, we had realised that the platform had outgrown the existing strategy we had in place for code splitting. So first, what was that strategy?</p><p>We had decided to create a small number of <em>core</em> bundles, which would be shared across the website and required for every page. This strategy meant that although the user would need to download around 5 relatively large files on an initial page load, those files would then be cached for future visits, or for when the user visited another page on the site. We make use of contenthashes in our bundle file names, which are a way of identifying whether the content of a file is different at build time — that means that when a code change is deployed, only the bundle affected needs to be re-downloaded, and the cache can be relied upon for the unchanged bundles. These core bundles consisted of:</p><ul><li>our third-party dependencies (commonly referred to as the vendor bundle)</li><li>the code for our rendering framework</li><li>our GEL packages — components that are centrally owned and designed to be highly reusable and adhering to our <a href="https://www.bbc.co.uk/gel">Global Experience Language</a> guidelines</li><li>additional components and utilities, that have either more specific use-cases or are not yet fully reusable — referred to as our website bundle</li><li>common utilities and libraries used across the website — such as our compliance library, used to ensure that we are not setting cookies that the user has not agreed to — referred to as our base-website bundle</li></ul><p>In addition, the Presentation Layer has the concept of Containers. Containers are isolated slices of the experience that are data-aware, and combine together multiple components into a single experience. Our navigation bar is a container, as is the core view of a news article, whilst the lists of onward journeys are a separate container again. Each of these containers has a high level of separation of concerns, and are not allowed to directly depend on one-another, and so each one of these containers gets is own separate bundle file. This is what allowed us to not deliver too much unused code to the browser, and only provide the container-level code for pages that use that container.</p><p>So what went wrong with this approach?</p><p>Firstly, this approach was not wrong, in any sense. At the time we implemented it, it was the most suitable solution. However, in the time since, the number of pages being powered by the Presentation Layer has grown; the number of new experiences being developed for the audience has increased, and the resulting complexity of our code base has increased with them. This resulted in our core bundles growing to the point where our bundling library was reporting their combined size as over 1MB. Whilst these files were compressed before being sent to users, we were in essence requiring users to download over 1MB worth of JavaScript for every page. Much of this included code that was only used on a small number of pages — as portions of the Bitesize and Children’s websites began to move over to the new platform, the games library was added, which was only needed on games pages; as Sport pages began to move over, components specifically tailored to showing match data between teams or league tables were added, which were only needed on those pages.</p><p>If we take a look at the visual representation of our code-split bundles, provided by our build tool Webpack, we can readily see the effect that this has had on our core bundles:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Fmve0D6TWw6nbdTo.png" /><figcaption>A visual representation of our code split bundles, with sizes relative to one-another</figcaption></figure><p>In short, we were no longer optimised for reducing unused JavaScript being downloaded by end users, and we needed to take a second look at our strategy.</p><p>If you search around the internet for solutions to this problem, you will quickly find that there is no general guideline; every website is different, and the ideal strategy relies on the specific needs of the page and the dependencies being loaded. So we had to do some investigation of our own in order to decide how to proceed. Our first target however, was in reducing the size of the largest bundle; defaultVendors.</p><p>If we take a look into the visual representation above, we can easily see that there are three very large categories dominating this bundle; @bbc with the games-atlas package, react-dom and @optimizely are very clearly the largest components here. Our website is React-based, which means that react-dom is necessary on all of our pages, and so wouldn’t make sense to remove from this bundle, but games-atlas and @optimizely are not used on every page, and so they could easily be removed from that bundle.</p><p>Initially, we tried moving both of these into another shared bundle; optionalVendors. If you take a look at the visual representation of that however, you may be able to see straight away what the problem with that approach was:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/683/0*eXUcHZ6ECVs-M0I-.png" /></figure><p>If any page needs to make use of the @optimizely packages, it must still download games-atlas, whether it needs it or not. So whilst pages that use neither of these packages would be aided by this change, it wasn’t ideal.</p><p>Our next step was to create separate bundles for each third party dependency that we had determined could be removed from the defaultVendors bundle. This would achieve the aim of only downloading this third-party code when it was needed, and give a benefit to the largest number of pages. In addition to creating separate bundles for games-atlas and @optimizely, we decided to also create a separate bundle for date-fns, and its related date-fns-tz — these libraries are known to be quite large, and whilst we use them on most pages server-side for formatting date strings, their use client-side is on a fairly limited number of pages.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*W4iSCiS9NxaLaIsT.png" /><figcaption>A visual representation of all our third-party code bundles after splitting them out</figcaption></figure><p>This ultimately allowed us to trim around 80KB (gzipped) from the download size of our defaultVendors bundle — a saving of around 44% of its original size.</p><p>There are some small oddities with this approach, which you will see in the images later in this post. By defining these separate bundles and marking them as async bundles, that indicates to Webpack to fill them with code that is not needed on initial page load, and can be downloaded as-needed. However, some code — particularly in the @optimizely packages — is needed on initial page load. As such, Webpack has split these packages into two — the code that can by downloaded asynchronously is in its own bundle, whilst the parts of the code that are needed on initial page load have become part of another bundle. We still have an overall saving in the amount of JS being sent to users however, so this was an acceptable compromise to us.</p><p>The next target was our second-largest bundle; website. As noted previously, this bundle contains the majority of our components that are either very focused in their use-cases or aren’t quite shareable enough yet to be moved into the GEL bundle. It also includes some utilities used within those components and across some of our containers, page-level layouts, and non-visual parts of the page experience such as setting dynamic page metadata. The single largest category within it however are our UI components.</p><p>Our initial approach was to just exclude these components from the website bundle group, and allow Webpack to do the heavy lifting of deciding where to perform grouping and splitting of the code. However we found that this approach wasn’t ideal — other core bundles started to absorb some of these components, and not ones that were necessarily that commonly reused either. Other times, components ended up being placed into the container bundles. Overall, it felt like we needed to exert a bit more deliberate control over this approach.</p><p>The next step was to give each component its own bundle, in the same manner as our containers. Whilst this was easy enough to implement, it went a bit too far in the other direction; some of our UI components are very small as far as their JavaScript code goes, and it felt unnecessary to have a separate bundle for such a small amount of code. This approach worked better than the previous one, but it needed a bit of extra nuance.</p><p>Webpack provides the ability to set additional rules to control when to actually create a new bundle. Up until now, we had been setting rules entirely on a path-based approach; now however, we started to make use of the size-based rules, which also required making use of its priority rules. By setting a minimum size requirement for a new bundle to be created, we could control when to create a new component bundle and when to not. And by setting the path-based rule on our website bundle to be permissive enough to <em>allow</em> components to pass the rule, but with a <em>lower priority</em> than the individual component bundles, that allowed those components that fell short of the minimum size rule to fall back into the website bundle. This approach gave us the best of both worlds; those components which were comparatively large in size could get their own bundle (along with the contenthash-based caching benefits mentioned earlier), and would only be downloaded on pages that needed them, whilst the smaller bundles could remain a part of the core website bundle, downloaded and ready to use on each page. We felt this struck the best balance between not wanting too few, excessively large bundle files to download, versus having too many very small bundle files.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*M7fH7TLjr4IaMsxW.png" /><figcaption>A visual representation of our code splitting strategy after the changes</figcaption></figure><p>All of these changes have clearly had an impact on the raw size of the core JavaScript bundles we’re delivering to users, but how do we know that will have a positive effect on our end users? We did attempt to run these changes on a non-production environment for a time and compare some performance metrics with our live website, but we quickly realised that we were not comparing like-for-like; our live website benefits from a robust caching infrastructure, which can have a knock-on effect to performance metrics and led to our non-production environment showing significantly worse metrics than we expected.</p><p>Instead, we decided to merge in our bundling changes and deploy them to the live website, and monitor the relative performance from before the change.</p><p>This change has been in place for 3 weeks now, and has seen the following changes;</p><ul><li>The number of requests for JavaScript files has risen by around 21%, but the total size of the JavaScript downloaded has fallen for all page types — down 14% on average</li><li>JavaScript Total Blocking Time has fallen by 27% on average, and Time to Interactive has fallen by 6% on average</li><li>The measure of how long the browser spends on the single longest JavaScript task has fallen by 16%, and the time on all JavaScript ‘long tasks’ as a whole has fallen by 20%</li></ul><p>One of our pages that makes use of more custom components than others has actually seen the largest improvements in some of these metrics — whilst the number of JavaScript files being downloaded has gone up by 43%, the total size of those files has still fallen by 15%; Total Blocking Time has fallen by 31% and Time to Interactive has fallen by 14%. Given that Sports pages are some of those with the most custom components and are also some of the pages which need to feel the most responsive to their users, this is quite a significant benefit.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ujEcq_6KofgN_yyt.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*H_EoSo8cVc4aFhVB.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*ZcM7fzsxZ8EMOzU2.png" /></figure><p>This still isn’t likely the end of our code-splitting journey; whilst we have arrived at a more optimal code splitting strategy for our current use-cases, we are working on an ever-evolving and growing platform. We fully expect to need to review this again in future as even more pages join our platform, and as new use-cases evolve. There will likely never be a perfect code splitting strategy, but by reviewing ours on a regular basis, and getting it as good as it can be with the information we have at the time, we can keep our focus on providing the most performant experience for our audience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mnqtmC8DpvAT8SGb" /><figcaption>Photo by <a href="https://unsplash.com/@brett_jordan?utm_source=medium&amp;utm_medium=referral">Brett Jordan</a> on <a href="https://unsplash.com/?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eb17172dea44" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/optimising-bbc-onlines-code-splitting-strategy-eb17172dea44">Optimising BBC Online’s Code Splitting Strategy</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BBC Online — A year with serverless]]></title>
            <link>https://medium.com/bbc-product-technology/bbc-online-a-year-with-serverless-ffc2ae474277?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/ffc2ae474277</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[serverless]]></category>
            <dc:creator><![CDATA[Johnathan Ishmael]]></dc:creator>
            <pubDate>Wed, 30 Mar 2022 07:43:48 GMT</pubDate>
            <atom:updated>2022-03-30T07:43:47.954Z</atom:updated>
            <content:encoded><![CDATA[<h3>BBC Online — A year with serverless</h3><blockquote>Its been a little over a year since I published my last two blog posts, in which I <a href="https://medium.com/bbc-design-engineering/delivering-bbc-online-using-serverless-79d4a9b0da16">outlined the process we went through to choose the technology</a> for BBC online and the <a href="https://medium.com/bbc-design-engineering/delivering-bbc-online-using-serverless-79d4a9b0da16">steps we took to optimise serverless</a> for our use. Recently my colleague Graeme has <a href="https://medium.com/bbc-design-engineering/refactor-organisation-80e4e171d922">published a blog post</a> on the organisational challenges we’ve faced in delivering this project.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*L10vOpsp18h4-0AL0Ig8jw.png" /><figcaption>The BBC’s Office in MediaCity, Salford — one of many bases that the BBC’s Software Engineering teams are located.</figcaption></figure><p>In this post I reflect on our progress so far, and some of the interesting challenges we are facing while building the BBC’s critical digital services. If you’re a technology builder, interested in the biggest of challenges, we’re always looking for people like you to <a href="https://careerssearch.bbc.co.uk/jobs/job/Software-Engineer-BBC-Core-Services-Mid-and-Senior-Levels/56052">join our adventure</a>.</p><p>Throughout the last twelve months our engineering teams have been reimagining and innovating on our products. In doing so they have moved from our older technology platforms on to our new shared serverless platform called ‘WebCore’. We’re about 30% of our way through moving to this new platform. Despite this, the benefits of using a serverless platform are starting to show.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/703/0*CeorgGVxydgUHLgQ.png" /><figcaption>Pages on WebCore (left), pages under development (middle) and pages we’re going to start development on (right). Block size represents number of page views across a typical month.</figcaption></figure><p>During this time we’ve not had any operational incidents (lack of audience service, or inability to update our pages) caused by the underlying technology. This isn’t by luck, serverless has handled many of the performance and operational challenges for us, letting us focus on other parts of our platform resulting in a higher quality platform that is more dependable</p><figure><img alt="Web Core highlights for February 2022, including 2.3 million requests served, 1,500 concurrent serverless function executions, 3.3 billion serverless functions invoked and 22,000 platform builds to pre-production." src="https://cdn-images-1.medium.com/max/1024/0*3ts5fZ50Gwz5Zusr.png" /><figcaption>WebCore highlights for February 2022.</figcaption></figure><p>Using serverless takes away the need to spend time engineering the fundamentals of your platform, instead allowing you to focus on the value you deliver to your customers. So what have we been doing with that time?</p><h4>Personalisation / Relevancy</h4><p>The BBC achieves its high levels of reliability and performance by relying upon caching, both internally within our systems, at the edge of our networks and via CDNs. The result is fast loading pages that can be stored at the edge. Yet, in a world where relevant content is key, we need to adapt our services to deliver more tailored and personalised content to our audiences. This means more variation and more load.</p><p>We spent a number of months preparing the platform to handle personalised requests end-to-end across the stack. This has now launched for some pages. For example, if you’re signed in, are located within UK territory and visit <a href="https://www.bbc.co.uk/">the BBC homepage</a> you’ll get a page customised for you.</p><p>The page takes around 500ms to render and be delivered to the audience. In that timeframe we invoke around 30 functions. Around 150ms is spent running React to render the content to HTML, the rest is spent fetching or processing data.</p><p>In February 2022, 145 million requests were personalised, representing 6% of WebCore’s traffic.</p><blockquote>Our goal: over the next 12 months we aim to personalise almost every page in some way — making it relevant for every user on every request.</blockquote><h4>Experimentation</h4><p>Delivering value and improving audience experience is at the heart of what we do, previous platforms that have relied heavily on caching for performance have meant we’ve been unable to perform experiments on our pages. <a href="https://en.wikipedia.org/wiki/A/B_testing">A/B/n testing </a>allows us to improve the audience experience by understanding what users want to interact with on a page.</p><p>Experiments means more variations of a page, consider if we ran an experiment with 6 variations on the global navigation for the website (the bar listing Home, News, Sport, Weather etc.). If we did this, we’d increase the number of pages we’d render by a factor of 6, instantly as soon as the experiment was activated.</p><p>The team that builds the global navigation is separate to the team building the news story pages or the news onwards journeys (right hand side bar on story pages). Imagine if all three teams started experimenting at the same time, there would be N * N * N more variations of the page! As builders of the platform running this, we have no control over who runs an experiment with how many variations. We just have to be ready!</p><p>We’re in our late stages of development with this piece of work — but when it is active, we’ll enable experimentation across the platform at any scale.</p><blockquote>Our goal: experiment on every new feature we release, to ensure it’s valuable to our audience.</blockquote><h4><strong>Speed of updates</strong></h4><p>During the working day, the BBC News and Sport websites have editorial changes around ~3 times per second. This includes changes to our news and sport articles, indexes, videos and short form posts (excluding non-editorial updates such as sport events scores).</p><p>For those pages that aren’t personalised (and so rendered for you), we want the content to be as fresh as possible. Previous platforms have relied on long (30 second+) caches times and multiple caches to handle the load and provide the resilience required.</p><p>Serverless has unlocked the ability for us to process more, reliably. This not only includes the execution environment where we transform our data and render our web pages, but also using serverless Redis that can scale to meet the demands of our workload.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*p4njitD5lyeTkD77.png" /><figcaption>A graph showing how the impact of our changes on editorial updates.</figcaption></figure><p>Throughout the last 8 months we’ve slowly reduced our cache times on the stack, such that editorial updates for content have decreased from 2 ½ minutes to 30 seconds.</p><p>We think we can improve this further!</p><blockquote>Our goal: In the next 12 months, get editorial updates to under 5 seconds.</blockquote><h4><strong>Build times</strong></h4><p>Enabling our engineering teams to deploy often and safely is key to our success. So we’ve taken the time to move away from our traditional CI/CD pipeline. Historically we were based in Jenkins on a small number of compute instances. Now we’re making use of serverless CI/CD pipelines to enable us to scale our build and deployment process based on the load and demand on the system.</p><p>Its been a change in mindset, rather than running sequential builds, why not run every build step and test as concurrently as possible.</p><p>Currently our build times are around 5 minutes, down from 24 minutes at the start of the project due to using serverless for our CI/CD process.</p><blockquote>Our goal: Reduce our build times below two minutes!</blockquote><h4><strong>Only a few minor issues</strong></h4><p>While our experience of using serverless has been excellent, there have been a few minor issues with the underlying technology along the way.</p><p>One of the primary issues we’ve faced, was that of noisy neighbours. Most serverless platforms are shared, in that the provider’s resources are allocated to multiple customers, with all data being securely sandboxed and isolated from one another.</p><p>This is optimal from the providers point of view as they can maximise the efficiency of their service. Keeping carbon footprints and costs down.</p><p>Our serverless execution is time sensitive, as a user asking for a web page will have to wait for the Lambda function to respond. So we keep a close eye on the response times. We started to notice an increase in our function duration on the hour and quarter hour.</p><p>After ruling out any internal issues, e.g. cache clean ups, delays in services providing data, increased traffic from our content systems. We determined this was an underlying platform issue.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*R7E5DCjaJHQleAuM.png" /><figcaption>A graph showing average duration of our presentation Lambda.</figcaption></figure><p>The graph shows increased latency on the hour and quarter hour, caused by the underlying serverless infrastructure.</p><p>Working with our service provider, we were able to identify the issue as being a noisy neighbour problem, caused by other customers having ‘on the hour’ workloads.</p><p>These improvements delivered by the serverless team benefit everyone using their serverless product.</p><h4><strong>Summing Up</strong></h4><p>As the BBC’s audience continues to grow globally, we continue to push the boundaries of what we can achieve with the technology. Serverless has proven to be a powerful tool to help grow the digital offering of one of the worlds largest websites, both from content delivery through to powering our build tooling.</p><p>Personally I’m very proud of the work which goes on within the BBC. There is an amazing software engineering community, filled with amazingly talented people. Recent events have shown the critical nature of the service we provide, to be part of a team that helps keep the world informed, educated and entertained is a privilege.</p><p>We’re always looking for talented people to take on the goals we’ve set ourselves. If you want to work as part of an amazing team, on a world class product <a href="https://careerssearch.bbc.co.uk/jobs/job/Software-Engineer-BBC-Core-Services-Mid-and-Senior-Levels/56052">take a look at our roles</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ffc2ae474277" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/bbc-online-a-year-with-serverless-ffc2ae474277">BBC Online — A year with serverless</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Refactor → Organisation]]></title>
            <link>https://medium.com/bbc-product-technology/refactor-organisation-80e4e171d922?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/80e4e171d922</guid>
            <category><![CDATA[team-topologies]]></category>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[platform-engineering]]></category>
            <category><![CDATA[reorganization]]></category>
            <category><![CDATA[conways-law]]></category>
            <dc:creator><![CDATA[Graeme Lindsay]]></dc:creator>
            <pubDate>Mon, 07 Mar 2022 11:18:47 GMT</pubDate>
            <atom:updated>2022-03-07T11:18:47.345Z</atom:updated>
            <content:encoded><![CDATA[<h4>Changing the organisation — to build the technology right.</h4><blockquote>In earlier blog posts, we explored <a href="https://medium.com/bbc-design-engineering/moving-bbc-online-to-the-cloud-afdfb7c072ff">how we moved BBC online to the cloud.</a> This was part of a wider initiative called WebCore, which used a range of <a href="https://medium.com/bbc-design-engineering/delivering-bbc-online-using-serverless-79d4a9b0da16">serverless technologies</a> to reimagine the BBC website. There were technical challenges we faced <a href="https://medium.com/bbc-design-engineering/optimising-serverless-for-bbc-online-118fe2c04beb">integrating WebCore with our architecture</a>, but this initiative has been as much a refactor of our organisation, with profound implications on the people within it.</blockquote><p>In this blog post, rather than focus just on the technical challenges, I want to share:</p><ul><li><em>Some of the organisational history that led to WebCore</em></li><li><em>How we went about re-organising for success</em></li><li><em>How we viewed the team topologies and interaction modes between teams</em></li><li><em>How we view the role of the platform (and the Core teams who build it) in enabling many teams to interact with one another</em></li></ul><h3>First — some history…</h3><p>The BBC website is made up of several digital services, including <a href="https://www.bbc.co.uk/iplayer">iPlayer</a>, <a href="https://www.bbc.co.uk/sounds">Sounds</a>, <a href="https://www.bbc.co.uk/news">News</a> and <a href="https://www.bbc.co.uk/sport">Sport</a>. Each is a major service in its own right — with millions of visits every week — and they have grown independently of one another over several years. This was reflected in the way the organisation was shaped — with separate departments owning each digital service.</p><figure><img alt="The BBC digital services, e.g. News, Sport, Weather, are represented as columns — each containing similar capabilities such as Topics and Articles" src="https://cdn-images-1.medium.com/max/1024/1*ElbJ6bfWemGXTHT0bjnKyg.png" /></figure><p>This shape meant each individual product achieved its own aims well, but it also meant the user experience across multiple services wasn’t as seamless and consistent as it could have been. There were mismatched technologies and duplication between the services. Lots of features, despite being conceptually similar, were implemented multiple times — with the total cost of maintenance also paid multiple times. Cross-cutting capabilities — e.g., personalisation and analytics — were major tasks that each product development team had to tackle themselves.</p><p>WebCore is part of a strategy to re-imagine BBC Online and create a single website for all the digital services. Standardising onto a single technology set, building shared ‘horizontal’ capabilities, and sharing commodity components between teams — will allow the BBC to better leverage the technology and build more innovative features for the audience.</p><figure><img alt="The BBC digital services, e.g. News, Sport, Weather, are represented as columns similar to the previous image. However, with the capabilities, such as Topics and Articles, represented as rows that cross all of the digital services" src="https://cdn-images-1.medium.com/max/1024/1*l0XJSr1OOo8tFqbknlBEeA.png" /></figure><p>There are real-world implications to the autonomy and empowerment of individuals and teams. The reality is that WebCore was as much a refactor of the organisation as it was a reimplementation of technology.</p><p>High autonomy is vital to high-performing product development teams. The previously decoupled technology stacks made autonomy easier to achieve, so the WebCore strategy forced us to think about how we could balance autonomy with standardised technology.</p><h3>Organise for success</h3><p>Humans will rally behind a common cause and form close-knit relationships within their group. Cohesion is a powerful thing — the sense of belonging brings people together to achieve something greater than the sum of the parts. We leverage this within any organisation to significant effect.</p><p>Missions are typically multi-team initiatives within larger organisations, such as the BBC. We can group teams together very deliberately with our organisation shape (i.e., departments) or through more fluid constructs that cross departmental boundaries. Departments are important as a primary way to create purpose and alignment amongst teams, and there are multiple ways they can be shaped. Interactions will inevitably be stronger between teams within the same department as opposed to ones that cross departmental boundaries</p><figure><img alt="An organisation is represented by a matrix of circles, representing teams; and strong lines joining them in a grid, representing team interactions. The diagram poses the question “Arrange departments like this?…” and shows the teams being grouped in columns — with strong vertical lines and weak horizontal lines. It then poses the question “… or like this” and shows the teams being grouped in rows with strong horizontal lines and weak vertical lines." src="https://cdn-images-1.medium.com/max/1024/1*Fo5vNwhiSKZ1SI9gYUaBzg.png" /></figure><p>The evolution of the BBC’s digital products was reflected in the internal department structures, which were aligned with digital service ownership. Operating across these traditional departmental boundaries — e.g., improvements to the time it takes for newly published content to be rendered to the audience — was more difficult.</p><figure><img alt="Four departments, Education, Home, Sport and News are shown as columns — with circles in each representing the teams." src="https://cdn-images-1.medium.com/max/1024/1*X2lyyTfJKlw-mgj0reYvYw.png" /></figure><p>One early WebCore decision was to create a new internal department called Core Services — a department that is not orientated towards delivering one of the audience-facing services.</p><p>Instead, this is a set of teams with a mission centred around platforming and enablement for all the services. Rather than each department owning and running their own platform services, there is a specialised department for this.</p><figure><img alt="Building on the previous diagram, there are four columns representing the departments as before. There are 2 additional departments represented as rows — one called Core and the other Topics. Two of the teams are shown moving from the News vertical column into the Topics horizontal row to indicate a transition of department orientation." src="https://cdn-images-1.medium.com/max/1024/1*VcYx_3hVfHX_EmI0XNCrgA.png" /></figure><p>The WebCore platform is an internal product, made of a generic set of components (systems, services, and frameworks) and the customers are the internal product development teams. Rather than basing their success on audience engagement, these teams strive to elevate across the organisation and enable the tenant teams who depend on the platform.</p><h3>Optimise rather than maximise</h3><p>In the first stages of migrating content onto the WebCore platform, there were a handful of teams interacting with one another — the core platform teams along with the first tenant teams to contribute components. This meant it was workable for teams to be aware of the components other teams were creating. There was a desire to maximise re-use and avoid any duplication; after all, this was the fundamental premise of WebCore.</p><p>Over time, the number of teams using the platform grew. Before long, over 100 engineers were creating components — and keeping track of what was being made became much harder. The early high-bar of ‘zero duplication’ was creating friction — how could teams move fast, iterate, and be inquisitive without causing duplication?</p><figure><img alt="Building on the previous diagram, there is now a further Articles department represented by a horizontal row. Teams are shown moving from the Sport vertical department into the Articles horizontal department to indicate further realignment of the organisation." src="https://cdn-images-1.medium.com/max/1024/1*lwKTKHKLlN3bK7v7r23fLA.png" /></figure><p>The answer has been to develop a more pragmatic mindset towards technical debt — developing tools to manage it while accepting that aiming for zero debt is not cost-effective. Just like financial debt, technical debt is not always a bad thing. Debt becomes a problem if it is not tracked, becomes too large or if debtors cannot be held accountable.</p><p>For example, Component Health tooling allowed us to create a sense of ownership of various parts of the codebase. By instrumenting various key health metrics, teams were allowed some latitude to make their own decisions and be accountable for them over the component’s lifecycle.</p><p>This highlights an important principle — inverting control back towards tenant teams.</p><h3>Inversion of Control</h3><p>Using shared technology can create a sense of disempowerment within teams. When a product development team is used to owning and controlling its entire technology stack, moving to a situation where they are dependent on others can be uncomfortable. However, from operating systems to frameworks, no team writes everything from scratch.</p><p>Bringing back the sense of control is important — and this is where maturing the platform to provide tenants with self-service interfaces and tooling is central. While earlier phases had focussed on building the systems that can handle traffic (scale, resilience, performance, observability etc.), we have increasingly looked at how we scale up the enablement of engineers and teams. To do this, we looked at <a href="https://teamtopologies.com/">team topologies</a>, and especially interaction modes between teams.</p><h3>Team Topologies — interaction modes</h3><p>In the early phases, we tended to view enablement as “collaboration between core teams and contributing teams”. This was the right fit in those early days — everything was new to everyone, and the number of interacting teams was manageable. However, as the number of teams contributing components has scaled up, we now have a more nuanced view of a spectrum of interaction modes between teams that are available to us.</p><figure><img alt="Three people are moving together, following a sign saying ‘Mission’. There is no path. This represents collaboration." src="https://cdn-images-1.medium.com/max/1024/1*3zQf60PjFa_gGKOj7-SoeQ.jpeg" /><figcaption>Collaboration</figcaption></figure><p><strong>Collaboration</strong> — this is when a group shares the same mission. When multiple teams interact in this mode, it might look like a cross-team squad who work all day, every day, for an extended period on the same mission. Perfect for <a href="https://wardleypedia.org/mediawiki/index.php/Pioneers_settlers_town_planners#Pioneers">pioneering</a>.</p><figure><img alt="Two people are moving together, following a sign saying ‘Mission’. There is a path with a fork ahead. They are unsure which way to go. This represents co-operation and facilitation" src="https://cdn-images-1.medium.com/max/1024/1*nfFr5w400RySU0b83WbXZA.jpeg" /><figcaption>Co-operation/Facilitation</figcaption></figure><p><strong>Co-operation/Facilitation</strong> — This can look like a support model; we have mechanisms where teams can ask for help when they need it. It can also be about encouraging cross-community support, either from subject matter experts or from the wider product development community. Perfect for <a href="https://wardleypedia.org/mediawiki/index.php/Pioneers_settlers_town_planners#Settlers">settling</a>.</p><figure><img alt="One person is moving, following a sign saying ‘Mission’. There is a path with a fork ahead — one of the forks is paved with golden paving stones. This represents systemisation." src="https://cdn-images-1.medium.com/max/1024/1*2AoxxaEZ6DsL29Pr3REWIg.jpeg" /><figcaption>Systemisation</figcaption></figure><p><strong>Systemisation</strong> — this is about removing manual intervention. It could be documentation, processes, tools, or user interfaces. Perfect for <a href="https://wardleypedia.org/mediawiki/index.php/Pioneers_settlers_town_planners#Town_Planners">town planning</a>.</p><p>Collaboration is expensive but is ideal when new ground is being broken. It accelerates the feedback between the tenant and core platform teams, allowing gaps in the platform to be addressed quickly. However, it is essentially a manual intervention and does not scale.</p><p>Systemisation is about removing manual intervention and is the horizon goal for the platform. When the patterns are proven then the teams that follow can tread the beaten path. <a href="https://engineering.atspotify.com/2020/08/how-we-use-golden-paths-to-solve-fragmentation-in-our-software-ecosystem/">Golden path tooling</a> can be used to accelerate teams and keep them within the guardrails of the known-good path. Within the limits of these guardrails, the tenant teams have a high degree of autonomy and can deliver to their audience-facing services with minimal impediments.</p><p>Co-operation and facilitation are the grey middle ground between the two. While tools and processes can alleviate some of the burden, this is always likely to be needed. Individual people looking for help, staff turnover etc. will always create a need for this.</p><h3>Lessons learned</h3><p>It’s not always been pretty — but it’s been a fascinating journey and one which I think a lot of organisations will tread.</p><p><strong>Organise around the right mission — </strong>whether it’s the team or department structure, this is the primary way to create alignment and group cohesion. If it’s not right, the result won’t be either.</p><p><strong>Optimise, don’t idealise</strong> — with lots of humans sharing and contributing to the same codebases, there will need to be some rules to keep everyone on the straight-and-narrow. Between humans, try to keep these as rules-of-thumb. Over time, use dashboards and tools to guide the humans and let the robots create enforcement.</p><p><strong>Work together but be deliberate about it</strong> — sharing technology will require engineers working with other engineers across traditional organisational boundaries. It can easily become overwhelming, so pick the right interaction mode for the situation. There may not be one single optimal interaction mode, so a blended approach will be needed.</p><p>The key from a platform perspective is to try and get out of the way and let the tenant teams deliver unimpeded. This means relentlessly finding and removing any parts of the development lifecycle where the platform is an obstacle. This may mean providing tenant teams with controls — configuration, tooling, user interfaces etc. — but it may also mean agreeing and enforcing certain standards.</p><p>Autonomy is not a silver bullet — without alignment between teams, autonomy can breed inefficiency and low-value variation. Alignment can be created by organising humans and teams with a clear purpose. It can also be created with an opinionated platform — one which makes it easier to do the right thing, and harder to do the wrong thing. Within these constraints, there is plenty of scope of high team autonomy.</p><p>The ultimate success of WebCore will be measured over time — in excellent and innovative digital products that will inform, educate and entertain the BBC’s audiences for the next decade. This organisational refactor is a trade-off between optimising for standardised commodity components and the autonomy needed for innovative features.</p><p>Change is hard. Substantial change especially so — and where humans are involved in an endeavour that is as complex, creative, and technical as product development it can be challenging to keep sight of the big picture. But by realising that an organisation is a system — albeit a hugely complex one — then we can apply leverage to steer effective change.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80e4e171d922" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/refactor-organisation-80e4e171d922">Refactor → Organisation</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[It’s time we all started thinking of BBC’s Engineering as one of the best in the world]]></title>
            <link>https://medium.com/bbc-product-technology/its-time-we-all-started-thinking-of-bbc-s-engineering-as-one-of-the-best-in-the-world-c31e9a4ca990?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/c31e9a4ca990</guid>
            <category><![CDATA[product]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[bbc]]></category>
            <dc:creator><![CDATA[David Andrade]]></dc:creator>
            <pubDate>Wed, 23 Feb 2022 15:28:25 GMT</pubDate>
            <atom:updated>2022-02-27T16:05:00.585Z</atom:updated>
            <content:encoded><![CDATA[<p>That’s a bold statement I know, but let me explain exactly why I believe this is true, and why I’m so passionate about it. The BBC which is celebrating its centenary this year is like no other organisation in the world. Our job is simple, to ensure that it remains just as relevant in the future as it has been in the past. More specifically in software engineering, our vision is for the BBC to be as renowned for its engineering as it is for its content. For that, we have to further develop the idea of the BBC as a product and technology company.</p><p>Imagine working in a team that develops and runs digital products that are used by millions of users every day.</p><p>A team that is not only responsible for some of the biggest websites in the world but on top of that has one of the pioneering and most advanced video streaming services there is, available on hundreds of different devices, alongside an audio streaming service used by millions on a weekly basis.</p><p>But that’s not it, there are more services that are truly positioned to do good in the world like helping parents, teachers and kids get all the fun and information they need. Digital products which deliver unbiased news across the world, which join up communities across the UK, and which appear in multiple different languages for audiences at home and abroad. Digital products that are equally used to help you understand what’s happening globally, the latest from the world of sport, to find out the weather outside your front door, and to provide a recipe for you to make this evening.</p><h3>That’s what we do. That’s our BBC.</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-b4wHorcKwK0oqrT_FERIg.png" /><figcaption>BBC New Broadcasting House — London</figcaption></figure><p>I won’t lie to you, this is quite a complex operation but with our mission to inform, educate and entertain, we wouldn’t have it any other way. We pride ourselves in our public service mission: delivering value to all audiences.</p><p>The truth is that in the middle of this complexity there is huge opportunity and we continuously strive to improve, not only the quality of our audience experiences but also the quality of all the tech that powers it. We run pretty much all these services and products in the cloud and make the most of that, whilst improving our practices to ensure that the BBC’s digital services are as reliable as its broadcast ones, the best there is.</p><p>It’s tricky though, there are hundreds of micro services across our estate so we have cross discipline teams that are responsible for each of these. We do our best to strike that balance between empowering each of these teams and ensuring that we have high collaboration across the board, there is always a lot we can learn from each other and a lot we can do to minimise waste, we are dealing with public money here and never forget that.</p><p>Recently, we decided to write down our vision for Software Engineering and we think this gives a pretty good idea of what we are about:</p><blockquote><strong><em>We want the BBC to be as renowned for the quality of its engineering as it is for the quality of its content.</em></strong></blockquote><blockquote><strong><em>We aspire to be the best, so that we can engineer outstanding digital products, at scale.</em></strong></blockquote><blockquote><strong><em>Working here in an engineering role means being part of a world-class team — and a chance to do the most meaningful work of your career.</em></strong></blockquote><p>And to help explain more of what this means, we came up with five guiding stars that we use not only to aid our decision making but also our day to day behaviour &amp; focus</p><ul><li><strong>The place to work:</strong> <em>We want people in the tech industry to choose the BBC as the best place to grow their career. It’s a place to continuously learn, to be collaborative, to be creative, and to deliver challenging yet rewarding projects</em></li><li><strong>Building the best:</strong> <em>We aim to create the very best digital products, at scale — backed by engineering rigour that ensures audiences can always depend on them</em></li><li><strong>Strong engineering leadership:</strong> <em>At all levels, our engineering leaders work together to deliver on our goals, to build strong, open and diverse teams where people truly belong</em></li><li><strong>Operationally excellent:</strong> <em>The quality of service of our digital products is at the same level as our broadcast services — the best there is</em></li><li><strong>Clear technical strategy: </strong><em>We have a clear, pragmatic tech strategy, that aligns with our business and product goals, and that we execute on, together</em></li></ul><p>There is lots to do of course and we have some ambitious plans for 2022 and beyond, if you think this is your kind of place, we would love to hear from you. Our team is growing and we want to continue to make it as diverse and inclusive as it can be so do get in touch!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c31e9a4ca990" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/its-time-we-all-started-thinking-of-bbc-s-engineering-as-one-of-the-best-in-the-world-c31e9a4ca990">It’s time we all started thinking of BBC’s Engineering as one of the best in the world</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My First 30 days as a Product Manager at the BBC]]></title>
            <link>https://medium.com/bbc-product-technology/my-first-30-days-as-a-product-manager-at-the-bbc-773b0baadee7?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/773b0baadee7</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[bbc]]></category>
            <category><![CDATA[agile]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[new-starter]]></category>
            <dc:creator><![CDATA[Louise Ankers]]></dc:creator>
            <pubDate>Tue, 15 Feb 2022 22:31:11 GMT</pubDate>
            <atom:updated>2022-02-15T22:31:10.914Z</atom:updated>
            <content:encoded><![CDATA[<p>Much like Sir David Attenborough I was not successful on my first application to the BBC , however I was not dissuaded and applied again! Fortunately, I was successful last year and have joined the BBC as Senior Product Manager — Children’s Apps.</p><figure><img alt="CBeebies Playtime Island app icon" src="https://cdn-images-1.medium.com/max/498/1*-TdFbgBswLu_PeZo40TCfg.png" /><figcaption>CBeebies Playtime Island app icon</figcaption></figure><p>On my first day all the team were very welcoming and friendly, and have explained (and continue to explain!) every BBC acronym very patiently. As a new Product person, it’s often intimidating to join a new organisation, not to mention within a new domain. As I have joined during the COVID-19 Omicron wave, everyone is working from home. I am keen to meet the team in person as much as possible — though we are quite geographically distributed so we will have to plan quite carefully.</p><p><strong>Product</strong></p><p>On an organisational level — the first thing that was clear to me was that the BBC Product Culture follows the principles and values from good Product Management practice such as that advocated by product experts such as <a href="https://www.romanpichler.com/blog/">Roman Pilcher</a> or <a href="https://www.amazon.co.uk/Escaping-Build-Trap-Effective-Management-ebook/dp/B07K3QBWG1/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;qid=&amp;sr=">Melissa Perri.</a> Having read many books and blogs over the years about say — having a roadmap that indicates what you are working on <a href="https://medium.com/the-creative-strategist/why-now-next-later-is-one-of-the-best-frameworks-for-roadmapping-4d547a2f2692">now, next and later</a> to offer transparency to stakeholders rather than a delivery plan — has always been something I’ve desired to do, and here it is being used in practice!</p><p><strong>Agile Values</strong></p><p>Another thing I noticed was the enthusiasm for teamwork and team values — as one of the principles of the Agile Manifesto that I am passionate about “The best architectures, requirements, and designs emerge from self-organizing teams” — again in many organisations this may start as an ambition but be waylaid by older management practices and a blindness to what is a creative process.</p><p>My own reaction to this approach is that I feel there is the right focus on thinking about why we are building, and even if we should be building — this makes me feel that people think the same way that I do, and that experimentation and exploration in the problem and discovery space is supported</p><p><strong>Expert Voices</strong></p><p>Finally, there are many truly expert specialists at the top of their game to support you — from world class UX through willingness to focus on the data for decisions, to teams dedicated to experimentation and testing, it’s obvious quite quickly that the BBC has many very skilled people to support product initiatives. I’m excited to move on with my next 30 days and see what they hold!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=773b0baadee7" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/my-first-30-days-as-a-product-manager-at-the-bbc-773b0baadee7">My First 30 days as a Product Manager at the BBC</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BBC Hack Week]]></title>
            <link>https://medium.com/bbc-product-technology/bbc-hack-week-fb7d0816e11f?source=rss----ccd524e1760a---4</link>
            <guid isPermaLink="false">https://medium.com/p/fb7d0816e11f</guid>
            <category><![CDATA[hackathons]]></category>
            <category><![CDATA[hacking]]></category>
            <category><![CDATA[innovation]]></category>
            <category><![CDATA[bbc]]></category>
            <category><![CDATA[software-development]]></category>
            <dc:creator><![CDATA[David Buckhurst]]></dc:creator>
            <pubDate>Thu, 10 Feb 2022 21:20:33 GMT</pubDate>
            <atom:updated>2022-02-10T21:20:33.295Z</atom:updated>
            <content:encoded><![CDATA[<p>Hackathons, innovation days, codefests — whatever you call them — have been a feature of the tech industry for the last 20 years, and one of the most powerful ideation tools at our disposal.</p><p>The premise is simple, given a theme or problem space, the hackathon participants must self-organise into teams to explore ideas, write some code, and deliver a working prototype or demo in a ridiculously short period of time.</p><p>In my time at the BBC I’ve taken part in many different flavours of hack — from large multi-department events, collaborations with other organisations, 24-hour hacks, week long hacks … no two are ever the same. It’s also been my privilege to organise many of these events — in particular our annual end-of-year hack week.</p><p>The tradition of the end-of-year hack predates my 9 years at the BBC. It’s origins are back in our pre-devops days, where our operations team managed our live systems for us, and the run up to Christmas was accompanied by a strict change freeze that brought all development to a crawl. Using this downtime for hacks and ideation was a great change of pace and a chance to connect with colleagues.</p><p>The days of strict change freezes are long gone, but the end-of-year hack has just grown and grown over the years, and has firmly established itself as a fixture of software engineering at the BBC. Our most recent hack was the biggest ever, a week-long event in the middle of December, bringing together all our development teams. Everyone was invited to participate; Omicron had just cast a new shadow of uncertainty, and forced us all back into Zoom again. A week focused on innovation and collaboration was very much the distraction we needed.</p><p>If you ever have the good fortune to organise an event of this size (we had 68 teams and nearly enough participants to smash the 500-person Zoom limit), there are some things we’ve learnt over the years to make these events the success…</p><h4>Allow teams to self-organise</h4><p>Resist the urge to over-manage the hack. Teams tend to pull together the people they need, and the good ideas float to the top. As an organiser your job is to make those teams and ideas visible, and join up teams where there are similar or complimentary ideas.</p><h4>Identify your goals up front</h4><p>Why are you running the hack? Is it for ideation? Is a development opportunity? Maybe its only purpose is to encourage collaboration — breaking down team boundaries and encouraging hacking across your organisation with people you wouldn’t normally work with is a fine goal in and of itself.</p><h4>Target all disciplines</h4><p>Hacks by their nature can seem a bit intimidating to the non-programmers amongst us, but that’s a real missed opportunity. A good hack idea can really be elevated by a multi-disciplinary approach, but also gives your contributors a safe and temporary opportunity to try other roles and exercise underutilised skills.</p><h4>Get management buy-in</h4><p>Whatever you do make sure you have the support of your senior management. You’ll need them to help publicise your event, but also to buy you the time away from the day-to-day of your regular work. You’ll also need to plan way in advance to make sure your contributors can step away from their regular responsibilities without it causing panic.</p><h4>Work out how you’re going to showcase the ideas</h4><p>With a small event, you can easily get all the teams to demo at the end of the event, but when you have 60+ teams this quickly becomes unfeasible. We opt for getting teams to produce a short (2 minute) video and compiling a showcase of all the hacks — or a selection of the best ones. If your event is massive you might want to consider a competition scenario to drive interest.</p><h4>Remove the pressure to succeed</h4><p>There can be too much pressure for teams to deliver a new and brilliant feature to your users. It needs to be absolutely fine for a team to say: “we tried it and it didn’t work”. Some of the best hacks I’ve seen focussed on clarrifying a technical direction, exploring some new design concepts, or shaving minutes off the build process. Even just an outcome of “we learned some stuff” should be applauded.</p><figure><img alt="Employees watching hack demo videos on a large screen" src="https://cdn-images-1.medium.com/max/1024/1*pMLcgalMPvtPpkZwuSpGYw.jpeg" /><figcaption>Hackers gather to watch the video highlights from the week</figcaption></figure><p>Whatever you’re planning, remember you’re trying to facilitate creativity — so you need to give everyone the freedom to think big, but the right constraints to focus that creativity (just google “constraint + innovation”) if you want to dwell on that some more. In the meantime, we’ve made a short video that captures some of the highlights of our most recent event, and some thoughts from our contributors…</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fplayer.vimeo.com%2Fvideo%2F675658931%3Fh%3Dc8f588082c%26app_id%3D122963&amp;dntp=1&amp;display_name=Vimeo&amp;url=https%3A%2F%2Fvimeo.com%2F675658931&amp;image=https%3A%2F%2Fi.vimeocdn.com%2Fvideo%2F1369168439-7bbf5d95fd66be46c7b273764838e0255f83b690bd2a9da02b36d208798bcb14-d_1280&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=vimeo" width="1920" height="1080" frameborder="0" scrolling="no"><a href="https://medium.com/media/d2d01e3ecd45311cec16e9fee4b6e5d6/href">https://medium.com/media/d2d01e3ecd45311cec16e9fee4b6e5d6/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb7d0816e11f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bbc-product-technology/bbc-hack-week-fb7d0816e11f">BBC Hack Week</a> was originally published in <a href="https://medium.com/bbc-product-technology">BBC Product &amp; Technology</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>