Skip to content

Latest commit

 

History

History
751 lines (488 loc) · 38.2 KB

File metadata and controls

751 lines (488 loc) · 38.2 KB

Mobile Developer

Company best practices

  • You know how to share secret values with other employees. 📚
  • You know how to use the command line to switch between users
  • You know how to share secret values externally 📚
  • You create pull requests with proper name and description 📚
  • You squash merge your pull requests 📚
  • You understand the pros and cons of git rebase vs git merge 📚
  • You name your commits properly 📚
  • You review PRs carefully and leave your comments 📚
  • You know how to configure rules in a repository for merging to specific branches (master, develop)
  • You add proper label in pull requests
  • You create your branches under the proper folder (feature, fix, hotfix)
  • You know how to create and reference issues
  • You know how to verify when a build check failed
  • You know how to create GitHub Wiki pages
  • You know how to verify when a build check failed
  • You know how to reference a Jira ticket in your commit
  • You use Slack statuses in line with company policy (remote working, vacationing, in a meeting, etc)
  • You know how to create groups and channels
  • You know how to create Confluence pages
  • You know how to give praise and add talk topics to a 1:1 meeting
  • You know how to create goals and mark them as complete
  • You know how to create tickets and write comments
  • You can configure local email client
  • You can configure email signatures

React

  • You know how to write a function component. 📚
  • You know the difference between function and class components. 📚
  • You know how to define and modify local component's state. 📚
  • You know what Virtual DOM is and how React uses it to render components. 📚
  • You know how to use element events and how to incorporate them in React lifecycle 📚
  • You know component's lifecycle and know how to use each of the phases. 📚
  • You know and can use Context API 📚
  • You can use refs to bind to a native DOM element and interact with it in component lifecycle 📚
  • You understand concepts of higher order components and render functions, as well as their differences, pros and cons. 📚
  • You know how to prevent components from re-rendering. 📚
  • You know how to reconcile global state with local component's state
  • You know how and when to use portals. 📚
  • You can use useState and useEffect hooks. 📚
  • You know how hook dependency array works. 📚
  • You know how to write a custom React hook. 📚
  • You understand pros and cons of using useCallback hook. 📚
  • You know how to incorporate react-use hooks in your component 📚
  • You understand the advantages/disadvantages of the API compared to Lodash
  • You can explain how React.render function works. 📚
  • You can explain React.createPortal works. 📚

[Optional] Components

[Optional] downshift

  • You used it in a project 📚

[Optional] react-day-picker

  • You used it in a project

React-native

https://reactnative.dev/docs/touchablehighlight

https://reactnative.dev/docs/touchableopacity

https://reactnative.dev/docs/touchablewithoutfeedback

https://reactnative.dev/docs/pressable

  • You know how to use and style touchable components
  • You know the difference between touchable components
  • You know when to use FlatList, SectionList and ScrollView
  • You know how to optimize FlatList and SectionList for large data sets using optimization props eg. removeClippedSubviews, getItemLayout, keyExtractor 📚
  • You know how to use View, Text, TextInput, Button, Switch, ActivityIndicator, Modal
  • You know how to use RefreshControl for scrollable views 📚
  • You know how to use Image component
  • You know how to handle all the Image events
  • You can create animated Image loader
  • You know how to use images from app's resources
  • You know how to control image cache on iOS
  • You know how to show alert
  • You know how to render proper alert button variant on iOS and Android
  • You know how to get user's preffered color scheme
  • You know how to listen on color scheme change
  • You can handle listening on app state
  • You know Android-only events
  • You can handle listening on window size
  • You know when and how to use runAfterInteractions
  • You can hide keyboard
  • You can listen on keyboard events
  • You know how to animate layout with keyboard
  • You know how to open url
  • You know how to configure app deep linking
  • You know how to get an initial deep link which was used to open an app
  • You know how to listen on deep links when the app is opened in foreground
  • You know how to handle app navigation using received deep link
  • You know how to create pan responder
  • You know how to handle multiple pan responders
  • You can prepare an animation using pan responder events
  • You know how to define hardware Android back button behavior

https://reactnative.dev/docs/animated

https://reactnative.dev/docs/animatedvalue

https://reactnative.dev/docs/animatedvaluexy

https://reactnative.dev/docs/transforms

https://reactnative.dev/docs/easing

  • You know how to create decay animation
  • You know how to create spring animation
  • You know how to create timing animation with easing
  • You can create animatable component
  • You know how to compose animations
  • You know how to use Animated.Value
  • You know how to use native driver
  • You know how to use Animated.Event
  • You know how to interpolate values
  • You know how to do Animated.Value calculations
  • You know how to define stylesheets per component
  • You know how to handle media queries for stylesheets
  • You can manually link iOS library 📚

Application state management

  • You can describe full Redux flow 📚
  • You know how to dispatch Redux action (outside React context)
  • You know what it does and can use combineReducers function
  • You know how to apply a middleware / enhancer when creating redux store
  • You know what is a difference between middleware and enhancer
  • You know how to apply selector functions to useSelector hook. 📚
  • You know how to dispatch actions from React component. 📚
  • You can use one of the listed toolset libraries to create reducers, action types, and action creators more efficiently
  • You know how to create a reducer. 📚
  • You know how to create an action creator 📚
  • You understand how to leverage the fact that action creators serialize to action's type string.
  • You know how to define a reducer function for a specific action type.
[Optional] reduxsauce
  • You know how to create reducers
  • You can create your own action creators and action types.
  • You know how to persist part of the state tree to local storage
  • You understand benefits of using immutable data structures in Redux applications 📚
  • You know how to use at least one of the libraries that provide immutable data structures in redux state 📚
  • You know how to create a reducer that uses immer 📚
  • You know how to convert immutable structure to regular JavaScript object
  • You know the difference between only changing state object and returning a changed state object
  • You can explain how immer works internally.

[Optional] Immutable.js

  • You know how to create an immutable structure 📚
  • You know how to read data from the immutable structure
  • You know how to create a new data structure with modified state out of an existing one
  • You know how to use the store with immutable structures using redux-immutable 📚
  • You know how to convert a json structure into immutable structure, and vice-versa
  • You know how to manipulate big structures and which operations you should avoid in order to keep performance
  • You know how to read data from the immutable structure
  • You know how to create a new data structure with modified state out of an existing one
  • You understand the difference between immutable.js and seamless-immutable 📚
  • You know how to transform regular structures into seamless immutable structures, and vice-versa
  • You know how to reconcile native functions (map, sort, etc) with seamless immutable functions (flatMap, merge, sort, etc)
  • You know how to create a selector with createSelector function 📚
  • You know how to create a selector that uses multiple other selectors as an input.
  • You understand the concept of side effects 📚
  • You know how to take a side effect and dispatch an action based on it 📚
  • You know how to run asynchronous functions (e.g. fetch) after something dispatches an action
  • You know how to select data from Redux state using selector functions inside sagas. 📚
  • You understand the concept of Javascript generators 📚
  • You know how to wait for an another action from inside the running saga. 📚
  • You know to sequence Sagas and how to run them in parallel 📚
  • You can name eventChannel use cases and know how to implement a saga using it. 📚
  • You can name actionChannel use cases and know how to implement a saga using it. 📚
  • You know how to create your own routine
  • You know how to promisify a routine
  • You know how to wait for a routine fulfillment inside a component
  • You understand the advantages of standardizing action type's name
  • You know how to manipulate the payload with payloadCreator
  • You know how to enhance the payload with metaCreator

HTTP

  • You know what cookies are
  • You know what HTTP headers are
  • You can explain what CORS is and understand its shortcomings
  • You can explain what HTTP only cookie is
  • You know which parts of the HTTPS request is encrypted
  • You know different values for content-type header and understand when to use them
  • You know how to create an HTTP request using native fetch 📚
  • You know how to set HTTP headers in a request
  • You know how to read HTTP headers sent in a response
  • You know how to handle errors returned in HTTP response 📚
  • You know how to cancel a request
  • You know how to use axios to send HTTP request to an API endpoint 📚
  • You know how to set HTTP headers in a request
  • You know how to handle errors returned in HTTP response 📚
  • You can configure axios to have a predefined base url for making requests
  • You know how to read HTTP headers sent in a response
  • You know to add meta data (for example JWT token) to the request headers
  • You know how to transform data with transformResponse and transformRequest
  • You know how to serealize parameters with paramsSerializer
  • You know how to use interceptors
  • You know how to cancel a request
  • You know how to connect to a websocket connection using either a native configuration or an existing library

[Optional] pusher-js

  • You know how to configure Pusher JS
  • You know how to subscribe/unsubscribe to a channel
  • You know how to bind/unbind to events
  • You know how to use humps to camelize or decamelize strings and object's keys
  • You know how to split strings and object's keys containing numerical values
  • You know how to parse URLs
  • You know how to create a query string out of an object
  • You know how to define an object entity schema
  • You know how to normalize data returned from server
  • You can explain what are the benefits of using normalizr library
  • You use descriptive status codes instead of number literals

Animations

  • You know how to use Value
  • You know how to run timing animation with easing
  • You know how to run decay animation
  • You know how to run spring animation
  • You know how to create animation using native events
  • You know how to create animation using gestures
  • You know when and how to use Animated.Code
  • You know how to manage clock
  • You know how to use clock methods
  • You can create animation block with conditions and calculations
  • You know how to correctly configure library and import json animations
  • You know how to run animation using Animated.Value
  • You know how to create loop animation

Internationalization

  • You know how to configure react-intl with react-native
  • You can define multiple languages
  • You can handle language change
  • You know how to get device locale
  • You know and use React-intl components 📚
  • You know how to create messages files using defineMessage api 📚
  • You know how to use useIntl hook
  • You know how to format a message passing values and date-time stamps
  • You know how to pluralize messages based on a passed value

Navigation

  • You know how to create stack navigator
  • You know how to create tab navigator
  • You know how to create drawer navigator
  • You know how to navigate between screens
  • You know how to pass parameters between screens
  • You know how to listen screen focus

Components

  • You know how to handle automatic scroll to the form inputs on focus
  • You know how to navigate between form fields
  • You know how to render LargeList with header and footer
  • You know how to use pull to refresh
  • You can listen on scroll and scroll to proper section
  • You can render list with/ without section headers
  • You know how to display image with proper resize mode
  • You know how to handle image loader for cached images
  • You know how to preload images
  • You know how to prioritize images loading

Common Application Modules

  • You know how to correctly configure splash screen showing/hiding
  • You know what type of images you should use to display splash screen correctly with a proper image fill type
  • You know how to log events
  • You know how to set user properties
  • You know how to log predefined events
  • You can handle screen tracking
  • You can configure Appsflyer SDK
  • You know how to log conversion events
  • You can configure Google SignIn
  • You can handle sign in process
  • You can handle sign in process
  • You know how to revoke access and sign out
  • You can use Google SignIn button
  • You know how to define sign in scopes
  • You can configure FB sdk
  • You know how to login user with correct permissions
  • You know how to revoke access and logout
  • You know how to sign in anonymously
  • You know how to sign in using e-mail and password
  • You know how to sign out
  • You know how to login user with correct permissions
  • You know how to listen on credentials change
  • You can use Apple button
  • You know how to share content
  • You know how to share images
  • You know how to share files
  • You know how to define share to the single social app
  • You know how to read and write async storage data
  • You know how to use async storage with redux-persist

Date & Time

  • You know how to create a Date object for a specific date 📚
  • You know how to compare native date objects
  • You know what ISO 8601 standard format is and how to parse it to a date object 📚
  • You know what unix timestamp is and how to parse it to a date object 📚
  • You know how to create a date-fns date object for specific date 📚
  • You know how to format and display a date object using standard format strings 📚
  • You know how to convert date into a different timezone (usually user's local timezone)
  • You know how to manipulate, compare date objects

[Optional] react-datetime

  • You know how to format and display a date object using standard format strings
  • You know how to convert date into a different timezone (usually user's local timezone)
  • You know how to manipulate and compare date objects

[Optional] moment.js

  • You know how to format and display a date object using standard format strings
  • You know how to convert date into a different timezone (usually user's local timezone)
  • You know how to manipulate and compare date objects

[Optional] dayjs

  • You know how to format and display a date object using standard format strings
  • You know how to convert date into a different timezone (usually user's local timezone)
  • You know how to manipulate and compare date objects

Versioning

  • You know how to run script updating an app version and a build version

Testing

  • You know how to test custom React hooks.
  • You know how to test a selector function.
  • You know how to test components and functions
  • You know how to mock functions and global objects
  • You know how to add snapshot testing
  • You know how to add and configure Jest in the build tools
  • You know how to install and configure it in the build tools
  • You know how to query for the component you want to test according to library best practices
  • You know how to mock server's response
  • You know how to test the redux store actions
  • You can install and configure it in a project
  • You can test if an HTML node has the proper style
  • You can create snapshots with readable classes and proper styles properties
  • You know how to test when an action has been put for processing
  • You know how to provide an initial state for a saga execution
  • You know how to check if the expected action has been called
  • You know how to mock API calls with or without payload
  • You know how to set configuration header's and meta data
  • You can write assertions to check if API endpoint has been called with proper data
  • You know how to mock Date object to return specific value in test environment

Performance

  • You know how to enable Hermes on Android
  • You know profits of using Hermes

Development tools

  • You know how to use React/Redux dev tools
  • You know how to use Network Inspect
  • You know how to use debugger with a real device
  • You know how to run app on a real device
  • You know how to run an app on a simulator
  • You know how to manage app schema
  • You know how to change Team, Certificate and Provisioning Profile
  • You know how to build app ready for distribution
  • You know how to run app on a real device
  • You know how to run an app on an emulator
  • You know how to manage keystores
  • You know how to build app ready for distribution

Crash reporting / Monitoring

  • You know how to set tags
  • You know how to add breadcrumbs
  • You know how to capture exception
  • You know how to capture custom message
  • You know how to view and analyze crash reports
  • You know how to set user attributes
  • You know how to report errors
  • You know how to view and analyze crash reports

Tools

  • You know how to extract style values (geometry, colours, fonts, etc.) from a design project 📚
  • You know how to extract image assets from a design project
  • You know how to extract vector icon asset from a project
  • You know how to extract style values (geometry, colours, fonts, etc.) from a design project
  • You know how to extract image assets from a design project
  • You know how to extract vector icon asset from a project

[Optional] Invision

  • You know how to extract style values (geometry, colours, fonts, etc.) from a design project
  • You know how to extract image assets from a design project
  • You know how to extract vector icon asset from a project

[Optional] Adobe XD

  • You know how to extract style values (geometry, colours, fonts, etc.) from a design project
  • You know how to extract image assets from a design project
  • You know how to extract vector icon asset from a project

Contribution

We are very open to contributions to extend or change the requirements based on your gut and experience. To contribute you can use a pull request which will be later validated by our technical team and added to the main docs.

If you will spot any issues please add them in the Issues section.

Credits

This page is maintained by the 🔹 Flairs.ai and 🇵🇱 Apptension teams.

If you would like to create a dedicated Developer Handbook for your company, you can e-mail us 👉 contact@flairs.ai

License

MIT License

© 2020 Flairs Sp. z o.o.

Built and maintained by Flairs and Apptension.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.