# Intern Projects
## Slack bot/app
Service channels are an important part of how we support each other and solve together at Braintree. As more and more people throughout PayPal have found themselves interacting with Braintree on behalf of merchants, traffic in those service channels has skyrocketed. Funny thing about SDKs though, much of the time it’s the underlying services that our service channel visitors are seeking, not us.
### The challenge
Build a slack bot that can aide visitors to our service channels in getting the right help, faster. Bonus: we’re able to track actions to see how many inbounds we’re getting.
### Acceptance criteria
- functional slack app deployed to k8s [like dog is](https://github.braintreeps.com/braintree/hubot)
- uses modern Slack APIs
- can be added to service channels as a workflow for visitors to use
- workflow brings visitors through a series of questions and, where appropriate, will redirect them to the appropriate channel or website
- Visitors who are in the right place should be presented with a form to fill out detailing their issue, bot formats and posts to appropriate service channel
- Form presented to visitor is customized/prefilled based on answers to their questions thus far
#### Stretch goals
- Bot is able to record interaction (frequency? path?) and report it regularly or as needed (Other teams are doing this via the dog slack app, we may be able to replicate what they're doing turning slack interactions into GH issues for tracking, https://github.braintreeps.com/braintree/hubot/pull/128/files)
- Bot also takes over for [slug-bot](https://github.braintreeps.com/team-sdk/slug-bot)’s responsibilities
- See other project for slug-bot info
## Types in PHP
PHP 5 introduced basic type declarations, and in PHP 7 those type definitions matured to function arguments, return values, and more. The Braintree PHP SDK has not gotten as much attention as it deserves over the years, and despite officially only supporting PHP 7.3 and up, our type declarations never quite got to [where PHP devs expect](https://github.com/braintree/braintree_php/issues/305).
### The challenge
[Introduce accurate types](https://engineering.paypalcorp.com/jira/browse/DTBTSDK-1401) to the PHP SDK. Can it be done via phpdoc? Will we need separate typedefs? What’s the most maintainable way forward here? Bonus: [update all the phpdocs](https://engineering.paypalcorp.com/jira/browse/DTBTSDK-321), fix the couple of [related](https://engineering.paypalcorp.com/jira/browse/DTBTSDK-904) [bugs](https://engineering.paypalcorp.com/jira/browse/DTBTSDK-919).
### Acceptance criteria
- PHP SDK has PHP 9-compatible typing
- Passes all lint & code smell processes we run
- Types can be maintained inline _or_ thorough documentation of type maintenance process
#### Stretch goals
- All phpDocs are updated
- Find a reliable way to test against updated phpDoc going forward using CI
## Update slug-bot
Slug-bot is the SDK team’s in-house reminder robot. Right now it regularly lets us know when we have open GitHub issues in our public repos, but over the years that has turned into noise.
### The challenge
Update slug-bot to provide more meaningful info on a much smaller scale related to noise.
### Acceptance criteria
- remove the daily slugbot reminders that posts to #team-sdk-core
- update slugbot to post in relative #github-issue slack channel when Issues and PRs receive comments from the public.
- introduce slack commands for impromptu number checking, such as:
- /slugbot initial response` returns a summary of public GH issues and PRs that need an initial response
#### stretch goals
- Can we use slugbot to track/find issues that are marked for next major version? This could be a measure of determining when to prioritize this work
- Can we calculate the average number of replies in issues based on the SDK person responding? (this could prove our hypothesis of unconscious gender bias, [for more info](https://www.bbc.com/news/technology-35559439))
## Help Arachne thrive
Arachne is the analytics service that Braintree SDKs use to collect events before they’re sent off into the ether and show up in Splunk.
### The challenge
Since the team doesn't have much knowledge in Go, this app doesn't get meaningul security or feature updates. Also, there is little knowledge on the process of how logs go from Arachne to Redshift (via the analytics table).
### Acceptance criteria
- Investigate & Document the upload process from Arachne to Redshift in [knowledge](https://github.braintreeps.com/braintree/knowledge).
- Update Confluence wiki pages on Arachne analytic logs from Sumo logic (our old log service) to Splunk.
- Update any dependencies (including Go) to the latest version.
- Currently, SSL certificates are manually updated, we update Arachne to use [Cert Manager](https://github.braintreeps.com/braintree/cert-manager) so that this process happens automatically, let's get this work across the finish line.
#### stretch goals
- How difficult would it be to move to use PayPal's internal FPTI library? Let's grok FPTI a bit, get a spike branch going, and document a design proposal.
## Certificate pinning
Our PHP, Python, Ruby, and Java SDKs are "pinned" to check for certain SSL certificates when making requests to Braintree's API. Our .NET and Node SDKs, however, do not.
### The challenge
This is some low hanging fruit that can confirm some fundamentals on request/response architecture within certain frameworks. Let's spike out how difficult/easy it could be to tie the .NET and Node SDK request traffic to our API endpoint to specific SSL certificates.
### Acceptance Criteria
- .NET SDK has a PR to tie the SDK to a specific SSL certificate
- Our public developer docs have a PR with this update in information (Migration guides, Best Practices)
- Node SDK has a PR to tie the SDK to a specific SSL certificate
- If it's possible to implement or not, we have this documented in the [knowledge repo](https://github.braintreeps.com/braintree/knowledge).
#### Stretch goals
...none that I can think of...
## Java Developer Experience Improvements
Our Java SDK is one of the most heavily used by Large Enterprise merchants, and we have some long-outstanding public issues asking for improvements for a better developer experience.
### The challenge
Implement toString(), equals() and hashCode() functions to our model response object classes in the Java SDK. The challenge is: can this be added dynamically (and it be actually useful/readable?), or is the better approach to hand write this out? We're hoping it's the former.
### Acceptance Criteria
Where applicable:
- Java SDK has toString() added to model classes
- Java SDK has equals() added to model classes
- Java SDK has hashCode() added to model classes
- All additions have appropiate unit test coverage
#### Stretch goals
- CI test that added model classes, attributes have these functions added, as well.
- Have this documented as a requirement for new PRs from other engineering teams.