Developing Software for Professional Services
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
ae98fa0e
)