# README

![](https://www.bam.tech/hs-fs/hubfs/Identity/Logo.jpg?t=1501080758406\&width=200\&name=Logo.jpg)

## Standards and Methods of Operation

> :warning: We are in process of migrating all the content to a private gitbook. The public content in this repository will be converted to blog articles for better acessibility.

### About us

We are mobile developers, based in Paris, working with hybrid and cross platform technologies.

Our goal is to help the client's business succeed, by solving their problems together using agile and lean, and developing the best product to satisfy the client's user needs.

Learn more about us [in our french website](http://www.bam.tech/).

### Why this repository

Part of lean philosophy is to standardize best practices and spread them out.

Every time a developer is struggling doing a part of their job (e.g.: changing the application icon, deploying features very fast using code push, etc...), we help them solve their problem and then together write either a \[Standard] or a \[Mode of Operation].

### Contributing

* **READ FIRST:** [\[MO\] Contributing](contributing/contributing.mo)
* [\[Standard\] Writing a standard](contributing/standard.s)
* [\[Standard\] Writing a method of operation](contributing/mo.s)

### Backend

#### Django

* [\[MO\] Get started with Django](backend/django/getting-started.mo)
* [\[MO\] Create complex user models with Django](backend/django/create-user-model.mo)
* [\[MO\] How to deploy your Django back-end to AWS](backend/django/deploy-to-aws.mo)
* [\[MO\] Create a model and an api route](backend/django/create-model-and-api.mo)

#### GraphQL JS

* [\[MO\] Kick start a JS GraphQL 3 layers API with Apollo-server, Dataloader and Knex](backend/graphql-js/getting-started-with-apollo-server-dataloader-knex.mo)

#### Node JS

* [\[Standard\] Add multiple environments configuration on loopback](backend/node-js/add-multiple-environments-configuration-on-loopback.s)
* [\[Standard\] Handle Errors and Exceptions in Javascript](backend/node-js/handle-errors-and-exceptions-in-javascript.s)

### Code Quality

* [\[MO\] Test your React and React Native components' state with Jest (without Enzyme)](code-quality/components-state-testing.mo)
* [\[Standard\] Pull Request Template](code-quality/pull-request-template.s)
* [\[Standard\] Test files indentation](code-quality/test-files-indentation.s)
* [\[MO\] How to use mocks with jest (\~2min)](code-quality/mock-with-jest.mo)
* [\[MO\] Set up Detox with Jest and automate it on Bitrise _(\~ 1h)_](react-native/tests/setup-detox-jest.mo)
* [\[Standard\] Handle Errors and Exceptions in Javascript](backend/node-js/handle-errors-and-exceptions-in-javascript.s)

### Flowtype

* [\[Standard\] Flowtype](flowtype/flowtype.s)

### Project Standards

* [Project Success](project-standards/project-success/index)
* [Technical Agility](project-standards/technical-agility/index)
* [Taking over an existing project](project-standards/taking-over-project/index)

### Successful Sprint

#### Coding

* [\[Standard\] Good practices to resolve a ticket](successful-sprint/coding/plan-your-ticket-to-improve-efficency.s)

### Scrum

* [\[Standard\] Timebox](scrum/timebox.s)

### React Native

#### Setup

* [\[MO\] Adding a native module](react-native/setup/add-native-module.mo)
* [\[MO\] Setup & Deploy New Project to Staging](react-native/setup/setup-and-deploy-new-project-to-staging.mo)
* [\[MO\] Setup & Deploy New Project to Staging with HockeyApp (Deprecated)](react-native/setup/setup-and-deploy-new-project-to-staging-with-hockeyapp.mo)
* [\[MO\] Deploy Project to Production - Only iOS Testflight](react-native/setup/deploy-project-to-production)
* [\[MO\] Deploy Project to Production - Android Play Store](react-native/setup/deploy-to-production-android.mo)
* [\[MO\] Setup Code-Push on an existing project](react-native/setup/setup-code-push.mo)
* [\[MO\] Add a deploy script to your app](react-native/setup/deploy-script.mo)
* [\[MO\] Add Cocoapods to your project (\~10min)](react-native/setup/add-cocoapods.mo)
* [\[Article\] Setup your React Native project icon](https://blog.bam.tech/developper-news/change-your-react-native-app-icons-in-a-single-command-line)
* [\[MO\] Use http links in react native](react-native/use_http_links_in_react_native.mo)
* [\[MO\] Setup Firebase with multiple environments (\~1h)](react-native/setup/setup_firebase_multiple_envs.mo)
* [\[MO\] Setup Facebook login](react-native/setup/setup-facebook-login.mo)
* [\[MO\] Upgrade React Native](react-native/update/upgrade-react-native.mo)
* [\[MO\] Setup Stripe Payment Form](react-native/setup/setup-stripe-dev-standard.mo)
* [\[MO\] Patch React Native Android](react-native/setup/patch-react-native-android.mo)
* [\[MO\] Remove Default Android Permissions Android](react-native/setup/remove-unnecessary-android-permissions.mo)
* [\[Standard\] Override an existing app](react-native/setup/overriding-existing-app.s)
* [\[MO\] Set up Detox with Jest and automate it on Bitrise _(\~ 1h)_](react-native/tests/setup-detox-jest.mo)

#### Architecture

* [\[Standard\] Default stack](react-native/architecture/default-stack.s)
* [\[Standard\] Project Architecture](react-native/architecture/project-architecture.s)
* [\[Standard\] File Naming](react-native/architecture/file-naming.s)
* [\[Standard\] Handle Errors and Exceptions in Javascript](backend/node-js/handle-errors-and-exceptions-in-javascript.s)

#### Animations

* [\[Standard\] React Native animations](react-native/animations/react-native-animations.s)

#### Debugging

* [\[MO\] Debug Javascript Code](react-native/debugging/debug-javascript.mo)
* [\[MO\] Debug on Android](react-native/debugging/debug-native-android.mo)
* [\[MO\] Debug Native iOS Code](react-native/debugging/debug-native-ios.mo)
* [\[MO\] Debug Javascript on an iOS Device](react-native/debugging/debug-javascript-ios-device.mo)
* [\[MO\] Debug Network calls](react-native/debugging/debug-network-calls.mo)
* [\[MO\] Debug a React Native WebView](react-native/debugging/debug-webviews.mo)
* [\[MO\] Handle gradle dependencies versions clashes](react-native/debugging/handle-gradle-dependencies-clash.mo)
* [\[MO\] Debug two iOS apps simultaneously](react-native/debugging/debug-two-ios-apps-simultaneously.mo)
* [\[MO\] Get iOS Logs](react-native/debugging/get-ios-logs.mo)
* [\[MO\] How to analyse and react to a bug on a React-Native project](react-native/debugging/analyse-bug.mo)

#### React

* [\[Standard\] Binding functions in a React component](react-native/react/binding-functions-in-react-component.s)
* [\[MO\] Enable component overflow on Android](react-native/react/enable-overflow-android.mo)
* [\[Standard\] Wrinting a Component](react/component.s)

#### Features

* [\[Article\] Add a sharing feature to the app](https://blog.bam.tech/developper-news/sharing-content-with-react-native)
* [\[MO\] Setup DeepLinking with react-navigation](react-native/features/deep-linking)
* [\[MO\] Lock the device orientation](react-native/features/lock-device-orientation.mo)
* [\[MO\] Add icon(s) with icomoon](react-native/features/icomoon.mo)
* [\[MO\] Preloading MobX data with AsyncStorage](react-native/features/asyncstorage.mo)
* [\[MO\] Implement offline with MobX](react-native/features/offline-mobx.mo)
* [\[MO\] Implement offline with Redux](react-native/features/offline-redux.mo)
* [\[Standard\] Implementing a clean logout](react-native/features/clean-logout.s)
* [\[MO\] Get the size or position of a component with onLayout](react-native/react/get-element-size-or-position-with-onlayout.mo)

#### Package Dependencies

* [\[MO\] Handle dependencies with Yarn override](react-native/package-dependencies/handle-dependencies-with-yarn-override.mo)

#### React-Navigation

* [\[MO\] Unmount a component on page change _(\~10 min)_](react-native/react-navigation/unmount-compoenent-on-page-change.mo)

#### Firebase

* [\[MO\] Good practices to debug events in Firebase](react-native/firebase/debug-events.mo)

### React

#### Redux

* [\[MO\] Custom fields with redux-form](react/redux/custom-redux-form-field.mo)
* [\[Package\] Factorise common Redux async boilerplate with redux-async-actions-factory](https://github.com/bamlab/redux-async-actions-factory)
* [\[Package\] Gain development speed on Redux with redux-enhancer](https://github.com/bamlab/redux-enhancer)
* [\[MO\] Pass props to a container](react/redux/pass-props-to-container.mo)

#### Lifecycle

* [\[MO\] Trigger an action on props update](react/lifecycle/trigger-action-on-props-update.mo)

### Editors

#### Visual Studio Code

* [\[MO\] Setup VSCode](editors/vscode/setup-vscode.mo)

### Security

* [\[MO\] 2-Factor Authentication](security/2fa.mo) (15 min)
* [\[MO\] Import certificates into Match](security/import_certificates_match.mo) (30 min)

### Front and Back-end Performance

* [\[Standard\] Performance decision flow](performance/performance-decision-flow.s)
* [\[Standard\] React Native performance](performance/front/react-native-performance.s)
* [\[MO\] Investigate front-end performance issues](performance/front/how-to-investigate-performance.mo)
* [\[MO\] Investigate back-end performance issues](performance/backend/how-to-investigate-performance.mo)

### OPS

* [\[MO\] Setup HTTPS on your docker environment](ops/docker/deploy-with-https.mo) (10 min)

### License

[![Creative Commons License](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)](http://creativecommons.org/licenses/by-nc-sa/4.0/)\
BAM Standards is licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-nc-sa/4.0/).

### Contributors

[![All Contributors](https://img.shields.io/badge/all_contributors-30-orange.svg?style=flat-square)](#contributors)

Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):

|        <p><a href="http://bamlab.fr/"><img src="https://avatars0.githubusercontent.com/u/1863461?v=4" alt=""><br>Yann Leflour</a><br><a href="#blog-yleflour">📝</a> <a href="#infra-yleflour">🚇</a> <a href="#review-yleflour">👀</a></p>        | <p><a href="https://twitter.com/TychoTa"><img src="https://avatars2.githubusercontent.com/u/13785185?v=4" alt=""><br>TychoTa</a><br><a href="#blog-tychota">📝</a> <a href="#infra-tychota">🚇</a> <a href="#review-tychota">👀</a></p> |           <p><a href="https://github.com/kraynel"><img src="https://avatars3.githubusercontent.com/u/4620699?v=4" alt=""><br>Kevin Raynel</a><br><a href="#blog-kraynel">📝</a> <a href="#review-kraynel">👀</a></p>          | <p><a href="https://github.com/xavierlefevre"><img src="https://avatars3.githubusercontent.com/u/14938214?v=4" alt=""><br>Xavier Lefèvre</a><br><a href="#blog-xavierlefevre">📝</a> <a href="#review-xavierlefevre">👀</a></p> |   <p><a href="https://github.com/Minishlink"><img src="https://avatars2.githubusercontent.com/u/82368?v=4" alt=""><br>Louis Lagrange</a><br><a href="#blog-Minishlink">📝</a> <a href="#review-Minishlink">👀</a></p>  |        <p><a href="http://blog.bam.tech"><img src="https://avatars0.githubusercontent.com/u/4534323?v=4" alt=""><br>Alexandre Moureaux</a><br><a href="#blog-Almouro">📝</a> <a href="#review-Almouro">👀</a></p>       |          <p><a href="https://github.com/DariusAf"><img src="https://avatars3.githubusercontent.com/u/15544105?v=4" alt=""><br>Darius Afchar</a><br><a href="#blog-DariusAf">📝</a> <a href="#review-DariusAf">👀</a></p>         |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|                    <p><a href="https://github.com/Arlevoy"><img src="https://avatars3.githubusercontent.com/u/26787996?v=4" alt=""><br>Arthur Levoyer</a><br><a href="#blog-Arlevoy">📝</a> <a href="#review-Arlevoy">👀</a></p>                   |                  <p><a href="http://www.compilgames.net"><img src="https://avatars0.githubusercontent.com/u/1280130?v=4" alt=""><br>Florian Rival</a><br><a href="#blog-4ian">📝</a> <a href="#review-4ian">👀</a></p>                  |       <p><a href="http://nicolas.djambazian.fr"><img src="https://avatars3.githubusercontent.com/u/905860?v=4" alt=""><br>Nicolas Djambazian</a><br><a href="#blog-Nhacsam">📝</a> <a href="#review-Nhacsam">👀</a></p>       |             <p><a href="https://github.com/tpucci"><img src="https://avatars1.githubusercontent.com/u/16262904?v=4" alt=""><br>Thomas Pucci</a><br><a href="#blog-tpucci">📝</a> <a href="#review-tpucci">👀</a></p>            |  <p><a href="https://github.com/bourliam"><img src="https://avatars2.githubusercontent.com/u/29543919?v=4" alt=""><br>Maxime Bourliatoux</a><br><a href="#blog-bourliam">📝</a> <a href="#review-bourliam">👀</a></p>  |        <p><a href="https://github.com/AliceB08"><img src="https://avatars0.githubusercontent.com/u/30256638?v=4" alt=""><br>AliceB08</a><br><a href="#blog-AliceB08">📝</a> <a href="#review-AliceB08">👀</a></p>       |                               <p><a href="https://github.com/AuroreM"><img src="https://avatars0.githubusercontent.com/u/15011364?v=4" alt=""><br>AuroreM</a><br><a href="#blog-AuroreM">📝</a></p>                              |
|                    <p><a href="https://github.com/Miniplop"><img src="https://avatars0.githubusercontent.com/u/15800180?v=4" alt=""><br>Kevin Jean</a><br><a href="#blog-Miniplop">📝</a> <a href="#review-Miniplop">👀</a></p>                    |              <p><a href="https://github.com/jfaverie"><img src="https://avatars3.githubusercontent.com/u/16465614?v=4" alt=""><br>Jean Faverie</a><br><a href="#blog-jfaverie">📝</a> <a href="#review-jfaverie">👀</a></p>             |   <p><a href="https://github.com/suryaambrose"><img src="https://avatars1.githubusercontent.com/u/8100843?v=4" alt=""><br>Surya Ambrose</a><br><a href="#blog-suryaambrose">📝</a> <a href="#review-suryaambrose">👀</a></p>  |        <p><a href="https://github.com/AmauryLiet"><img src="https://avatars3.githubusercontent.com/u/9596435?v=4" alt=""><br>Amaury Liet</a><br><a href="#blog-AmauryLiet">📝</a> <a href="#review-AmauryLiet">👀</a></p>       |   <p><a href="https://github.com/lechinoix"><img src="https://avatars3.githubusercontent.com/u/10167015?v=4" alt=""><br>Nicolas Ngomai</a><br><a href="#blog-lechinoix">📝</a> <a href="#review-lechinoix">👀</a></p>  |   <p><a href="https://github.com/juliennassar"><img src="https://avatars1.githubusercontent.com/u/13121639?v=4" alt=""><br>Julien</a><br><a href="#blog-juliennassar">📝</a> <a href="#review-juliennassar">👀</a></p>  | <p><a href="https://github.com/SelimBenAmmar"><img src="https://avatars0.githubusercontent.com/u/19991302?v=4" alt=""><br>Selim Ben Ammar</a><br><a href="#blog-SelimBenAmmar">📝</a> <a href="#review-SelimBenAmmar">👀</a></p> |
| <p><a href="https://github.com/GuillaumeRenouvin"><img src="https://avatars1.githubusercontent.com/u/15981192?v=4" alt=""><br>GuillaumeRenouvin</a><br><a href="#question-GuillaumeRenouvin">💬</a> <a href="#review-GuillaumeRenouvin">👀</a></p> |              <p><a href="https://github.com/yassinecc"><img src="https://avatars0.githubusercontent.com/u/31844581?v=4" alt=""><br>yassinecc</a><br><a href="#blog-yassinecc">📝</a> <a href="#review-yassinecc">👀</a></p>             | <p><a href="http://orta.io"><img src="https://avatars2.githubusercontent.com/u/49038?v=4" alt=""><br>Orta</a><br><a href="https://github.com/bamlab/dev-standard/commits?author=orta">📖</a> <a href="#ideas-orta">🤔</a></p> |             <p><a href="https://github.com/taboulot"><img src="https://avatars2.githubusercontent.com/u/9041221?v=4" alt=""><br>Clément</a><br><a href="#blog-taboulot">📝</a> <a href="#review-taboulot">👀</a></p>            | <p><a href="https://github.com/emilienchvt"><img src="https://avatars0.githubusercontent.com/u/18351439?v=4" alt=""><br>emilienchvt</a><br><a href="#blog-emilienchvt">📝</a> <a href="#review-emilienchvt">👀</a></p> | <p><a href="https://github.com/pleportz"><img src="https://avatars2.githubusercontent.com/u/20668374?v=4" alt=""><br>Pierre-Louis Le Portz</a><br><a href="#blog-pleportz">📝</a> <a href="#review-pleportz">👀</a></p> |               <p><a href="https://github.com/Samox"><img src="https://avatars0.githubusercontent.com/u/6906559?v=4" alt=""><br>Sammy Teillet</a><br><a href="#blog-Samox">📝</a> <a href="#review-Samox">👀</a></p>              |
|            <p><a href="https://github.com/louiszawadzki"><img src="https://avatars2.githubusercontent.com/u/8973379?v=4" alt=""><br>louiszawadzki</a><br><a href="#blog-louiszawadzki">📝</a> <a href="#review-louiszawadzki">👀</a></p>           |      <p><a href="https://github.com/justinemignot"><img src="https://avatars2.githubusercontent.com/u/33832992?v=4" alt=""><br>justinemignot</a><br><a href="#blog-justinemignot">📝</a> <a href="#review-justinemignot">👀</a></p>     |                                                                                                                                                                                                                               |                                                                                                                                                                                                                                 |                                                                                                                                                                                                                        |                                                                                                                                                                                                                         |                                                                                                                                                                                                                                  |

This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!
