Senior developer  Stockholms län, Sweden

Saattaa olla saatavilla

(Päivitetty 2022-09-04)

Senior developer

Stockholms län, Sweden

Sujuva English

  • Distributed systems
  • Node
  • .net

Taidot (46)

Docker

.NET Core

NodeJS

Kubernetes

JavaScript

VS CODE

ASP.NET WEB API

TeamCity

Queues

LOGGING

Git

RabbitMQ

Terraform

MORTGAGE LOANS

Kibana

Logstash

Google Cloud

LOANS

CONTINUOUS INTEGRATION/DELIVERY

PHP

GraphQL

React

REDUX

Circle CI

Load Balancing

WordPress

CUSTOMER RELATIONSHIP MANAGEMENT

POINT OF PURCHASE

QUEUE MANAGEMENT

WCF

GCP

ADJUSTMENTS

Continuous Integration

REACTJS

MS .NET

MAINTENANCE

JQuery

TOOLING

CI/CD

Node.js

CRM

WELDING

POP

PIPELINE

CONTRACTS

REBUILD

Yhteenveto

I'm a developer passionate about
new technology and creating

solutions providing value for the
client. In my free time, I spend time
with my kids, run, and learn to play
the guitar. Loves to keep things
simple.

Työkokemus

SENIOR DEVELOPER
BONNIER NEWS

2022-08 - Nykyhetki

As part of Expressens infra team we are responsible for keeping all systems running between the CMS and the frontends. This includes ● Making sure response times are good and caches are properly invalidated when content is updated.
● Starting a move of services to GCP ● Regular maintenance of all the systems fixing bugs etc.
Keywords: NodeJS, Elasticsearch, Kafka, RabbitMQ, Kubernetes, Google Cloud Platform, Terraform SENIOR DEVELOPER • BONNIER NEWS • AUGUSTI 2022 - Bonnier News has merged most of its smaller media companies into one. And is working towards a single content delivery system. I am part of Expressens infra team migrating the data from the old system into the new standardized information schema. To not force changing all of the frontends an adapter API was put in front of the new system allowing the frontends to adapt to the new structure at their own pace.
Keywords: NodeJS, Elasticsearch, Kafka, RabbitMQ, Kubernetes, GraphQL
ARCHITECT/SENIOR DEVELOPER
BLUESTEP BANK

2021-04 - 2022-08

Bluestep is entering more markets, the loan application system was built to support multiple markets with the least possible amount of changes. This was achieved by breaking out market specifics to easily change configuration and putting functionality behind feature flags. Although given differences between the markets related to mortgage loans some changes and adjustments are needed.
I'm currently working on the team going through the current system and making changes to support multiple markets.
Keywords: .NET Core, Kubernetes, Camunda, RabbitMQ
ARCHITECT/SENIOR DEVELOPER
BLUESTEP BANK

2019-08 - 2021-04

As a part of a larger operational efficiency project Bluestep is replacing outsourced projects with in-house built ones. A large part of this is the loan application process that was very spread out in different applications and spreadsheets.
I worked in the team that builds the system for handling loan applications. It involves both more architectural work such as deciding where to draw service boundaries and implementation of legal requirements such as PEP checks or calculating repayment plans. As the project grew in size and the number of services increased care was taken to keep dependencies in check. Service-to-service communication is handled between services using REST and messaging. Camunda is used to orchestrate the long-running application process.
Keywords: .NET Core, Kubernetes, Camunda, RabbitMQ
BLUESTEP BANK

2019-01 - 2020-03

Bluestep at the time lacked a way to run automated integration tests in CD. I developed a flow for using postman/newman and helped the test teams to integrate it into the CD pipelines.
Logs would from time to time go missing because of a fragile log pushing mechanism. I replaced it with an HTTP solution backed by a file buffer, pushing to logstash, improving stability.
Bluestep uses a contract-first approach when designing APIs, contracts were written using the OpenAPI Specification. A few different ways of generating clients/controllers circulated causing discrepancies. I pulled out the generation of C# code to service and wrote a CLI in Node making it really simple to use it.
During the building of the covered bonds system, a need came up for automated alarms signaling both the success and failure of the covered bonds system. No such system was easily available at Bluestep at the time. Given that we were already using application insights in Azure I set up a POC using our current logging provider Serilog to push logs to Application Insights where we could analyze them and set up rules for emails.
Keywords: Postman, Newman, Azure DevOps, Node, Serilog
ARCHITECT/SENIOR DEVELOPER
BLUESTEP BANK

2018-12 - 2019-08

I joined Bluestep at a time when they were moving their tech stack from on-prem to cloud hosting in Azure using Kubernetes.
With my previous docker/Kubernetes experience, I could help out the existing team a lot.
While the heavy infrastructure changes were ongoing we built a system for building a pool of loans used as a safety when the bank will sell covered bonds. I built a simple back office for the covered bonds system in angular.
Keywords: .NET Core, Kubernetes, Azure, MSSQL, Azure DevOps, Angular
SENIOR DEVELOPER
SPOTIFY

2018-06 - 2018-12

I was hired to help out with the Spotify tv/game-console app. My main task was to build a new integration with Samsung involving the use of Samsung's SmartThings app and IoT. Some of the challenges were communication with the Samsung team located in Seoul and implementing new features in a fragmented codebase. After the integration was completed I spent time cleaning up the codebase; removing race conditions and modernizing the frontend test stack by migrating from multiple test frameworks to using only Jest.
Keywords: React, JavaScript, C++, Jest
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2017-02 - 2018-05

CasinoPop is an online gambling start-up that has grown fast from proof-of-concept to a live system. The management started to analyze the cost and the timeframe of building a gaming platform in-house. The investors had big plans to use it both for their own brands and to have third-party sites on it.
I was hired to rebuild the entire site and build modularized components to re-use them in the potential future platform. I rebuilt the site with React, built backend components with .NET Core, and hosted them in Azure. The whole architecture was based on microservices. Later I also containerized all the applications and hosted them as Docker containers using Kubernetes in Azure.
Azure SQL Database was used for persistence and Azure Event Hub were used for integration between components.
Keywords: React, Node.js, ASP.NET Core, ASP.NET Web API, C#, Docker, Kubernetes, Azure SQL Database, Azure Event Hub, Azure SQL Database Elastic Pool, RabbitMQ, Microsoft SQL Server, Circle CI, Continuous Integration, Continuous Deployment, Microservices, Domain driven design, IIS, ProtoActor +46 76 180 55 48 gripenstam.com WORK EXPERIENCE
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2018-04 - 2018-05

Heavy changes in legislation required me to focus completely on keeping the site up to date with all new legal directives both from the MGA, UKGC, and EU with the upcoming GDPR law.
Keywords: GDPR
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2018-02 - 2018-03

Working in a small team the hosting strategy was to use as many SaaS solutions as possible to minimize time spent on managing machines and keeping software up to date. Among other things, this meant all data had to be migrated from an SQL server locally hosted on a VM to Azure SQL elastic pool databases.
Not having its own license CasinoPop is using the IGC platform. The team at CasinoPop was not in control of the rabbit broker feeding data to the system from the platform, this brought with it that only one consumer could get all events. Several systems were interested in the same events, to solve this, azure event hub was used as an event ingress then doing a fanout. This allowed for all applications to receive and evaluate the events that impacted their domain, handling retries and idempotency in a way that reflected how the system was supposed to work.
I Built a back-office in react(react-admin) where the business users could set up tournaments, cashback programs, bonuses, and extract lists of customers. The back-office was powered by a Node.js app aggregating all the APIs.
Keywords: .NET Core, C#, Node.js, React, Microsoft SQL Server, Azure, Azure SQL Database Elastic Pool, Docker, Kubernetes, Azure Event Hub, RabbitMQ, Linux
ARCHITECT/SENIOR DEVELOPER • BLUESTEP
SELECTION

2018-12 - 2018-01

- AUGUSTI 2021 Bluestep is an alternative bank targeting customers with alternate ways of earning their paycheck and customers with economic history. In the last couple of years, Bluestep and its owners have invested heavily in modernizing all of their IT systems to provide the business operation with more efficient and reliable tools.
During my time at Bluestep I have been part of two teams, firstly the covered bonds teams where we delivered a product for building a pool of loans to be used as security for a covered bond. Secondly, as part of the loan case team, I built systems for making the loan application process modern and efficient.
I have a passion for tooling and CI/CD and in parallel to delivering business features I have delivered a number of tools and utilities for making life easier for testers and developers.
Keywords: .NET Core, Kubernetes, Azure, MSSQL, Azure Devops, Angular, RabbitMQ, Postman, Newman, Node, Camunda, Docker, CI/CD, Microservices
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2017-08 - 2018-01

After stabilizing the front-end and delivering critical product improvements necessary to retain customers, I started to work on the architecture of the backend. To combat the need for redundancy and scaling I set up a Kubernetes cluster in Azure.
This allowed a holistic approach to scaling and monitoring the site and all other applications deployed to the cluster.
I also started migrating the services to .NET Core and containerized them and set up continuous integration and continuous deployment. To begin with, no systems were built with idempotency in mind, in some cases resulting in double pay-out of bonuses, when rewriting systems this was taken care of.
Having all code running in docker I moved the CI to CircleCi allowing the removal of one VM the team had to maintain.
Having all applications in the cluster monitoring applications was made easy using a Grafana dashboard powered by data in InfluxDB. All container logs were pushed from the cluster into a hosted ELK stack, setting up alarms for errors and misbehaving applications.
Keywords: .NET Core, C#, Microsoft SQL Server, Azure, Docker, Kubernetes, RabbitMQ, Linux, Elastic Search, Logstash, Kibana, Grafana, Circle CI, Continuous Integration, Continuous deployment.
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2017-02 - 2017-10

CasinoPop is an online gambling start-up that has grown fast from proof-of-concept to a live system. The site was written in WordPress and there was a monolithic WCF service that handled all the integration to a third-party gaming platform. The management started to analyze the cost and the timeframe of building a gaming platform in-house because the investors had big plans to use it both for their own brands and to have third party sites on it. I was hired to rebuild the entire site and build modularized backend components to re-use them in the potential future platform.
ARCHITECT/SENIOR DEVELOPER
Team City

2017-05 - 2017-07

Two of the bigger additions to the product was a new tournament system and a cashback system. The tournaments were designed with flexible rules allowing the business user to define tournaments freely, rules were evaluated in real-time on all incoming events. Both systems used actors to handle concurrency, allowing execution of domain code to be considered as single-threaded, drastically reducing complexity and removing the need for database locks or similar constructs.
Changing and deploying the monolith without any tests was error-prone. So, I decided to break it down into smaller manageable parts using .Net Web API using the same rest dialect throughout the system.
Keywords: .NET, C#, Microsoft SQL Server, Azure, Docker, Kubernetes, RabbitMQ, Linux, ProtoActor
ARCHITECT/SENIOR DEVELOPER
IVENTURE CAPITAL AB/CASINO POP

2017-02 - 2017-04

Initial investigation revealed that the systems had no tests, redundancy, and monitoring. I started the work on the architecture of the site, keeping in mind the bigger plans of building a platform in the future. I built react components to improve usability and remove the hard coupling to the WordPress backend, breaking out and creating new APIs as needed.
I also worked on load balancing the site which involved changing the session management to use a distributed Redis cache and migrating all the static content to a cookie-less domain that pointed to an azure storage container. To be able to work at a faster pace and be more comfortable in deploying I setup CI in TeamCity hosted on a VM.
SENIOR DEVELOPER
BETSSON

2012-04 - 2017-02

Betsson is a leading online gambling company with a multi-brand single-platform strategy at its core. In the past five years, the company has seen incredible growth both from its own brands and through acquisitions. Because of this, the platform has been experiencing rapid growth and with it, came performance, reliability, and stability issues.
SENIOR DEVELOPER
BETSSON

2016-07 - 2016-12

I helped redesign the payout of the bonus system, completely removing the need for the extra API call that caused issues in the payout. The data needed for a payout of the bonus was retrieved directly from the payments system, meaning, given a successful deposit, the bonus would always be paid out.
During the changes to the API, I also rewrote the payout logic to remove the dependency on the NServiceBus sagas improving performance and making the domain code agnostic to where it was hosted and how it received data input.
Keywords: ASP.NET Web API, C#, Microsoft SQL Server, IIS, MSMQ, NServiceBus,
SENIOR DEVELOPER
BETSSON

2016-05 - 2016-06

One of their systems, which processes all the customer events that occur in the platform, was also experiencing reliability and scalability issues. This system (the Rules Engine) was responsible to maintain all the rules and evaluate them for every customer event and trigger a state change in the customer journey system. This system experiences heavy load during peak hours as it processes every game transaction, payment, login, registration event, etc For example, Betsson has around 700 transactions per second during peak hours.
I together with my team have helped analyze the system and the analysis revealed that the way RavenDB was used to be one of the bottlenecks. The usage of dynamic indexes and distributed transactions that RavenDB offers as a feature did not scale for Betsson's needs, partly because those features were used in a way that affects the performance. At the same time, management has decided to move from RavenDB to Couchbase. My team and I have redesigned how the documents are persisted by the application which has resulted in almost rebuilding the application. Also, they have migrated all the old data from RavenDB to a new document structure in Couchbase.
The result has been an incredible increase in the performance of the system which resulted in no delays in the real-time processing of the events. I further optimized the rule registration APIs to allow bulk registration of rules in the system which was necessary when one of the brands wanted to launch campaigns for up to half a million customers and the rule registration for all of them should happen within a few minutes.
Keywords: ASP.NET Web API, C#, NoSQL, Couchbase, RavenDB, Microsoft SQL Server, IIS, MSMQ, NServiceBus, Microservices, Domain driven design
SENIOR DEVELOPER
BETSSON

2015-09 - 2016-02

During development changing requirements and fast development had caused technical debt to build up. The team realized that a major revamp of the system was required. Analysis of the systems revealed that all the technologies that were used (MSMQ/NServiceBus, Microsoft SQL Server and RavenDB) supported distributed transactions and the applications were using it heavily. So, the original intention of decoupling was not implemented properly even though the applications gave an impression of it.
With the experience gained during initial implementation, I helped re-design and implement the core component of the customer journey system which holds the state of every customer in all the many different journeys that they are participating. The system could be perceived as something like a state machine. Much focus was put on the usage and architecture of message queues on which I had a good amount of experience. Heavy focus was also put on not repeating the same mistake of using distributed transactions which were detrimental to the message throughput.
As a result, the business could target around a hundred thousand customers in a time span of less than five minutes which was a hundred times faster. This system made it possible to target a big batch of customers in a short amount of time whenever it is necessary. For example, the business was able to target thousands of customers during the halftime of a football game.
Being the developer in the team having worked longest at Betsson at the time, I had knowledge about the domain and knew how large parts of the other platform products worked, with this knowledge I could help the team to deliver faster avoiding previous pitfalls. I have always liked testing and was driving in covering the system with tests.
Keywords: ASP.NET Web API, C#, RavenDB, Microsoft SQL Server, IIS, MSMQ, NServiceBus, Microservices, Domain driven design
DEVELOPER
BETSSON

2013-09 - 2015-08

Betsson decided to centralize their whole CRM suite. The result was a new product that was called "Campaigns". The goal of the product was to listen to the events that occur because of customer actions in the platform and react to them based on rules that can be dynamically set up.
The resulting actions were various types of rewards and communications through different channels such as SMS, email etc.
The product delivered involved various components. Event listeners - which listen to all the events that are published from the platform and evaluate against the rules for all live campaigns. A dynamic rule management system was built with AngularJS 1.x where rules can be administered, I was the main contributor to it. A rewards system - which acts as an integration point to trigger various types of rewards and holds all the customer rewards that are exposed through APIs for the sites to integrate and display to the customers.
Keywords: AngularJS, ASP.NET Web API, C#, RavenDB, Microsoft SQL Server, IIS, MSMQ, NServiceBus
DEVELOPER
BETSSON

2013-01 - 2013-08

Betsson has been growing both organically and through acquisitions. Apart from the core gaming platform, this raised a need to centralize some of the most commonly used tools. As a result, a team called "Tools team" was created.
I and the team led the investigation of the products and services that were used by different brands in Betsson Group to identify which functionalities can be centralized. One of the most common functions was the use of on-site messaging. The purpose of the system was to notify customers about basically anything from a reward to upcoming campaigns. I and the team designed and delivered a product called the "On-site-messaging system". The APIs could be used by any of the systems in Betsson to deliver messages to the customers. The system was built to cater to a huge increase in performance over the next few years because of the importance that was put on the company to engage more with customers.
The result was a huge success and the system is still in use by Betsson and handles a large number of messages every day that are sent from various different systems within Betsson and serves as a central point of integration to deliver messages to the customers on site.
Keywords: ASP.NET Web API, C#, Microsoft SQL Server, IIS
DEVELOPER
BETSSON

2012-04 - 2012-12

I started in what was called the "Core" team, building an integration to a game provider for a new Chinese brand. A game provider integration is a public interface that a game uses to let the platform know of bets, wins, rollbacks, and similar transaction critical requests. During this time I started with the CI systems and made some improvements to the build pipeline of the platform.
Keywords: ASP.NET Web API, C#, Microsoft SQL Server, IIS, Octopus deploy, Teamcity.
DEVELOPER
TM WEB EXPRESS AB

2011-05 - 2012-04

I joined Web Express where he worked as an in-house consultant.
● I built and maintained a task-management system for electricians, including an android app that the electricians used out in the field.
● Apps for both Android and iOS showing job ads for a medical paper.
● An ASP.NET webforms application for a security company where the users could plan door and lock construction for upcoming construction.
● A couple of smaller Facebook apps promoting events in local malls.
Keywords: ASP.NET Webforms, C#, jQuery, Android, iOS, Microsoft SQL Server.

Koulutus

Bachelor in Computer Science
KTH

2024-09 - 2024-09

Ota yhteyttä konsulttiin

/