ABOUT ME Name: Mikkel Munch Mortensen Location: Copenhagen, Denmark Languages: Danish, English Contact: E-mail, Fediverse Skills/interests: Python, Django, Django REST Framework (DRF), unit testing, PostgreSQL, elasticsearch, nginx, HTML, CSS, Javascript, Linux, Ubuntu, devops, CI/CD, Docker, vim, git, open source, free software, web standards, open data, privacy, equality Turnoffs: Enterprisey things, hypes and fads, Microsoft Windows * * * PROFESSIONAL EXPERIENCE Backend developer/architect – Whnue Sep 2024–Nov 2024 For a few months, I'm working full time on this side project (see below). ^ ^ ^ ^ ^ Senior backend developer/tech lead – Ofir Mar 2022–Aug 2024 django, django rest framework, python, elasticsearch, aws ses, heroku, docker, github workflows, devops Job listing website Ofir decided to start a complete rewrite of the entire platform in Python and Django. I was hired, along with another developer, to work on this – in parallel with the existing development team. The job seeker facing site, ofir.dk, was the first part to be revamped. We went from zero to launch in a little more than a year. This included: * Setting up CI/CD, driven by GitHub workflows. * Docker based deployments to Heroku. * Integrating to other, existing parts of our ecosystem. * Search, including saved searches, in order to let users be notified about new potential jobs of interest. * Mass e-mailing. * Server side user tracking, in order to reduce the sharing of behavioral data with 3rd parties. Furthermore, helping and mentoring colleagues transitioning from C# to Python. As I was taking on the responsibility for keeping code quality high and following best practices, I was eventually promoted from senior backend developer to tech lead. ^ ^ ^ ^ ^ Software developer – LetsGo Fleet Systems Nov 2019–Feb 2022 python, django, aws, ansible, terraform, full stack, devops Maintaining and improving our booking and car fleet management system and related systems, in a team of about 5 developers. Projects I was involved in: * Visualising events related to a single car booking in a timeline, in order to help our staff better support the users when issues arise. * Rewriting the onboarding flow for new users. This included building a flexible framework for different steps in the flow and their internal dependencies. * Rewriting our accounting modules, in order to reduce the amount of manual work required from the accounting department. ^ ^ ^ ^ ^ Backend developer/architect – Whnue Sep 2019–Oct 2019 For a couple of months, I worked full time on this side project (see below). ^ ^ ^ ^ ^ Backend developer/architect – Whnue Jul 2015–Today django, django rest framework, python, elasticsearch, gitlab pipelines, ci/cd Whnue is a booking and management system, gathering all stakeholders around a live event in a single system. This is a side project that I am part of, with 2 friends. Since July 2015, my "real" jobs have been 80% employments, allowing me to work 3 days every 3rd week on Whnue. I'm taking care of all the backend work and operations, building an API for the user facing website and mobile apps. ^ ^ ^ ^ ^ Lead developer/architect/technical PM – Saxo Publish Oct 2014–Mar 2019 django, python, django rest framework, ansible, linux, ci/cd Saxo Publish is a self publishing platform, allowing anyone to publish their digital and printed books to the world. I started as the in‐house lead developer for a team of 3 freelancers/sourced developers (some of them remote). This quickly turned into a role as the application architect and periodically also technical project manager, taking most of the responsibilities of the project from our CTO. Responsibilities included: * Taking part of the business development as "the technical guy". * Turning business needs into technical specifications and tasks for developers to work on. * Daily maintenance of servers. * Code reviews and general QA of our applications. * Guiding and mentoring the rest of the development team. * Making impossible things happen in the old fashioned world of book publishing. Major milestones and projects include: * Launching our Print on Demand solution. * Internationalisation of our platform, transforming it from a local Danish service into ready for conquering the world. * Scripting, streamlining and automating our release processes ﴾CI/CD﴿. * Scripting and automating the entire deployment process of new servers, ensuring a smooth transition from one hosting provider to another. * Upgrading projects from ancient to recent versions of Django and from Python 2 to 3. * Staying on board until the better end, taking care of properly handing over data to the 3rd party service that replaced our home grown platform, before shutting down our own operation. ^ ^ ^ ^ ^ Lead developer/architect – Refugees United Apr 2013–Sep 2014 django, python, php, html, solr, sms, ussd Lead developer in a team of 5+. Working from Copenhagen, with the rest of the tech team based in Nairobi. Responsible for the further development of the REFUNITE reconnection platform. Key responsibilities: * Making sure that all solutions are thought through – keeping the grand overview of the entire platform and assisting the project manager in the planning of future development. * Primary sudo'er – managing servers, monitoring, scripting, automation, ad hoc technical firefighting when necessary. * Tech anchor – guiding the company through the process of turning into a downright tech company, from previously relying entirely on external development. Learned quite a bit about mobile technologies (GSM, USSD, etc) and the challenges you meet trying to work within what is supposed to be standards. Built internal tools for bulk SMS campaigns and a deployment platform tailored to our needs. Did a lot of ad hoc data extraction and analysis, helping the rest of the organisation understand our data. Being the first in‐house developer, I was also part of the process of hiring and establishing our Nairobi tech team. Which eventually became self-driven to the extend that I decided it no longer made sense to have me leading them from Copenhagen. ^ ^ ^ ^ ^ Web developer – Kristeligt Dagblad Sep 2011–Mar 2013 php, python, html, css, javascript, databases, apache, linux One of a team of two web developers maintaining and developing our online publishing platform as a newspaper. Integrating to our print publishing platform, subscriptions system, payment gateways and various other external systems. Also making other stuff, like online contest management, statistical tools and a bit of system administration. I felt that I had to leave when my boss decided we should move to Drupal. Despite trying to make friends with Drupal for some months, I concluded that either I or Drupal had to leave the ship. ^ ^ ^ ^ ^ Web developer – DR, Danish Broadcasting Corporation Feb 2005–Aug 2011 php, python, html, javascript, css, databases, c#, asp.net mvc I often think of these years as my informal education. Part of a small web development team in the youth department. Made anything from small campaign sites to larger scale online communities, streaming services, content management systems and hybrids in between. Biggest achievement was to bypass the archaic corporate CMS and build our own in just a few months. A system miles ahead of corporate CMS, even working within the restraints of corporate IT. It really confirmed my belief that modular beats monolithic on every parameter. Biggest failure: That our next generation community project was closed due to management giving up and thinking everything should be based on Facebook. This was the dream task, and we had so many great, groundbreaking ideas that Facebook implemented over the next years. Good to realise we did the right thing. Too bad management didn't know what they were doing. As DR was a very Microsoft heavy organisation, I ultimately decided to leave, in order to work more with open source technologies. * * * VOLUNTEER WORK, NOTEWORTHY PROJECTS, ETC. Board member, founding member – data.coop Jun 2014–Today data.coop is a cooperative, which owns and operates a digital infrastructure for its members. Our fundamental vision is to protect our members’ data, and our values evolve around privacy, decentralisation, encryption and zero knowledge. Our entire setup is defined in open sourced code, allowing (and encouraging) others to start their own data cooperatives. ^ ^ ^ ^ ^ Backend developer – Arkiv24syv Oct 2019 django, python, ubuntu This was a project of activism: The original Radio24syv was closing down, and it seemed like no one cared about saving an archive of their programs. We saw 2 major issues in this: 1) That the politicians responsible for the radio station never thought about an exit plan for the huge archive of tax funded content. We wanted to highlight this act of neglect. 2) We also wanted to make sure that at least 1 copy of the archive existed somewhere, before the servers were shut down, in order to be able to hand it over to proper archivists at some point. In a handful of nights, along with 2 others, we hacked together a partly distributed solution that involved volunteer participants: - We built a scraper and indexed metadata for all the episodes of all of the programmes in the Radio24syv archives. - We set up a central archiving backend, which kept track of the download status for each episode. - We built a browser based frontend, which asked the backend for an episode to download from the remote archives and then uploaded this to our archive. This of course included a live status for the participant, telling them what they were downloading or uploading, and how many episodes they had helped us save. After announcing the project, we managed to download everything in a few days, with the help of thousands of participants. We also sparked a public debate about actual archiving of – and continued access to – tax funded material like this. ^ ^ ^ ^ ^ Webdude/volunteer – Klauzdal 2003–2013 php, html, css, javascript, apache, ubuntu Built a CMS and resource management system for the suburban music venue, Klauzdal. Including: Event planning and management, photo archive, scheduling for the volunteers, bar menu management, etc. Everything done as a volunteer at the venue. Other volunteer tasks included most aspects of running live events, like bar management, bartending, ticketing, cooking, cleaning, etc.