Developing Software for Professional Services

Discover how professional services develops software.

Professional Services has a series of tools and applications that assist with our day-to-day operations and delivering services.

We strive for our tooling and applications to follow some common design structure patterns.

All of our tooling resides within the Professional-Services-Automation group on gitlab.com

Standard Setup

Python

We use Python for the majority of our backend development. Our dependency manager of choice is Poetry.

REST API

Our default REST API framework is Flask.

Default Libraries

Outside of the testing libraries list below, we have a common utilities library called GitLab PS Utils that contains several helper functions and classes to speed up prototyping and development time.

Javascript

We use Javascript for any frontend development. Our Javascript framework of choice is Vue.js. We manage our Javascript dependencies with NPM and manage our Node/NPM installations through NVM.

Databases

We use MongoDB or DynamoDB. We interface with MongoDB using PyMongo and DynamoDB with PynamoDB.

Local Testing

If we need to mock any AWS resources outside of AWS, we use Localstack.

For python testing, we use a mix of Pytest, mock, and unittest.

Packaging and Deployments

We package our tools into Docker images or Pip packages. Our evaluate tool, for example, is packaged up into both. All our docker images are deployed to the tool’s container registry on GitLab.com.

If we need to deploy any serverless WSGI-based applications to AWS, we use Zappa

Example folder structure

└── ps-tool              # Root of git repo
    ├── Dockerfile       # Dockerfile for packaging
    ├── ps-tool          # Python source directory
    │   ├── ...          # Any python code
    │   └── __init__.py
    ├── LICENSE
    ├── poetry.lock      # File generated by Poetry listing all installed packages. Must be source controlled
    ├── pyproject.toml   # Dependency file used by Poetry to track dependencies
    └── README.md