Course Content
Mastering Notion for Project and Team Management in Qiscus Integration Team
This course provides a comprehensive walkthrough of how the Qiscus Integration team utilizes Notion as a central platform for project management, team coordination, and documentation. Through hands-on exploration and guided instruction, learners will understand how Notion is structured to support cross-functional collaboration across engineering, QA, and project management roles. The course covers both the foundational concepts and practical applications of Notion, emphasizing how it adapts to different workflows and user needs within the team.
0/2
Deep Dive Into Qiscus Omnichannel
In this lesson, we will dive deeper into Qiscus Omnichannel, the flagship product of Qiscus. We will cover its key features and explore how it can be customized to meet specific needs.
0/2
Hands-On Engineering Best Practices
This lesson provides an overview of Qiscus Omnichannel, a real-time communication platform designed to centralize customer interactions from various platforms like WhatsApp, Messenger, and custom chat widgets into a single dashboard. We will highlights key features such as chat SDK for custom chat development, the omni-channel dashboard for managing conversations, and the integration of AI for features like chat summarization. This lesson also covers roles and permissions for agents and administrators, outbound messaging capabilities, customer analytics, and the customization options for channel integration, including the use of webhooks and APIs for custom agent allocation to manage agent workload efficiently. Finally, we will details the App Center for additional integrations and the ability to integrate with various chatbot platforms.
0/2
Protected: Qiscus Integration Essentials
About Lesson

Software Engineering Handbook

This handbook is the primary guide for every engineer in Qiscus’ Delivery Division—whether you’ve just joined, are still onboarding, or have been here for years. It explains the standards, practices, and processes that keep our projects on track. You’ll also find links to more‑specialised handbooks when you need deeper guidance. Treat this document as your starting point whenever you spin up or work on a project.

Introduction

Our goal is to help you work effectively and efficiently. Everything here reflects hard‑won experience from real projects. For newcomers, the handbook shortens the learning curve so you can contribute productively as quickly as possible.

1. Project Initiation

Project initiation begins right after the internal kickoff session. Follow these steps to ensure a smooth launch.

1.1 System Design

First things first—always create a system‑flow diagram.
If your project integrates with multiple services, a sequence diagram is usually best.

  • Use tools like draw.io or Mermaid.

  • Involve the tech lead for review and sign‑off.

  • Decide on the technology stack at this stage.

  • Store the diagram (file/image/link) in both the project’s Notion space and the repository.

  • Provide enough detail—the diagram is your ops team’s reference later.

Note: The system diagram must be finished before development starts.

1.2 Choosing the Tech Stack

Your stack should lean on the team’s dominant expertise and future maintenance capacity. Check the skill data in Members and confirm ops readiness.

Consult the Tech Radar—our living catalogue of technologies, each tagged with a confidence ring:

Ring Meaning
ADOPT Recommended. Proven stable in production.
TRIAL Used successfully in real projects, still under evaluation.
ASSESS Promising; needs research or prototyping.
HOLD Avoid in new projects; allowed for legacy systems.

Everyone may contribute experience to the Tech Radar so we avoid repeating mistakes.

Access the Integration Delivery Tech Radar:
https://radar.thoughtworks.com/?documentId=https://docs.google.com/spreadsheets/d/1fYD5wHwG-lM–FkSVommwq8OrnqMD0JqSCVyePnTzwU/edit#gid=0

Exception:
If the client insists on specific technologies—especially when they’ll own the code—adapt the stack to their needs.

1.3 Task Breakdown: Tickets & Spent Time

Once the design is locked, break work into tickets in the project’s Notion board (the PM will create it—ask if you lack access). Map development and QA tasks to relevant user stories; if none exist, create tasks under the epic ticket.

Log your development activity and spent time as you go. Detailed instructions live here:
https://www.notion.so/How-to-Spent-Time-the-Task-e730ade6210244558d5823cc254ef5de

2. Role‑Based Development Practices

These guidelines keep coding style, architecture, testing, and implementation consistent across roles.

2.1 Backend

2.1.1 Key Repository Files

  • Dockerfile – Defines the Docker image build. See the sample Dockerfile.

  • bitbucket-pipelines.yml – CI/CD config for automatic build, test, deploy. Details in the Deployment section.

  • README.md – How to run the app, environment docs, plus a link to the system design.

2.1.2 Logging

  • Log every inbound request in JSON. Required fields: request_id, remote_ip, host, user_agent, method, path, body, status_code, latency, message, time.

  • Multi‑tenant? Add app_code.

  • Authenticated users? Log user info.

  • Error logs must include request_id and link to the inbound log (e.g., use Go context with Zerolog).

  • Outbound calls (to external APIs) should also be logged.

Inbound example

json
{
"level": "info",
"request_id": "c0a1eaac-ab48-4cf5-9254-e088587dc125",
"remote_ip": "108.12.11.12",
"status_code": 200,
"latency": 301.1,
"message": "http request",
"time": "2024-07-10T14:23:08Z"
}

Outbound example

json
{
"level": "info",
"request_id": "7ef86599-f3fa-4bbd-b890-509e5e7a49cf",
"method": "POST",
"url": "https://clienx.com/api/v1/customer/create",
"status_code": 400,
"latency": 317.56,
"time": "2024-10-11T15:43:57+07:00",
"message": "outbound request"
}

Tip: Log what matters—excessive logs cost storage and latency.

2.1.3 Health‑Check Endpoint

  • GET /health is mandatory.

  • Response example:

json
{
"database": "ok",
"redis": "ok"
}
  • Status codes: 200 (all healthy) or 500 (a component failed).

  • Include only components relevant to your app.

Sample Go implementation: integration-go/internal/health

2.2 Frontend

2.2.1 Captcha

3. Git Collaboration

Qiscus hosts code on Bitbucket. Always use your @qiscus email for work repositories.

3.1 Profile Setup

Keep personal and work Git profiles separate:
https://www.notion.so/Setup-Git-Profile-for-Work-7df882996d6e40449b2996595226fd0d

3.2 Branching Strategy (WIP)

A slimmed‑down Gitflow:

css
main → staging → feat → staging → main
  • main – Production‑ready, stable code.

  • staging – Integration & testing (CI/CD attached).

  • feat/* – Short‑lived feature branches.

Delivery flow

  1. Sync staging with main after each production release.

  2. Branch features off up‑to‑date staging.

  3. When ready, open a PR into staging.

  4. For production, PR staging into main.

3.3 Pull Requests

  1. Feature → Staging
    PR needs at least one reviewer, passing tests, and resolved conflicts.

  2. Staging → Main
    PR requires TL approval, complete features/docs, then deploy to prod.

4. Testing

Testing is non‑negotiable. We track test coverage via Bitbucket Pipelines.

4.1 Implementation

Golang

bash
make test/coverage

(built into the integration-go boilerplate)

Ruby on Rails

bash
make test/coverage

(RSpec + SimpleCov; adjust thresholds per project)

Want examples for other languages? Feel free to contribute!

5. Deployment

Guidelines for deploying services to staging and production.

5.1 Staging

  • Create bitbucket‑pipelines.yml (see the sample).

  • Pipeline must be enabled.

  • Project naming: <repo‑name>-staging, branch staging.

  • Need a DB/Redis? Ask in Slack:

    • DB: /initdb db_user db_name_stag

    • Redis: redis://redis-integration-stage.qiscus.io/0

Central Application

  1. Add variables in the Variables tab.

  2. Create an Application pointing at the Bitbucket image.

  3. Set Neo DNS to a qiscus.io subdomain (no -stag suffix).

Configure once—future pushes to staging auto‑deploy.

Start/Stop Staging Servers

Command Action
/eks-action list List all staging apps
/eks-action start Start an app
/eks-action stop Stop an app

5.3 Production

  • First release – handled by SRE.

    • DB request: /initdbprod db_user db_name

  • Subsequent deploys:

    • Submit a Slack workflow with repo, command, port, etc.

    • Share env vars privately with SRE.

    • Update image tags via Jenkins (access through TL) and commit changes in integration-helm.

Detailed steps:

6. Handover

Once the app is live, the PM asks Ops to review the handover docs. Make sure they’re complete and detailed. Stay available for Q&A so knowledge transfer is smooth.

A few days later, we’ll hold a follow‑up meeting to discuss project details, evaluate development, and plan next steps.

Final Words

This handbook isn’t a one‑time read—keep it open as you deliver projects. Feel free to update it with examples or lessons you’ve learned.

Happy building, and best of luck on every project!