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!
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.
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)
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.
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/
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]
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.
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.
- Start a chat in a Tazama slack channels such as #welcome or #get-help
- Start a discussion in the tazama-project repository
- Send an email to support@tazama.org
Placeholder: Reporting bugs
Create a new issue in the tazama-project repository
Placeholder: FAQ
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
Placeholder: Overview of Tazama components
Placeholder: Technology stack overview
Placeholder: Product vision/Roadmap
Licensing and Contributor Agreements
General contribution standards/guidelines Definition of done
Placeholder: Submitting a PR
Placeholder: Code review process
Placeholder: Release management process
Creating GitHub issues Placeholder: Reporting bugs and proposing features
Required technical skills and knowledge
Setting Up the development environment
Placeholder: Guide for building a new rule processor
Placeholder: Recommended tools
Placeholder: Coding templates
Placeholder: Tutorials
Placeholder: Coding Practices
Placeholder: Technical documentation guidelines
Placeholder: Test coverage guidelines
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
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
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