- September 7, 2020
- Blog
A journey as a consultant at NVSM
Hello, my name is Kenny van Meines and currently I’m assigned on a mission as a Full stack dotnet developer for ‘Nationaal Verbond van Socialistische Mutualiteiten’ or NVSM.
My Project: VSB
The Flemish Social Protection (dutch: Vlaamse Sociale Bescherming, VSB) is an initiative of the Flemish Government. This is a package of benefits for people with illness, disabilities, and in great need of care.
Our team consists of three developers, one project owner, and another three developers. The first three are full-stack developers and are part of the front office team. They do everything. Starting from a stored proc result to visualizing the data and back. But they don’t have direct access to any database. The second three developers are part of the mainframe team. They store the data and return the data to the front office. I’m part of the first three developers.
My mission is to visualize the data of this department, needed by healthcare workers. All this data exists on the mainframe and is also accessible by these people, but in a less friendly way (the mainframe itself).
Portal
Our Vsb application is one of the many small web applications of NVSM. At the moment, we are trying to put all these smaller applications inside one big web app named Portal. Users will be able to access one or smaller applications based on their user role.
The positive effects of the Portal are:
- Single sign-on: users need to log in only once
- Active person: all these apps view/edit people’s information. Now you only have to search for a person once. Then he/she/x will be visible in every application.
- Unified services. We can now share services between our applications using npm.
- Unified style: all applications inherit the styling from the Portal
To combine all these different applications, we have one master project Portal. Here we import all other projects. We do this by packaging the other projects. The portal imports these packages like you import any other node package. It then extracts the RoutingModule and places the routes in the side-navigation. Eventually, it renders the active module (based on the routes) in a specific frame.
Vsb is everything under the green line and to the right of the side navigation.
Since Vsb is one of the first applications of the Portal, we also have a testing responsibility. We have to report everything that goes wrong or seems missing from the Portal and its side services. Due to my interest in the Portal, I’m now allowed to add new features or fix bugs myself. One of the features I have added is the menu. On the screenshot, you can see the part with the red line.
Scrum
All front office teams use Scrum. In my team, we also use this framework, but with some minor modifications.
First of all, we do not use the Daily Scrum. Since we are only with three people, we know what the others are doing. And my team members are friendly, so when I’m stuck, I can easily ask them for help.
Next, the Sprint Review, the Sprint Retrospective, and the Sprint Planning happen simultaneously. It’s usually all done in less than two hours. We skip the review and the retrospective. But if someone has something to say or show, we are all open-minded.
A day at work
When I arrive around 6.45, I’m usually the first person at the desk. I begin my day by starting the coffee machine and settling myself. Then I check my emails and go on with my tickets.
The next few people will arrive shortly after, but the ones I’m sitting next to come after 8.30. I will be already busy solving bugs or creating new features.
I am known as the guy who leaves at 15u30. Before leaving, I will evaluate my work and see if I could finish the current ticket. If I don’t know how long it will take or if it is going to be more than twenty minutes, I call it a day. Also, when there is a meeting going on, I will stay as long as needed.
What Did I learn so far?
Git Command line
So no offense to the company (NVSM), but my laptop can be very slow. Especially when using a Git Gui or the integrated command line of Visual Code. Therefore I started to use the command line much more frequently. Although I still forget some of the commands I often use, I already feel faster and more comfortable using the command line.
Something new I learned about Git, is the git config file. Here you can configure your commands. For example, it happens a lot to me that I start making changes on the “develop” branch. It’s not difficult to move my changes to a new branch. It only takes me three lines of command. But it’s even more simple to create a new command that can do this in just one line.
Because of this Git config file, I might not simply go back to a Git GUI if I start a new project. The reason for me to use a Git GUI, is because it handles fast, and you don’t have to remember all these commands. But those things are solved when I can write my simple commands.
Pull requests
While at my previous client, we had neither the time nor the discipline to wait for pull requests. It is now our only option. It gives us an extra validation layer. In theory, this is a great way to find illogical code and learn about new features or solved bugs. In practice, no one likes to go over 20 new or modified files to check out what changed. However, I check my code before completing a pull request. Since I wrote it myself, I have a much better vision of things that aren’t supposed to be in there. Anyway, I understand that someone else may be better at finding illogical code since they don’t have to worry about any business logic while screening the code.
Angular form validation
It always starts very easy, and it usually is. But when dealing with custom components or combined field validation, it quickly gets more difficult. For example, in Vsbase we have a search form. This form consists of custom form fields wrapped in a custom form. There is some validation before you can perform a search. This part all works fine, except for the form inside an Angular material Stepper. The stepper has its own “IsErrorState” function. Our custom form also has this specific function. Now somewhere this breaks the two-way binding. Therefore navigation with the stepper will do the validation, but it will always start from a so-called never touched pristine FormControl. To fix this, I added a closure function that cached the IsErrorState function from our custom form components, calling the same arguments received by this function upon the cached function. Then whenever you want to go to the next step, we make the form field dirty and perform this cached function right before the stepper changes the view.
Room for improvement
Something very noticeable between my current mission and my previous mission is accessibility to test data. At my previous client, I was sometimes even asked to modify the database live in production. Of course, that is not a good idea, but now I’m not even allowed to access the database in a test environment. I think it would be better if we had access to a fake test environment. This way we could see what happens and use queries to find test cases much faster.
Final word
Something very noticeable between my current mission and my previous mission is accessibility to test data. For my last client, I was sometimes even asked to modify the database live in production. Of course, that is not a good idea, but now I am not allowed to access the database in a test environment. I think it would be better if we had access to a fake test environment. This way, we could see what happens and use queries to find test cases much faster.