Contact centre in Microsoft Teams

About this job

What is the position?
Senior developer

What technical knowledge is required for this position?
C# - 4 years | .NET.Core - 2 years
What are the core activities in this job?
In this position, you will focus on backend development.

What type of application(s) will be your focus?
You will work on developing web applications for our core platform; our own Contact Center in Teams. Developing and strenghtening our platform will be your main focus.

What is the level of user- or customer contact in this job?
Practically non-existent.

Is the job more focussed of greenfield (new build) and brownfield (expansion) activities?
You will mostly work on maintaining and expanding on existing code.

What stack will you work with?
C# | MS SQL | ASP. NET | .NET.Core | Git | Jira | Azure | Visual Studio | .NET 6+ | Azure DevOps | Visual Studio Code

How will you use your stack?
Our environment runs entirely in Azure. The backend is .Net written in C# and for the Frontend we use what best suits the purpose; the majority is Angular, but there are also parts in React and even just built with HTML and jQuery. For each component, a trade-off is made between premade (Azure) and homemade, taking into account reliability, scalability and speed. As database we use MSSql, for config Azure AppConfig and Keyvault and for communication between the components Azure Service Bus and Web APIs. Because we have customers all over the world and because customer communication depends on our services, everything is redundant and some parts are also spread over multiple regions to experience as little latency as possible.

Our approach is pragmatic and goal-oriented. As a result, we can develop quickly and we are not blinded by theoretical problems. To keep the codebase maintainable, we naturally also pay attention to best practices and design patterns, we use automated testing, multiple environments and code reviews. As a developer you get the freedom (and the expectation) to develop yourself and apply newly learned things directly in the next feature.
Onze aanpak is pragmatisch en doelgericht. Daardoor kunnen we snel ontwikkelen en staren we ons niet blind op theoretische problemen. Om de codebase onderhoudbaar te houden, wordt er uiteraard ook aandacht besteed aan best practises en design patterns, maken we gebruik van geautomatiseerd testen, meerdere omgevingen en code reviews. Als ontwikkelaar krijg je bij ons de vrijheid (en de verwachting) om jezelf te ontwikkelen en nieuw geleerde zaken direct toe te passen in de volgende feature.


What will you do and what are your daily responsibilities?

 Our product has been built from scratch and new features are added all the time. We want to continue to do that, of course, but there is also an increasing focus on stability, maintainability and scalability. The number of customers we serve is growing fast and with it, of course, the load on the platform.

These activities include:

  • Programming new features (the to do list now includes, for example: adjusting a voice transfer, on-the-fly text to speech integration and various reporting additions).
  • Thinking about and implementing improvements in scalability.
  • Implement updates (NuGet / Azure)
  • Investigate and improve potential performance bottlenecks.

 

What will be your main challenge?
Because we have an existing product, this will be your main challenge in the beginning. Especially because we integrate with many external systems - each with its own strengths and weaknesses. It's design is modular and if you can see the big picture that should not be a problem.

After that, the biggest challenge will most likely lay in thinking about how features can be implemented, writing maintainable, extensible and high-performing code, using tools to understand your code and recognize problems. Researching and improving performance in particular sometimes proves to be a challenge. And of course, all of the above need to be in line with the business. There is a lot of freedom to apply new techniques and insights, but we also ask for your assessment of the impact something has on the existing application. We therefore do not ask for someone just writing code, but a developer who, out of the box, can analyze and think about the next steps (and then of course implement them).

How many products or services are being worked on?
We mainly 'only' work on one software product: ROGER365.io. This product has many functionalities and components.

What does your software development lifecycle look like? How long does it take on average for a new feature to be put into production?
We try to use the right mix of introducing new functionalities and monitoring the quality and stability of the platform. Small functionalities have an average lead time of 4-6 weeks, the larger ones can sometimes take several months. Bug fixes that really affect end users are often in production within a few days.

How do you bring new releases to your end users, is that fully automated or do you do it on a Friday night with a pizza?
We work through Azure Pipelines to push new code from development to our production environment via staging. Before the code goes to production, it is extensively tested in the staging environment. If approved, the code is automatically pushed towards production.

Which development methodology do you use?
A mix of Kanban and SCRUM.

With what regularity do developers have to deal with urgent production bug fixes? Is there a process for this?
Urgent bugs and possible vulnerabilities occur with some regularity (an average of 1 to 2 times per month). We then look at the impact on end users and prioritize it.

What role does quality play within your team and how does this show?
Before the code is pushed to the production environment, the software is first extensively tested in staging. This is done with automatic tests (Cypress) but also with manual tests. The product owner is also involved in this to check whether the new functionalities have also been developed according to specification.

How is the collaboration with the product owner? And is there a clear plan of what needs to be made and when? And with what frequency do changes generally take place?

The product owner is responsible for creating PBIs that contain the desired functionality. If necessary, this will be explained personally and there will be consultation about the best way to implement this. Adding new functionalities or changing existing ones is a continuous process.

Which open source do you use? And do you also contribute to open source?
We use it where convenient. We are not actively contributing to it (at the moment).

Is DevOps tooling used? If yes which one?
Microsoft Azure DevOps

What does your IT infrastructure look like?
The platform runs completely serverless in Microsoft Azure

What is (approximately) the division between bug fixing, new construction/new features, and elimination of technical debt?
Bug fixing: 15%
Improvements: 20%
New: 65%