How we create and collaborate at Plumsail
Technology stack
We use a variety of technologies in our projects, but we don't expect you to know it all; your desire to learn and grow is what truly matters.
Here's what our core stack looks like:
- C#
- .NET Core
- JavaScript, TypeScript
- Vue, React
- Webpack, Gulp
- SASS, CSS
- MS SQL, Redis
- Azure Cloud
Development workflow
Our development workflow follows an Agile methodology centered around the Scrum framework. We use Azure DevOps for task management. Our source code is stored in Git repositories, and we use the Gitflow model for branch management.
For continuous integration, we use JetBrains TeamCity for builds, Octopus for deployments, and Ansible for automated resource provisioning. Changes made to the development branch are automatically deployed to test servers, while updates to the master branch trigger the production deployment process, pending approval from the product owner.
We use SonarQube as our static code analyzer, which helps us catch issues in the code during the build process. We see SonarQube as a helpful tool rather than a strict enforcer of coding standards. For logging, we rely on Serilog paired with the ELK stack (Elastic + Kibana), making support and development easier for everyone.
Testing and documentation
Our testing strategy relies on unit and integration tests, complemented by automated xUnit tests. We are also exploring automated UI testing with Cypress, albeit in the early stages.
We do not have a dedicated testing role; instead, we aim to automate testing as much as possible. We also often collaborate with technical support teams for testing tasks.
Developers are responsible for maintaining internal documentation, while user documentation is managed either by technical support specialists or developers, depending on task complexity.
Team communication
Most of our team works remotely and across different time zones. To keep everyone connected, we primarily use Slack for messaging and Zoom for online calls.
We strive to maintain an asynchronous work environment, allowing everyone to choose their hours—at home or in the office. This helps minimize interruptions and avoid unnecessary meetings.
Instead of daily standup meetings, we use a friendly chatbot named Natali to keep everyone updated. Each day, Natali sends a quick reminder with two simple questions:
- What did you do yesterday?
- What will you do today?
Respond whenever convenient; updates are automatically posted to a designated Slack channel. This helps to keep everyone on the same page and cut down on unnecessary meetings.
For our actively developed products, we hold weekly meetings to discuss our goals and priorities for the upcoming week. Each product has a roadmap that guides our planning and task management during these meetings.