Subjects - bcgov/PIMS GitHub Wiki

Subject Areas

The following subjects are relevant to the PIMS solution. The ability to support PIMS will require a broad understanding of many subjects, but only senior level understanding on a few. The difficulty column expresses the level of effort, experience, and skill necessary to support PIMS in a generic way. While the list is attempting to be exhaustive, many subjects will not change or require any support for the foreseeable future (i.e. Dependency Injection or DI is only relevant when writing unit tests for the backend). Many subjects are related to multiple milestones (see Transition Roadmap), which indicates a certain level of knowledge and exposure to them before the milestone can be completed.

Business

Subject Domain Description Difficulty
Inventory Policy Submitting and maintaining property information. Junior
SPP Policy Surplus Property Program business process – Disposing properties in inventory. Intermediate
ERP Policy Enhanced Referral Process – properties available for internal transfer. Senior
SPL Policy Surplus Properties List – properties being externally sold. Intermediate
First Nation Consultation Policy First Nation consultation process in relation to SPP. Senior

Scrum Process

Subject Domain Description Difficulty
Agile Project Management Project Management process NA
Scrum Project Management Agile framework for development and delivering NA
Daily Scrum Project Management Scrum daily ceremony NA
Sprint Review Project Management Scrum sprint conclusion ceremony NA
Sprint Retrospective Project Management Scrum sprint conclusion ceremony NA
Backlog Refinement Project Management Agile activity of ensuring stories are ready for development NA
Jira Project Management 3rd party project management tool NA

Onboarding

Getting access to the various environments, services, tools that are required to develop and support PIMS.

Subject Domain Description Difficulty
GitHub Source Control, DevOps Repository hosting services Junior
OpenShift Infrastructure Container orchestration Intermediate
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Junior
Rocket.Chat Tool Exchange Lab communication tool Junior
DEV Environment OpenShift environment for QA Junior
TEST Environment OpenShift environment for UAT Junior
PROD Environment OpenShift environment for production Junior

Local Environments Setup

Install the required tools, software and configure developer environments to support development. While a developer will for the most part only need to follow the setup documentation, it requires a greater depth of understanding of how everything works together.

Subject Domain Description Difficulty
Docker Development, Infrastructure Containerized architecture Intermediate
Docker Compose Development, Infrastructure Tool to control containers locally Intermediate
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Intermediate
Oauth Security Open standard for access delegation Senior
Open ID Connect Security Simple identity layer Intermediate
Git Source Control Versioned source code - fetch, pull, push, rebase Intermediate
Pull Requests Source Control, DevOps Code review Intermediate
GitHub Source Control, DevOps Repository management service Intermediate
Configuration Development Environmental abstraction Intermediate
SQL Server Development, Infrastructure Database Intermediate
Bash Development Tooling development language Junior
Linting Development Development standards enforcement Junior
Unit Testing Testing Automated testing of code Intermediate
Code Coverage Testing Unit testing coverage reports Intermediate
VS Code Development Development tool Junior
Visual Studio Development Development tool Junior

PIMS Solution

Supporting PIMS requires an understanding of the different parts, components, integrations, tools, architecture, and processes.

Subject Domain Description Difficulty
Inventory Business Submitting and maintaining property information. Junior
SPP Business Surplus Property Program business process – Disposing properties in inventory. Intermediate
ERP Business Enhanced Referral Process – properties available for internal transfer. Senior
SPL Business Surplus Properties List – properties being externally sold. Intermediate
Database Container SQL Server on a Linux container provides the central data-source for PIMS. Intermediate
DAL Development Data access layer used for all communication with the database and 3rd party tools within the API. Senior
API Container RESTful HTTP endpoints. Intermediate
Application Container Web application to support UX/UI. Intermediate
Leaflet Integration, GIS 3rd party tool to present GIS. Junior
Light Workflow Engine Development Data structure and logic to support project workflow rules and status. Intermediate
Notifications Integration, Development 3rd party integration with CHES to send email based on Light Workflow Engine. Intermediate
Roles Development, Security Claim based identity authorization. Intermediate
Keycloak Container 3rd party tool and service to authenticate and authorize. Senior
Stakeholders Business Key resources who use PIMS. N/A

Frontend Development

There are two primary development layers within PIMS, the frontend and the backend. The frontend is a React web application that supports the UX/UI. The majority of the GIS components are hosted within the frontend.

Subject Domain Description Difficulty
Docker Development, Infrastructure Containerized architecture Intermediate
Docker Compose Development, Infrastructure Tool to control containers locally Intermediate
Bash Development Tooling development language Junior
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Intermediate
Oauth Security Open standard for access delegation Junior
API Architecture RESTful, microservice Intermediate
Configuration Development Environmental abstraction Intermediate
React Development Frontend JavaScript library for UI Intermediate
Redux Development Frontend JavaScript library for state management Intermediate
Formik Development Frontend JavaScript library for forms Intermediate
Styled Components Development Frontend JavaScript library for UI Junior
JavaScript Development Frontend development language Intermediate
Typescript Development Frontend development language Intermediate
AJAX Development Frontend communication layer Intermediate
CSS Development, UI Frontend UI syntax Junior
SASS Development, UI Frontend dynamic CSS Junior
Node Development Building tools for JavaScript Junior
NPM Development Node Package Manager tool for development Intermediate
VS Code Development Development tool Intermediate
Linting Development Development standards enforcement Junior
GIS GIS Geographical Information System mapping Intermediate
WMS GIS Web Map Service standard protocol Junior
WFS GIS Web Feature Service standard protocol Junior
Leaflet ntegration, GIS Frontend 3rd party library for GIS Junior
Unit Testing Testing Automated testing of code Intermediate
BrowserStack Testing 3rd party automated integration testing tool Junior

Backend Development

The backend components of PIMS are composed of the API, DAL, Database, Keycloak, and various integration with 3rd party tools.

Subject Domain Description Difficulty
Docker Development, Infrastructure Containerized architecture Intermediate
Docker Compose Development, Infrastructure Tool to control containers locally Intermediate
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Intermediate
Oauth Security Open standard for access delegation Senior
Open ID Connect Security Simple identity layer Intermediate
N-tier Architecture Architecture Separation of concerns and layering features Intermediate
API Architecture RESTful, microservice Intermediate
C# Development API and tooling development language Intermediate
.NET Core Development API and tooling development framework Intermediate
Mapster Development Data transformation tool Intermediate
Configuration Development Environmental abstraction Intermediate
DI Development Dependency Injection abstraction Senior
MVC Development Model View Controller architecture Intermediate
AJAX Development Frontend communication layer Intermediate
VS Code Development Development tool Intermediate
Visual Studio Development Development tool Junior
TSQL Development Database development language Intermediate
Entity Framework Development Database integration library Intermediate
SQL Server Development, Infrastructure Database Intermediate
Bash Development Tooling development language Junior
Linting Development Development standards enforcement Junior
GIS GIS Geographical Information System mapping Intermediate
WMS GIS Web Map Service standard protocol Junior
WFS GIS Web Feature Service standard protocol Junior
Geocoder Integration, GIS 3rd party tool for GIS Junior
CHES Integration, Email 3rd party email tool Intermediate
Unit Testing Testing Automated testing of code Intermediate
SQL Profiler Monitoring, Debug Database query performance analysis tool Junior

Infrastructure

A greater understanding of the infrastructure that supports PIMS outside of the local development.

Subject Domain Description Difficulty
Docker Development, Infrastructure Containerized architecture Intermediate
Docker Compose Development, Infrastructure Tool to control containers locally Intermediate
OpenShift Infrastructure Container orchestration Intermediate
Kubernetes Infrastructure Container orchestration Junior
Cronjobs Infrastructure Infrastructure database backup tooling Junior
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Intermediate
Oauth Security Open standard for access delegation Senior
Open ID Connect Security Simple identity layer Intermediate
Git Source Control Versioned source code - fetch, pull, push, rebase Intermediate
GitHub Source Control, DevOps Repository management service Intermediate
GitHub Actions DevOps Automated testing and reporting Junior
DevOps Infrastructure, Architecture CI/CD pipeline - infrastructure as code Senior
Jenkins DevOps, Integration DevOps configuration and automation Junior
API Architecture RESTful, microservice Intermediate
Configuration Development Environmental abstraction Intermediate
Application Architecture Frontend web application Intermediate
AJAX Development Frontend communication layer Intermediate
Entity Framework Development Database integration library Intermediate
SQL Server Development, Infrastructure Database Intermediate
Bash Development Tooling development language Junior
Leaflet Integration, GIS Frontend 3rd party library for GIS Junior
Geocoder Integration, GIS 3rd party tool for GIS Junior
CHES Integration, Email 3rd party email tool Intermediate
Elasticsearch Monitoring, Infrastructure Search engine data repository Junior
Kibana Monitoring Data visualization dashboard Junior
Prometheus Monitoring, Infrastructure Event monitoring and alerting Junior
Grafana Monitoring Data visualization dashboard Junior

DevOps

The processes, tools, and configuration to support Continuous Integration and Continuous Delivery (CI/CD).

Subject Domain Description Difficulty
Docker Development, Infrastructure Containerized architecture Intermediate
Docker Compose Development, Infrastructure Tool to control containers locally Intermediate
OpenShift Infrastructure Container orchestration Intermediate
Kubernetes Infrastructure Container orchestration Junior
Cronjobs Infrastructure Infrastructure database backup tooling Junior
Keycloak Integration, Identity 3rd party solution to manage authentication and authorization Intermediate
Git Source Control Versioned source code - fetch, pull, push, rebase Intermediate
Pull Requests Source Control, DevOps Code review Intermediate
GitHub Source Control, DevOps Repository management service Intermediate
GitHub Actions DevOps Automated testing and reporting Junior
Jenkins DevOps, Integration DevOps configuration and automation Junior
SonarQube DevOps, Integration Code coverage and quality monitoring Junior
Configuration Development Environmental abstraction Intermediate
Entity Framework Development Database integration library Intermediate
SQL Server Development, Infrastructure Database Intermediate
Bash Development Tooling development language Junior
Unit Testing Testing Automated testing of code Intermediate
BrowserStack Testing 3rd party automated integration testing tool Junior
⚠️ **GitHub.com Fallback** ⚠️