React & Firebase

In order to integrate React and Firebase, the following things need to happen

firebase, config, and dispatch need to be passed to ReactReduxFirebaseProvider.

The store needs to be created with the firebaseReducer

Firebase needs to be initialized with its configuration

React and Firebase can integrate nicely via Higher Order Components using the react-redux-firebase for authentication and redux-firestore for firestor

Initialize with Credentials

The following imports are needed for firebase to intialize

import firebase from 'firebase/app'

import 'firebase/auth' import 'firebase/firestore'

Attain credentials and start the application

firebase.initializeApp(fbConfig);

Create the Firebase Reducer that will fill in for combineReducers:

import { firebaseStateReducer } from 'react-redux-firebase'

import { createStore, combineReducers, compose } from 'redux'

import firebaseReducer from 'react-redux-firebase/lib/reducer'
import { createStore } from "redux";

Combine the firebase and the Firebase and Firestore Reducers

import { createStore, combineReducers, compose } from ‘redux’

createStore(combineReducers({

firebase : firebaseStateReducer,

firestore: firestoreReducer

}))

Use configureStore for some reason

function configureStore(initialState, history) { return createStore(combineReducers({ firebase : firebaseStateReducer,firestore: firestoreReducer}));}

store = configureStore()

Define Configuration Parameters

const rrfProps = { firebase, config: {

userProfile: “users”,

useFirestoreForProfile: true },

dispatch: store.dispatch,

createFirestoreInstance};

Render Provider with Store and ReactReduxFirebaseProvider

const App = () => ( <Provider store={store}> <ReactReduxFirebaseProvider {...rrfProps}> <div style={styles}> <h2>Start editing to see some magic happen {"\u2728"}</h2> <Todos /> </div> </ReactReduxFirebaseProvider> </Provider>);

Developing a System of Success

As an avid Quantified Self fanatic, a central questions that I’ve asked myself over the course of the past number of years has centered around the following: How can I build a system to improve my speed, efficiency and discipline to accomplish all my goals?


After researching and experimenting, I have compiled a list of central elements. The core philosophy is that “anything that can be measured can be improved” and that if we systemize our life, we can accomplish more.

Use Lists

There are five key lists that need to be maintained to ensure nothing is missed. Without maintenance, it’s easy to get lost in the day-to-day activities.

  1. Goals
    The first list that needs to be created and re-wrote is the goals list. Studies show that people who write their goals are far more likely to accomplish them. 
  2. Projects 
    Each goal should have a set of associated measurable projects with metrics and dates for increased accountability. There should also be a limit to the number of projects you can work on. 
  3. Recurring Tasks
    Recurring Tasks are tasks that need to be done on an ongoing basis at a certain cadence. There are tasks that need to happen on a recurring basis whether its paying a credit card every month or working out every other day.
  4. Adhoc Tasks
    These are one off tasks that need to be done on an adhoc basis by a certain date.
  5. Completed Tasks
    Track completed Tasks – Completed Tasks are important to gain insight into what you’ve been doing. It’s important to celebrate the small victories as well as the large ones.

Calculate Metrics

Metrics can be indicators of success if chosen correctly.
Metrics generate motivator since seeing a metric go up is rewarding and metrics inherently motivate us to complete a goal. As such, the primary purpose of the metrics is to drive certain behaviors .

  • Completed Tasks Over Time – Knowing the number of completed tasks allows you to see your productivity and how quickly you are completing tasks.
  • Completion Percentage of Recurring Tasks – This metric allows you to know what recurring tasks have yet to be done and need to be done. 
  • Number of Tasks over a certain age – This motiviates you not to have a task sit for too long in a certain state
  • Streak for certain metrics

Use a Timer

Keeping track of how you’re using your time may be tedious but it provides you with a heightened focus on the task at hand, since it’s more difficult to get distracted to another task. it also provides you with insight on what you’ve spent your time on.

As your time is being tracked, the end result will be a log of times. You can immediately see where your time is going and which projects are taking up most of your time. For me, it allows me to say, “I’ve spent far too much time on X, I need to spend time on Y.” In short, the the analytics produced by a digital timer  allows you to gain insight where most of your time is going. It tracks how much time is being spent in a certain task and category.

QuantifiedSelf: Hash Tags

In my tasks, I plan to utilize hash tags as a new component to track my quantified methods, because there are behaviors like ‘write’ and ‘read’ which fall within the categories of other tasks such as “QuantifiedSelf: Plan – Plan how to utilize hash tags and how to track.” By adding a hashtag at the end of it, I know to capture that task under that behavior.

My intention is that if I start tracking certain behaviors I want to encourage, I will inevitably start improving them.

A great man once said, “You can improve what you measure.”

The behaviors that I seek to improve can go on another post but writing and reading is definitely one of them

It can also help me monitor certain tasks that I might do too much of such as #code

ReactCSSTransitionGroup within React

The react library called ReactCSSTransitionGroup is a high level API that allows a react component to have a “lifecycle” of changing classes. For example, if a class to a component is “simple-class,” ReactCSSTransitionGroup will render this class as well as six other related classes by appending key words to the class name.

  1. enter
  2. enter-active
  3. enter-done
  4. exit
  5. exit-active
  6. exit-done

The two imports imperative to utilize from this library are TransitionGroup and CSSTransition. TransitionGroup wraps around CSSTransition and is utilized when multiple components need to have some type of animation.

CSSTransition takes in certain parameters including the following:

  1. key – the key for react that is required
  2. in – usually set this to true
  3. timeout –
  4. classNames – this can be a string or an array that

There are also non-essential parameters which can serve as hooks including the following:

  • onEnter
  • onEntering
  • onEntered
  • onExit
  • onExiting
  • onExited

All in all this library can produce nice design effect which can be used when a component is rendering or leaving the page.

Agile Metrics: Time to Market

The time between the created date of the story and the fix version date of the story. There is a process and a life cycle that a story goes through.

The stages of a story are as follows:

  1. Wait for Refinement (Created -> Refined) – time between idea created and idea refined
  2. Refinement (Refinement -> Ready for Sprint) – time between Under Refinement to Ready for Sprint
  3. Wait for Build (Ready for Sprint -> Build) – time between Ready for Sprint to the Sprint State
  4. Build (Build -> Closed) – Time to hit done, closed, completed, fixed, accepted, resolved
  5. Wait for Production (Closed -> Fix Version Date) – Time between build completion and the fix version date

Agile Methodology

The Agile methodology has been around for nearly two decades, and it is no doubt the prominent school of thought around software development. Its focus is mainly on shortening the feedback loop between the consumer and the developer.

This can be seen in one of its most prominent practices which is to write a user story (a description written from the consumer’s point of view).

There are a wide variety of metrics that track the success and adoption of the Agile Methodology, which include the following:

  1. Time to Market – demonstrates speed from idea to execution
  2. Time to Market by Stage – pin points where the bottle neck is
  3. Velocity Stability Coefficient – shows consistency in the team execution
  4. Story Points by Team Member – shows productivity on a team member basis
  5. Sprint Churn (Added, Deleted, Remained) during sprint – demonstrates strength of planning
  6. JIRA entries ready for a sprint -demonstrates strength of planning
  7. Defects Per Story Point – demonstrates the quality of code
  8. Code Quality – demonstrates the quality of code
  9. Unit Test Coverage – ensures all elements of code have been tested
  10. Completion Percentage of Forecast – demonstrates strength of planning
  11. JIRA Items closed in last 2 days of the sprint – demonstrates strength of planning

Outside Work

As a person with many interests, I like to engage in outside work activity which may or may not generate revenue (whether that be selling merchandise on Amazon, posting my property on Airbnb, or mentoring local college students on their pre-professional journey).

With that being said, it’s important to be cognizant of the corporate policies to ensure that I’m compliant in pursuing my outside of work activities.

Moreover, “an at-will employee can be fired at any time, as long as the reason isn’t illegal” as mentioned by Lisa Guerin (a lawyer from NoLo), which means its very important to stay in compliance.

I’d like to highlight some of key points made by an exemplary Company Policy from JP Morgan Chase

Allow your activities, or the time you spend on them, to interfere with your job performance

This should be an obvious point because anything deliberately hurting your work productivity would be a major red flag.

Engage in an activity, investment or business opportunity that is related to your role or responsibilities at JPMorgan Chase