Software Engineer in 4G at NOKIA
From May 2013 until October 2016 I was working as a software engineer for the 4th mobile broadband generation LTE.
The main technical topics were:
- Design, implementation and review of C++ C-Plane software components of a 4G eNB base station
- Tool evaluations for automatic code cleanup
- Research of the reactive streams desing pattern for embedded systems
- Analysis and removal of critical bugs
- Testcase implementation in TTCN3
- Working in a Scrum team under the agile manifesto
Coming from total different domains, convincing people at NOKIA about my skills and experience,
it has been quite motivating to start in the mobile broadband domain.
My colleagues all have been very nice in supporting me in all kinds of questions which come up as a newcomer.
At the same token, I could also transfer some knowledge from an outside perspective
and so it has been a very fruitful exchange of ideas and experiences.
For me, it was a big gain in professional experience working for a company and project that big
and I take the opportunity to say “Thank you!” to all of my colleagues.
Working in CPlane
CPlane describes the control plane(layer) of a mobile broadband system.
Here we developed performance- and security-critical software for a LTE enB basestation.
Together with my scrum team, I designed, implemented and reviewed new features.
As an example, we implemented the eICIC(enhanced Inter-Cell Interference Coordination) which
is designed to reduce the interference created by two or more cells.
All components were written in C++ 11/14 and my focus was on the cell component.
At that time we used SVN as our software control system.
After some learning phase, I created testcases for our component in TTCN3 at system level.
This is a specialized testing language in the telecommunications domain, where the focus
is on messaging and content exchange verification.
This is quite an important field, since the mobile broadband 3GPP defines huge message
structures in ASN1 and one needs a tool to efficiently verify the payloads.
I also supported in analysing and fixing critical tickets from tester or customers
which had been reported to the cell component.
Tool and library evaluations
As stated above, since I came from a different domain and had also other tool and design experiences,
it was an exciting task to evaluate what kind of code cleanup tools and libraries might help us to
become more efficient and automated.
I spent a gread amount of time at looking for tools which would do an(at least partly) automatic
cleanup of superfluous header files.
I created a test evaluation tool which was scanning over one component and this one was able
to get rid of 30% of superfluous headers.
Another area where we tried to come up with a better design was asynchronous data handling.
A very popular solution in other languages and domains are reactive streams, which is
currently not very common in embedded systems.
I already had great experience with it this paradigm in Java and Kotlin, so my task was
to evaluate if there are already existing industrial-strength libraries.
Coming from an experience working the Kanban way, the transition to purely Scrum wasn’t that hard for me.
Some challenges for me were more in company tailored processes and communications.
Also, the team based world-wide interworking is quite amazingly organised, considering time-zones
and the needed synchronization when working on backlog items.
Working at this scale greatly increased my experience on how to organize and “live” the work we do.