Skip to content
@Portfolio-Advanced-software

Portfolio-Advanced-software

Reading guide

Introduction

This document is created to help the reader use this document to easily find certain products and sum up all the context. The reading guide is written for my personal portfolio to prove my level of proficiency on some enterprise software engineering topics. There are nine learning outcomes that are related to this topic and need proof of my knowledge I will be gathering during this semester. To proof this I will be working on two projects: a group and individual project.

Group project - Stockbrood

The group project will be done by our group existing of five students and one product owner (PO). The PO is a trader on multiple markets and is looking for a way to automate testing his trading strategies. Everything about this project can be found here.

Individual project - BingeBuster

The individual project is platform based on Netflix. Because I'm interested in services like Plex it would seem a good opportunity to learn more about it. Everything about this project can be found here.

Start

The last semester we had similar topics was semester 3 and I really liked that semester, so far I know what a micro service architecture is and how you connect it to the front-end with an api-gateway. Beside that I already have some experience with containerizing using Docker, so I have a good starting point. I'm looking forward to exploring more topics regarding this architecture and diving deeper in this field. We learned about the scaling benefits in semester 3, but never got to the point where we would actually scale, so I'm interested to actually scale this semester and learn what's needed to do so. I hope that this semester will allow me to get more specialised in micro service architecture.


Learning outcomes

Scale for every learning outcomes: undefined, orienting, beginning, proficient, advanced.

Learning outcome 1 - Future-oriented Organization

You develop and deploy enterprise software, both individually and as a team, that fits the current question and needs of your stakeholders. Your final solution is designed with the possibility for future further development.

Score

Id Description Type Level
1.0 Sprint 0 Group project Orienting
1.1 Sprint 1 Individual project Orienting
1.2 Sprint 2 Individual project Beginning
1.3 Sprint 3 Individual project Proficient

Substantiation

1.0: Sprint 0 The first sprint I developed a feeling for what enterprise software means and started to translate it to user stories that keep certain enterprise topics into mind like speed and scalability to improve the customer's processes.

1.1: Sprint 1 I created simple non functional requirements that are linked to enterprise software and applicable to my individual project. Non-functional requirements

1.2: Sprint 2 We started a document in our group to justify the technology we are using. Beside that I'm getting familiar with certain terms that are used in an enterprise environment and why they're useful for certain scenarios (gRPC, Docker, Kubernetes, etc.)

1.3: Sprint 3 After receiving good feedback on our document, we fixed the last remark by adding a picture for clarification and the document is currently finished and will be overhanded to our product owner.


Learning Outcome 2 - Investigative Problem-Solving

You deliver professional products according to planning, which is the result of solving problems in a structured and methodical approach. You demonstrate a critical view towards your own and other people’s work.

Score

Id Description Type Level
1.0 Sprint 0 Group project Orienting
1.1 Sprint 1 Individual project Orienting
1.2 Sprint 2 Individual project Beginning
1.3 Sprint 3 Individual project Proficient
1.4 Sprint 4 Individual project Proficient

Substantiation

1.0: Sprint 0 The first sprint I developed a feeling for what enterprise software means and started to translate it to user stories that keep certain enterprise topics into mind like speed and scalability to improve the customer's processes.

1.1: Sprint 1 I wrote a researchplan for my individual research that will help the group project ass well as my individual project. This plan can be found here. Besides that I created user stories for my individual project they can be found here.

1.2: Sprint 2 I started thinking about how I will actually do my research based on my plan and if after gaining some more knowledge the last couple of weeks it's still correct. I changed some of the questions to help me get to a better answer and to not make it even more broader. I started my research by doing some literature study. My plan is to finish it next sprint completely.

1.3: Sprint 3 I started creating the necessary prototypes for my research and testing the criteria on it. Finally I came to a conclusion that can be read in my research here

1.4: Sprint 4 Previous sprint I started working with the problem we are trying to solve in this group research. I made prototypes and tested several criteria on them to come to the conclusion that we need a combination of the copy command and a mounted volume.


Learning Outcome 3 - Personal Leadership

You acquire skills required for your future career. You are aware of multiple career paths and can reflect which ones fit best, considering your (potential) skills and ambitions. You are aware of developments in software engineering and can signal trends.

Score

Id Description Type Level
1.0 Sprint 0 Group project Undefined
1.1 Sprint 1 Individual project Orienting
1.2 Sprint 2 Individual project Proficient

Substantiation

1.0: Sprint 0

1.1: Sprint 1
I'm already busy to prepare myself for a minor abroad so I'm busy with developing myself and my career. I will write more in this document to support this learning outcome.

1.2: Sprint 2
Recently I've been reflecting more and more on my career path and where I finally want to work to. This helped finish the personal development document. Because I'm planning of going abroad in a few months I started broadening my view to the future and discovering new paths. You can read about it in this document.


Learning Outcome 4 - Targeted Interaction

You use appropriate communication considering your role in a team, your audience and the medium to convey your message and results of your software development process.

Score

Id Description Type Level
1.0 Sprint 0 Group project Orienting
1.1 Sprint 1 Group project Beginning
1.2 Sprint 2 Individual project Beginning
1.3 Sprint 3 Individual project Proficient

Substantiation

1.0: Sprint 0
We had two great standups with our semester coach agreeing. We really started off great, because we immidiately created a jira board with user stories including story points that we figured out doing poker planning. We also created a group contract at the start to ensure everybody's availability and responsibility. We also did a small delivery which can be found here

Scherm­afbeelding 2023-04-12 om 10 05 05

Beside that we also did a peer review to assess our skills and contributions to the project.

Scherm­afbeelding 2023-04-12 om 10 06 01

1.1: Sprint 1
We continued with the standups and they became more meaningful when starting on the project. We adjusted the user stories after the planning with our product owner and start working on an real agile way in sprint 1, by creating tasks related to the user stories. The jira board was pretty much up to date during the whole sprint. For my individual i also created a git project board.

Scherm­afbeelding 2023-04-13 om 09 40 16

User story

At last we also did a sprint delivery our first official one. We did a good first presentation, but we should focus on being less technical and ensure live demos and files as much as possible.

1.2: Sprint 2
We did a better presentation, the only feedback we received was including the research in the presentation and also clearly show what user stories are finished or not. On another matter we got feedback to create smaller user stories to guarantee not working on them multiple sprints. Sprint delivery can be found here

1.3: Sprint 3 We involved the feedback from our last presentation into our current one and therefore reaching the proficient level. Sprint delivery can be found here


Learning Outcome 5 - Scalable Architectures

Besides functionality, you develop the architecture of enterprise software based on quality attributes. You especially consider attributes most relevant to enterprise contexts with high volume data and events. You design your architecture with future adaptation in mind. Your development environment supports this by being able to independently deploy and monitor the running parts of your application.

Score

Id Description Type Level
1.0 Sprint 0 Group project Orienting
1.1 Sprint 1 Individual project Orienting
1.2 Sprint 2 Individual project Beginning
1.3 Sprint 3 Individual project Beginning
1.4 Sprint 4 Individual project Beginning
1.5 Sprint 5 Individual project Proficient

Substantiation

1.0: Sprint 0

1.1: Sprint 1
For my individual project I created a C1 & C2 model to base my project on. The architecture can be found here. Besides that I spent a lot of time figuring out how to create Dockerfiles and how to run MetaTrader inside a Docker container. I wrote a little tutorial about it that can be found here. Finally I created a little POC to test communication between two GO servers using rabbitMQ that can be found here

1.2 Sprint 2
I created all the necessary repo's for my BingeBuster project with basic implementation for messaging with RabbitMQ. Beside that I started with kubernetes in the group project so I can use this for my individual. You can see the minikube (local kubernetes) dashboard where I created a config that keep 3 instances running at all times.

2023-04-11_15-50-01.mp4

To allow scaling in the future I chose to go with gRPC instead of REST because of it's speed and convertibility. This protocol works binary and therefore is compatible with everything and therefore is faster when bigger or more files are sent through it, which makes it great for scaling. At last it has built in load balancing features which I want to look into. I created a basic gRPC server POC, the repo can be found here

Golang.gRPC.POC.Demo.mp4

1.3 Sprint 3
I created an API gateway to ensure routing and as one access point to redirect to the microservices so it can function as a load balancer in my Kubernetes Cluster.

1.4 Sprint 4
To understand how my MongoDB instances scale in my free cluster I created a little research that can be found here

1.5 Sprint 5
I created a resource mapping to prepare me for load testing the document can be found here

I started working with my cluster in the cloud and set everything up for a scalable architecture. I create the necesarry yaml files that can be found here. The YAML files create a pod deployment for every user expose it as a service because I couldn't get the DNS service to work. I also deployed Prometheus and Grafana to monitor. At last I created a service to expose my api gateway to the internet and a horizontal pod scaler that scales according to the generated load:

image


Learning Outcome 6 - Development and Operations (DevOps)

You set up environments and tools which support your chosen software development process. You provide governance for all stakeholders’ goals. You aim for as much automation as possible, to enable short release times and high software quality.

Score

Id Description Type Level
1.0 Sprint 0 Group project Orienting
1.1 Sprint 1 Individual project Orienting
1.2 Sprint 2 Individual project Orienting
1.3 Sprint 3 Individual project Orienting
1.4 Sprint 4 Individual project Beginning
1.5 Sprint 5 Individual project Proficient

Substantiation

1.0 Sprint 0

1.1: Sprint 1
For our sprint 1 delivery I helped create the CI/CD to docker hub to make it as easy as possible for our customer to deploy it on its own systems.

1.2: Sprint 2
Beside that I created a CI start for my front-end that builds and tests my project in a headless environment. The deployment is not working yet, but I'm asure that this will be fixed soon. See this repo

The CI/CD for my service is working, it builds a docker image based on the dockerfile in the repo and publishes it to docker hub. image

1.3 Sprint 3

1.4 Sprint 4
I created a pipeline for my kubernetes yaml files repo. The repo will connect to my Google cloud cluster and will apply the YAML files so the deployments are always up to date. The yaml files grab the most up to date ones from my Docker hub that are published at every push to the main branch.

image

I also started a bit with testing so I can ensure high code quality and test if everything is still working correctly when a copy is pushed to docker hub

image

1.5 Sprint 5
I implemented monitoring from my api gateway requests with Prometheus and Grafana. I both deployed them in the cluster with the rest. I also build in an extra endpoint at which Prometheus can retrieve metrics:

image

To visualize the data gathered with Prometheus I created two simple graphs in Grafana:

image

I created more security test to test endpoints to get 401 and 403 without role or auth and also 200 if it succeeded with the right credentials. Beside that I created some tests that tested my auth implementation to login and register both happy and sad flow.

After all I linked Snyk and SonarCloud to my repos that compare the new code with previous commits to see if there are any new security risks. If it is passed the marge it will come back with a non passed check mark and I will get notified.

image


Learning Outcome 7 - Cloud Services

You can explain what a cloud platform provider is and can deploy (parts of) your application to a cloud platform. You integrate cloud services (for example: Serverless computing, cloud storage, container management) into your enterprise application, and can explain the added value of these cloud services for your application.

Score

Id Description Type Level
1.0 Sprint 0 Group project Undefined
1.1 Sprint 1 Individual project Undefined
1.2 Sprint 2 Individual project Orienting
1.3 Sprint 3 Individual project Beginning
1.4 Sprint 4 Individual project Proficient

Substantiation

1.0: Sprint 0

1.1: Sprint 1
I did some research to find a cloud service for RabbitMQ for my POC. This would also come in handy for our group project because we can all use the same one and that'll make it easier for development and testing.

image

1.2: Sprint 2
I started hosting my mongodb to a cloud provider and therefore creating more experienct with cloud providers. I seperated the databases by database name for my microservices.

image

Finally I use docker hub to automatically publish my docker images to and host them. image

1.3: Sprint 3
I started looking into ways to deploy a Kubernetes cluster, I wanted to try it using Oracle Cloud, because I already had an account there. Unfortunately it didn't succeed (yet), you can read about my progression here

1.4: Sprint 4
To deploy my project fully to the cloud and prove that it works like a scalable micro service I deployed a kubernetes cluster on Google Cloud, called my BingeBuster-Cluster. For now some of my services are deployed on it, but I will deploy them all by the end of this sprint.

image


Learning Outcome 8 - Security by Design

You investigate how to minimize security risks for your application, and you incorporate best practices in your whole software development process.

Score

Id Description Type Level
1.0 Sprint 0 Group project Undefined
1.1 Sprint 1 Individual project Undefined
1.2 Sprint 2 Individual project Orienting
1.3 Sprint 3 Individual project Orienting
1.4 Sprint 4 Individual project Beginning
1.5 Sprint 5 Individual project Proficient

Substantiation

1.0: Sprint 0

1.1: Sprint 1
I added docker secrets in my workflow to push to dockerhub to hide my username and password

1.2: Sprint 2
I followed a Kubernetes course on LinkedIn Learning and they discussed a couple of little mea you can take to make your cluster a bit more secure. Like acccesing containers only as non root.

Scherm­afbeelding 2023-05-25 om 08 50 46

1.3: Sprint 3
I created my own auth service to secure my gateway, it works with JWT-tokens and doesn't allow access when it's missing or incorrect. You can find more information in its repo here

1.4: Sprint 4
I created an authorization service to complement my authentication service and to implement the different roles I set up in my architecture. This way the end points are more secured and only assigned roles can use them. Therefore making it more secure.

2023-06-03.17-24-22.mp4

I also test if my password hashing method works and doesn't expose the password.

1.5: Sprint 5
I created a Security by design document in this document I look at OWASP and there top ten and compare the risks to my own application and see what solutions they provide that I think are implementable. Beside that I also look at static security testing with Snyk and SonarCloud.

I also created a .env file in all my repo's with empty values that I locally save and are not pushed to the repo. This means I no longer expose sensitive credentials. You have to pass these environment variables to the published docker containers when trying to start.

At last I tested multiple endpoints in my gateway one with specific roles and one with auths and one without to succeed in happy and sad flow and resulting in the corresponding HTTP codes, I did this by mocking the gRPC services.


Learning Outcome 9 – Distributed Data

You are aware of specific data requirements for enterprise systems. You apply best practices for distributed data during your whole development process, both for non-functional and functional requirements. You especially take legal and ethical issues into consideration.

Score

Id Description Type Level
1.0 Sprint 0 Group project Undefined
1.1 Sprint 1 Individual project Undefined
1.2 Sprint 2 Individual project Orienting
1.3 Sprint 3 Individual project Orienting
1.4 Sprint 4 Individual project Beginning
1.5 Sprint 5 Individual project Proficient

Substantiation

1.0: Sprint 0

1.1: Sprint 1

1.2: Sprint 2
I created an api in Golang with gRPC with its own database (mongodb) this repo can be found here.

MovieService.gRPC.API.demo.mp4

1.3: Sprint 3
I started to add the code for implementing a delete function over multiple micro services with the use of messaging. Therefore I did some refactoring to split the responsible functions for messaging, db handling and grpc handling so I could work more easily in the next sprint. I also could send a message when performing a certain method, but I didn't do anything with it.

1.4: Sprint 4
This sprint I made it possible to handle distributed data by calling the delete request to my api gateway and let the user service handle it to delete all records involving the user id to delete all records.

2023-05-24.18-11-40.mp4

1.5: Sprint 5
I also created a function that gets all user data from services that have user data stored from that id. I return it in a string format for simplicitity.

2023-06-04.08-49-59.mp4

Beside that I improved the delete all users across multiple services that didn't implement saving user data yet. And I also save multiple records across multiple services when registering. To prove how I take care of distributed data I created a document about it. Beside that I also researched how my free MongoDB cluster scales and handles CAP. You can read it here.


Reflection

Reflect here on your (study) process per sprint. Where are you getting stuck, what is going well, where do you need help. This is not about the content; you have described this in the learning outcomes.

Sprint 1

During sprint 1 I focussed to much on the group project and less on my individual project, that explains why certain things are still missing. Nevertheless did I do a great job in the group project and made a lot of progression and gathered knowledge.

Sprint 2

During sprint 2 I had a little bit less time because I was ill, but none theless I created some building blocks that will help me next sprint to get to the learning outcomes quicker and I already start to get familiar with certain topics.

Sprint 3

During sprint 3 I made a good beginning to create a scalable architecture so all my services were coming and working together. I need to start with the cloud because I'm expecting to spend some time on it, beside that I want to create a planning and discuss it with the teachers so I know what I have to do because my overview is a bit lost.

Sprint 4

During sprint 4 I discussed the planning with the teachers and started to better my code to let the services work together and also recreating my C2 to get a clear overview. I started working on the planning and I want to dive a bit deeper into some aspects next spring like messaging, scaling and what kind of tests I can write.

Sprint 5

During sprint 5 I could connect the learning outcomes together to do everything in the cloud so I did most of the stuff working with the cloud. This sprint a lot became clear and therefore I could work very efficiently. I also worked off every discussed thing on the planning I created.

Conclusion

The topics included in this semester were very interesting and I learned a lot. Beside that I really wanted to learn how an application operates in such a scalable architecture and this became very clear to me. I did not have any specific goals or expectations this semester, because I'm always interesting in learning something new. I also could dive into a lot of topics, but with every semester I must say that there wasn't much time to dive deeper into these topics and specialise a bit.

Popular repositories Loading

  1. .github .github Public

    1

  2. BingeBuster-WebUI BingeBuster-WebUI Public

    TypeScript

  3. BingeBuster-StreamingService BingeBuster-StreamingService Public

    Go

  4. BingeBuster-MetadataService BingeBuster-MetadataService Public

    Go

  5. BingeBuster-MovieService BingeBuster-MovieService Public

    Go

  6. BingeBuster-UserService BingeBuster-UserService Public

    Go

Repositories

Showing 10 of 16 repositories
  • Portfolio-Advanced-software/BingeBuster-UserService’s past year of commit activity
    Go 0 0 1 3 Updated Aug 10, 2023
  • Portfolio-Advanced-software/BingeBuster-AuthzService’s past year of commit activity
    Go 0 0 0 3 Updated Aug 10, 2023
  • API-Gateway Public
    Portfolio-Advanced-software/API-Gateway’s past year of commit activity
    Go 0 0 0 4 Updated Aug 10, 2023
  • Portfolio-Advanced-software/BingeBuster-MovieService’s past year of commit activity
    Go 0 0 1 4 Updated Aug 10, 2023
  • Portfolio-Advanced-software/BingeBuster-Auth-Service’s past year of commit activity
    Go 0 0 0 4 Updated Aug 10, 2023
  • Portfolio-Advanced-software/BingeBuster-WatchHistoryService’s past year of commit activity
    Go 0 0 0 3 Updated Aug 9, 2023
  • .github Public
    Portfolio-Advanced-software/.github’s past year of commit activity
    0 1 0 0 Updated Jun 15, 2023
  • Portfolio-Advanced-software/BingeBuster-Cluster’s past year of commit activity
    0 0 0 0 Updated Jun 5, 2023
  • Portfolio-Advanced-software/micro-service-communication-prototype’s past year of commit activity
    Go 0 0 0 0 Updated May 21, 2023
  • Portfolio-Advanced-software/gRPC-API-Golang’s past year of commit activity
    Go 0 0 0 0 Updated Apr 17, 2023

Top languages

Loading…

Most used topics

Loading…