All blogs / Software / engineering practice
The Guardian Engineering Blog
A blog by the Guardian's internal engineering team. We build and run the Guardian website, mobile apps, editorial tools, revenue products, advertising, and data and identity platforms. This blog is where we share our experiences and approaches, including software development tips, code examples, ope
Software / engineering practiceMobile / iOS / AndroidSecurityEngineering management / careersEngineering blogs
- Posts
- 351 from 21 Apr 2010 to 6 May 2026
- Posting
- now and then (4 in the last year)
- Kind
- company blog
- Feed
- https://theguardian.engineering/blog/rss.xml
2026 3
2025 4
2024 18
- Cooking up recipe data for the Feast app
- Cooking up recipe data for the Feast app
- Day in the Life: Alex Guild
- Day in the Life: Alex Guild
- Parsing: the merit of strictly typed JSON
- Parsing: the merit of strictly typed JSON
- Hack Day: Summer of Sport Fall of Democracy
- Hack Day: Summer of Sport Fall of Democracy
- When security matters: working with Qubes OS at the Guardian
- When security matters: working with Qubes OS at the Guardian
- Pinboard: transforming communication across the newsroom (part 3 of 3)
- Pinboard: transforming communication across the newsroom (part 3 of 3)
- Pinboard: transforming communication across the newsroom (part 2 of 3)
- Pinboard: transforming communication across the newsroom (part 2 of 3)
- Pinboard: transforming communication across the newsroom (part 1 of 3)
- Pinboard: transforming communication across the newsroom (part 1 of 3)
- The Digital Fellowship is your foot in the door to the future of news
- The Digital Fellowship is your foot in the door to the future of news
2023 12
- Large language models and generative AI: a recent hack day
- Large language models and generative AI: a recent hack day
- Making Typerighter work harder
- Who said what: using machine learning to correctly attribute quotes
- Standardisation: the merit of consistent patterns
- From a zebra to a rotating banner: how we stepped up your ability to Support the Guardian over the last seven years
- Aurora Serverless – a migration story
- Day in the Life: Jessica Leivers
- Roll Over Rollups! The Big Future of Ophan’s Historical Data
- Hack Day: Food Glorious Food
- Galaxies of the Guardian: the formation of an irregular org chart
- Day in the Life: Ana Pradas
2022 17
- Our journey towards the fastest breaking news service
- Recognising ‘bad actors’ in data leaks with AI
- Day in the Life: Raphael Kabo
- How we built the Guardian’s Tor Onion service
- Day in the Life: Abolade Akintunde
- Day in the Life: Simone Smith
- Day in the Life: Philip McMahon
- Day in the Life: Chloe Kirton
- What we learned at the International Journalism Festival
- Day in the Life: Georgia Ellis
- React islands on theguardian.com
- The future of work: development tooling and Covid-19
- How we have changed our application and hiring processes
- A Day in the Life: Gustavo Gava
- Turning the tables on accessibility
- Get to the point! Why we added pinned posts to the Guardian’s live blogs
- A Day in the Life: Mohammad Haque
2021 23
- A Day in the Life: Anna Beddow
- Guardian Software Engineering Fellowship 2022: apply now
- Talking sense: using machine learning to understand quotes
- A retrospective on a decade of innovations
- Pondering some Scala performance questions
- Cop26 Hack Day September 2021
- A Day in the Life: Roberto Tyley
- A Day in the Life: Amina Adewusi
- How we backfilled the Guardian’s in-house analytics tool to provide greater journalistic insight
- A Day in the Life: Max Duval
- Old the front page! The story of 1821 Mode
- Virtual Hack Day April 2021
- A Day in the Life: Yusuf Faraji
- A Day in the Life: Sophie Lambrakis
- A Day in the Life: Jonathon Herbert
- How technology unlocked the secretive power of ‘Queen’s consent’
- A Day in the Life: Rebecca Thompson
- How technology is powering Covid-19 investigations
- Virtual Hack Day November 2020 – Diversity and Inclusion Theme
- How we made Typerighter, the Guardian’s style guide checker
- How technology is powering election coverage
- A Day in the Life: Mahesh Makani
- How technology is powering environmental reporting
2020 5
2019 21
- How the Guardian’s engineering team supports the 24 hour news cycle
- Championing the reader
- Async Failure handling in Typescript
- Securing and centrally monitoring accounts in Amazon Web Services
- Shrinking the download size of the Guardian’s Live app on Android
- Migrating the Guardian website to React
- Software quality in a world of microservices and continuous deployment
- The Tools Game, building empathy with our journalists
- Faster PostgreSQL connection recovery
- Has Mary Wollstonecraft's CPU spiked?
- Revisiting the rendering tier part 2: migrating AMP
- Structured content: benefits for creating and publishing articles
- Life in the Guardian's Digital department
- First days in the Guardian's Digital department
- Guardian Digital Fellowship 2019: apply now
- Applying to the Guardian's Digital department
- Being part of The Guardian's Digital Fellowship
- Harness web development skills to create better desktop applications
- Revisiting the rendering tier
- Code readability matters
- Leaving Scribe
2018 9
- Bye bye Mongo, Hello Postgres
- Hello computer: introducing the Guardian Voice Lab
- How the Guardian co-designs with readers to improve our journalism
- Using Scala string interpolation to protect logged data
- Why the Guardian is using encrypted EC2 root volumes on AWS
- Our Digital Fellows share their experiences of the scheme
- Guardian Digital Fellowship 2018: apply now
- How to tackle uncertainty with design
- First-timer's guide to Guardian Hack Days
2017 7
- How not to break the Guardian website
- Development of the live blog at the Guardian
- Championing Accessibility at the Guardian
- Lesbians Who Tech: How do we improve diversity?
- How we integrated off-platform at the Guardian
- How our userhelp team became more digitally focused
- Empowering our editorial teams to impact page performance
2016 43
- Scanamo: simpler, safer DynamoDB access for Scala
- Multiple DNS: synchronising Dyn to AWS Route 53
- Implicits and type classes in Scala
- Creating a culture of learning at the Guardian
- Testing in Production: rethinking the conventional deployment pipeline
- Introducing the Guardian Digital’s self-organised Diversity & Inclusion group
- What we learnt from our mistakes in 2016
- The Assumptions Buffet
- Real-world software security lessons
- Levelling up our client side developer experience
- Mirrors, lights, sawdust, lasers
- What we’ve learnt from Startup Culture
- Stepping into a new world: What we have learnt from The Guardian VR
- “Show me the money!”
- Code Mesh 2016
- Adventures with Echo
- Guardian Digital Fellowship 2017
- The Digital Fellows: A New Hope
- How to publish an Android library: a mysterious conversation
- Testing in Production: How we combined tests with monitoring
- Perfect software: the enemy of rapid deployment?
- The Guardian coding workshop
- The art of the design sprint
- Discover new compression innovations Brotli and Zstandard
- Guardian Developer Blog Advent
- The Guardian has moved to HTTPS🔒
- What did you think about our live election results alert?
- Ada Lovelace Day 2016
- How we made the RioRun progressive web app
- Pulling back the curtain: building the Guardian's sous chef bot
- Git Merge 2016
- Coming in from the cold: Routes to becoming a software engineer
- The web we want hack day
- Enabling developer migration!
- Quality Assured Cinematics
- The Guardian Digital Fellowship: six months in
- Building Bonobo, the Guardian's open source API key management tool
- Data-Driven Quality
- Testing in the right places
- It's All About the Team
- Migrating Postgres to RDS without downtime
- Be agile in being agile
- The Guardian's new pairing exercises
2015 29
- How to add a form to a Play application
- Announcing the Guardian Digital Fellowship
- Building an offline page for theguardian.com
- The software testing identity crisis
- How I went from a tester to a developer role
- Open sourcing Grid, the Guardian’s new image management service
- Device wall of awesome: how Lego helped our digital development
- The User Experience of Creative Sprints
- Hack day report: Using Amazon Machine Learning to predict trolling
- Announcing the Guardian's digital networking event
- Maintaining an open source project at the Guardian
- Designing in the dark: How we created the Guardian App for Apple Watch
- Extra! Extra! Rethinking the Guardian Breaking News Experience
- Clever Compilers
- The best way to learn tech is to teach it
- Upgrading Elasticsearch: Content API’s dual stack strategy
- Android Subtle Prompt library
- Fullstack 2014 - conference report
- Compile-to-JavaScript languages
- What to listen to next? jq to the rescue!
- "Do what you want": building great products through anarchy
- How we reimagined search for the Guardian app in one day
- All the news that fits to print
- Prout: is your pull request out?
- Why learn about algorithms?
- Five months in software development at the Guardian - what we’ve learned
- How does the Guardian recruit developers?
- Hour(s) of Code – inspiring the next generation
- Delivering Continuous Delivery, continuously
2014 44
- What is the Guardian's tech stack?
- Problems with Selection and Range objects
- Functional Android
- Taming timeouts with a Promise
- Developing in the open
- The perils of excessive JavaScript timeouts
- On the ambitious but bumpy road to AngularJS 2.0
- MozFest 2014: creative chaos – in the best possible way
- Immutable data structures in Python
- Websockets and AngularJS
- #dareconf 2014 review: people skills for digital workers
- Pitfalls and prizes of ensuring quality mobile apps
- Shipping from GitHub to Maven Central and S3, using Travis-CI
- Parsing JSON with Scheme
- Eyewitness is moving from a stand-alone app to being integrated into our main offering
- What does it mean to be a senior developer?
- Case study: Guardian Soulmates redesign
- Introducing the new Guardian Developers Site
- Hacking Journalism at the MIT Media Lab
- Introducing the Content API v2
- Navigating the Guardian
- Creating Glassware for the Guardian
- A Tale Of Two Users
- Experience the best of the Guardian World Cup coverage with our new mobile app
- Engineering the iOS Guardian news app 3.0
- Git 2.0 released - defaults to 'better'
- Improving the beta commenting experience
- Exciting changes for the Guardian app are just around the corner
- Changing the Guardian's pairing test
- Improving Sass code quality on theguardian.com
- How the Guardian uses GitHub to audit GitHub
- New mix of stories on mobile homepage
- Shortening the goalposts
- Coming of a new age - the younger older generation
- HackForLiving: A weekend of calm collective thinking with AgeUK
- Monitoring, alerting and starting from scratch
- Inside the Guardian’s CMS: meet Scribe, an extensible rich text editor
- Robustium - improving robustness in automation testing
- Articles don't write themselves... or do they?
- Introducing wraith-donk
- How the Guardian successfully moved domain to www.theguardian.com
- London DevOps meetup held at the Guardian
- Encrypting sensitive data in Puppet
- QA testing for the Guardian's Content API
2013 16
- The Guardian's digital development team speaks
- Teachers and students at PyconUK
- Moving mountains: managing a systems hardware refresh
- Young Rewired State 2013: mentoring the tech stars of tomorrow
- The Plucky Contender: on failing hard, fast and briefly
- The Guardian development flow
- 10 things we learned during the making of Firestorm
- How the Guardian built a solid, scalable foundation for digital-first journalism
- State of the Browser 2013: conference writeup
- The Guardian attends Hack the Government 2013 with Rewired State
- The Trials, Tribulations and Triumph of PyCon 2013
- A day at the Raspberry Jamboree: microcomputing and hardware hacking
- Notes from Edge Conference 2013
- Introducing Google+ sign-in
- Sending better emails
- Tools of the trade: the browser-based tools the Guardian's digital team uses for coding
2012 26
- Fragmented world: what two years of traffic data teaches you about mobile
- How the Guardian Soulmates development team took a lesson from rugby league
- Real-time QA: staying confident with code
- The Guardian and the Knight-Mozilla OpenNews fellowship
- Functional Programming Principles in Scala: the final push
- Responsive design at the Guardian: an introduction
- Functional Programming Principles in Scala: three weeks in
- Winning the metrics battle
- Facebook's London Hack 2012: hacking Guardian commenting
- Our new video pages – an inside look at some of the design details
- Functional Programming Principles in Scala: First Impressions
- Five features of Japanese news sites
- HTML5 and native apps: the hybrid approach
- Software development: What I know now that I wish I'd known before
- Reimagining the timeline: behind our Second Screen web app
- Testing, testing: the Guardian attends a QA community meet-up
- Discovery Week Diary: Day Two
- Discovery Week Diary: Day One
- Introducing the Miso Project
- Design and usability changes to the Guardian iPad edition
- Computer, meet your maker
- Developing the Google TV app in Beta
- The confusing language around programming languages
- Calling passionate software developers
- Guardian Hack Day: The presentations
- Help hack day developers make the Guardian's cycling coverage better
2011 58
- December's "Carnival of journalism" round-up
- Behind the rumours: how we built our Twitter riots interactive
- Music Hack Day London 2011: a developer's view
- Guardian Spotify app: FAQ
- Guardian launches music reviews app for Spotify
- Goodbye to the Guardian's TagBot
- Join in December's Carnival of journalism
- Business:designed
- Live blogging research
- Guardian Eyewitness iPad app updated
- Guardian Android app now lets you save to SD card - an explainer
- UX drop-in and EuroIA Predux events at the Guardian
- Introducing the Guardian's new music album pages
- Agit – a Git client for Android
- Developer drop-ins continue through the summer
- From 'Social by design' to 'Social workers of technology' - UPA 2011
- Notes on Release 115
- Developing the new artist pages
- Hactivate: A participant's perspective
- Notes on Releases 113 & 114
- Drop-ins: Phase II
- (H)activate 2011: come and join us
- Knight-Mozilla News Innovation Jam
- So long, IE6, it's the end of testing times
- Developer drop-ins: half time report
- Knight-Mozilla News Innovation Jam
- Notes on Release 112
- The experience of a developer drop-in
- Notes on Release 111
- Developer drop-in events
- Scala at guardian.co.uk
- Cennydd Bowles predicts a rocky road ahead for UX at the Denver IA Summit
- Introducing developer drop-ins
- Notes on Release 110
- National Hack the Government Day 2011
- Hacks and Hackers: ScraperWiki day
- Notes on Release 109
- Getting noticed in the iTunes App Store
- The SXSW Tumblr tracker
- Notes on Release 108
- SXSW 2011: How we made our interactive band tracker
- Questions in search of an answer
- Notes on Release 107
- Why we built our automated SXSW listings pages - Part two
- Why we built our automated SXSW listings pages
- Things I wish I'd known before the Guardian Hacks SXSW event
- Notes on Release 106
- Technology bursary 'opened my eyes'
- How we created our SXSW music listings pages
- Balancing front-end performance with tracking
- Tags are magic! - Part 4
- Notes for Release 105
- Tags are magic! - Part 3
- Announcing Guardian Hacks SXSW
- Tags are magic! - Part 2
- Notes on Release 104
- Tags are magic! - Part 1
- Talking about The Guardian and 'Linked Open Data' at news:rewired
2010 16
- Microapps and the Art of Widget Maintenance
- The big freeze: notes on Release 103
- Switching to Google-hosted jQuery
- Exploiting open and linked data at Online Information 2010
- New 'British soldiers killed in Afghanistan' interactive with Javascript
- Six things I've learned about web development working at the Guardian
- The everlasting permalink
- Notes on Release 102
- Welcome to Guardian Developer Blog
- The story behind the redesign of Guardian Jobs
- From Publisher to Platform: 14 ways to get benefits from social media
- Adding Linked Data to the Open Platform
- Notes from dConstruct 2010
- World Cup instant Twitter replay: how we did it
- Calculating the swing, marginality and targets for constituencies
- How we built the UK national carbon calculator