Skip to content

Latest commit

 

History

History
291 lines (190 loc) · 15.9 KB

File metadata and controls

291 lines (190 loc) · 15.9 KB

Contribution Guide

Table of Contents

Welcome to the community

Hello and welcome! If you are reading this, we hope it's because you'd like to help. Thank you in advance for your contribution!

Overview of the project

Tazama is an open source software (OSS) real-time <<-insert your use case here->> monitoring solution. In its initial incarnation Tazama is focused on transaction monitoring for the detection of Fraud and Money Laundering behavior. That's right: an Open Source transaction monitoring solution.

We built an open source product so that it can be used to promote trust in digital payments systems and encourage previously under-serviced communities to participate in digital payments ecosystems without worrying about the safety of their money. The product was envisaged by the Level One Project, an initiative of the Bill & Melinda Gates Foundation.

While Tazama has strong applications in the financial services industry, it can also be used in other ways. The system could ingest any kind of data in real-time and model behavior over time based on rules and scenarios specific to that data. Tazama could have applications in Healthcare Monitoring, Cybersecurity, Supply Chain Management, Smart City Applications, Retail and Customer Behavior Analysis, Transportation and Logistics, Environmental Monitoring, Telecommunications, IoT Devices and Smart Environments. (We asked ChatGPT.)

We are privileged, and very excited, to have recently joined The Linux Foundation as one of their many excellent Projects.

About this guide

This contribution guide will take you through the steps to contribute to the Tazama Project and to help your contributions be successfully integrated into the Product.

We'll cover our code of conduct for healthy community participation, and then walk you through everything you need to be able to contribute in the way you would like. The contribution guide is structured around contributor personas (Developers; Document writers; QA/ testers; DevOps engineers, Project managers and scrum masters)

Helping with this guide

We have established a Tazama Contribution Guide Working Group for the purposes of expanding and improving this contribution guide. Review our miro board for an overview of the process for providing input to our contribution guide and for an outline of content ideas and areas for improvement.

New to Open Source Software (OSS)?

Are you new to open source software?

Entering the world of open source can be both exciting and rewarding. Open source software (OSS) is software whose source code is freely available for anyone to view, modify, and distribute. This collaborative approach fosters innovation, transparency, and community-driven development.

Importance of contributions We believe that through the collective expertise and efforts of our community and the broad, collaborative approach inherent in open source software development, we can change the world in ways that we would never be able to by ourselves.

Our product is young; barely out of infancy. We need the help of our fledgling community, people like you, to help Tazama grow. While we do need help with some specific things, any help offered is welcome, and we hope to be able to afford everyone in our community an opportunity to be involved in a way that also meets their personal aspirations.

Some of those specific areas where we would particularly appreciate help:

  • Code contributions: Fix bugs, add new features, or improve existing code
  • Documentation: Enhance project documentation to help others understand and use the software effectively
  • Testing: Identify and report bugs, ensuring the software functions as intended
  • Hunting and squashing bugs in our code, our processes and our documentation
  • Implementing Tazama for yourself or others
  • Creating tutorials and how-to guides
  • Give a "thumbs up" on issues that are relevant to you
  • Industry knowledge and experience
  • Community Support: Assist others by answering questions and mentoring newcomers

Why contribute to Open Source? Contributing to open source projects offers numerous benefits:

  • Enhance Your Skills: Engaging with OSS allows you to improve your coding abilities, learn new technologies, and understand real-world software development practices
  • Build a Professional Network: Collaborating with a global community helps you connect with like-minded individuals, opening doors to mentorship and career opportunities
  • Give Back to the Community: By contributing, you help improve software that others rely on, fostering a spirit of collaboration and shared growth
  • Gain Recognition: Active contributions can showcase your expertise and commitment, enhancing your professional profile

Additional reading on Open Source https://opensource.guide/

How to contribute

Types of contributors Our contribution guide addresses different kinds of contributors. It is not intended to be an exhaustive or exclusive list, but the classification of contributors helps us to support each contributor according to their specific needs.

  • You are an Individual Contributor if you are exploring and using our product in an individual, unaffiliated capacity, and you want to contribute to the product for its, or your, own sake.
  • You are a System Integrator if you want to implement the product for your customers, either as a standalone product or as part of your adjacent products, and you'd like to contribute to the product because you are introducing new features that would benefit the product or other users as well.
  • You are a Commercial End User if you want to implement the product for yourself directly or in partnership with a System Integrator and you are implementing new features that you think would benefit the product or other users as well.
  • You are a Big Tech Organization or Charitable Organization who wants to contribute to the product in pursuit of Digital Public Goods objectives.

For the most part, because we are an open source software product, we expect that contributors would want to contribute code, or documentation on the code, and this guide would be focused on helping you to do that.

Getting started

  • Understand the Project: Read the project's README and CONTRIBUTING files to grasp its purpose, structure, and contribution guidelines
  • Engage with the Community: Join discussions, forums, or chat channels to connect with other contributors and ask questions
  • Start Small: Begin with minor contributions like fixing typos or addressing small bugs to build confidence and familiarity with the contribution process
  • Learn the Tools: Familiarize yourself with version control systems like Git and platforms like GitHub, which are commonly used in OSS development

Remember, every contribution, no matter how small, makes a difference. The open source community values collaboration, respect, and inclusivity. Don't hesitate to seek guidance and ask questions as you embark on your open source journey.

Contribution process overview

flowchart TB
    A[Create Issue] --> B{Contributor}
    B -->|External contributors| C[Fork Repo]
    C --> D[Clone Repo]
    B -->|Internal contributors| D
    D --> E[Create Feature Branch]
    E --> F[Develop Feature]
    F --> G[Commit Changes]
    G --> H[Create Pull Request]
    H --> I{Code Review}
    I -->|Request Changes| F
    I -->|Approve| J[Merge PR to Dev]
    J --> K[Close Issue]
    K --> L[Release to Main]
    L --> M[Monitor & feedback]
Loading

Understanding the project structure

Read the Product Overview for a detailed overview of the software.

The Project organization on GitHub contains both PUBLIC and PRIVATE repositories. Core components of the system are in public repositories that are accessible to anyone:

  • The Transaction Monitoring Service (TMS) API
  • The Event Director (ED)
  • The Rule Executor (the rule processor wrapper function)
  • Rule 901, a sample rule
  • The Typology Processor
  • The Transaction Aggregation and Decisioning Processor (TADProc)

... and various library and supporting repositories and tools.

All of our pre-fabricated rule processors, along with their unit tests and default configurations, are hosted in private repositories. That is not to say that they are not also open source software, but we are hosting them in private repositories because they might allow fraudsters and money launderers to reverse engineer the way the system detects fraud and money laundering "out of the box". Any member of our GitHub organization can access the private repositories to implement and work on the rule processors or their tests.

Finding something to work on

There are many ways to contribute to an open-source software project such as Tazama. Tazama is constantly under development as our community works to improve the software. When we encounter tasks that we think might be a good first issue for someone new to the project to undertake, we create the issue in the /tazama-project repository and tag it with the label: "good first issue". You can click on the good first issue label to display all the current issues under this label.

If there are currently no issues under this label, feel free to explore the project on your own and identify possible fixes or enhancements. Make sure to submit your feature or bug fix request to the /tazama-project repository as a new issue for consideration by the team. It would be good to reach out to us to discuss your issue before you start though, just in case it's something we have already considered.

How to engage

Placeholder: Reporting bugs

Create a new issue in the tazama-project repository

Placeholder: FAQ

Community and governance

Our open source philosophy

Adherence to Linux Foundation's Code of Conduct

Our Project subscribes to the Linux Foundation's Code of Conduct as represented in the Linux Kernel Code of Conduct. The Linux Kernel Code of Conduct is itself derived from the Contributor Covenant v1.4. Our Code of Conduct is based on v2.1, the most recent version at the time of writing.

In an effort to keep the contribution guide focused and lean, our Code of Conduct is hosted on its own separate page: Tazama Code of Conduct.

References: Linux Kernel Code of Conduct Contributor Covenant

Placeholder: Community roles

Tazama product overview

Placeholder: Overview of Tazama components

Placeholder: Technology stack overview

Placeholder: Product vision/Roadmap

Tazama design principles

Guides for each persona

For Everyone

Licensing and Contributor Agreements

General contribution standards/guidelines Definition of done

Committing your changes

Placeholder: Submitting a PR

Placeholder: Code review process

Placeholder: Release management process

Creating GitHub issues Placeholder: Reporting bugs and proposing features

For Developers

For contributing code

Typescript

Required technical skills and knowledge

Setting Up the development environment

Tazama coding practices

Placeholder: Guide for building a new rule processor

Placeholder: Recommended tools

Placeholder: Coding templates

Placeholder: Tutorials

Python

Placeholder: Coding Practices

For contributing documentation

Placeholder: Technical documentation guidelines

For contributing tests

Placeholder: Test coverage guidelines

For Document Writers

Documentation style guide

Guide for including diagrams in markdown files

Placeholder: Markdown recommended practices

Placeholder: Tools and setup : VScode with extensions

Placeholder: How to contribute Whitepapers, Case Studies

For DevOps Engineers

Placeholder: Contribution process

Placeholder: Contribution areas: CI/CD pipelines, Helm Charts

Placeholder: CI/CD pipeline structure: GitHub Actions; Jenkins

Placeholder: Infrastructure Automation: Docker, Kubernetes

Placeholder: CI/CD pipeline structure: GitHub Actions; Jenkins

Placeholder: Tools

For QA Analysts/ Testers

Placeholder: End-to-end testing process

Placeholder: Contribution types: Test cases, unit tests, E2E tests, automation scripts

Placeholder: Testing tools: Jest, Postman, Newman

Placeholder: Testing standards: Unit test coverage

Placeholder: Contribution process: Writing and submitting test cases

Placeholder: Testing standards

Placeholder: Tools