can "Jon" Nahum

Full Stack Engineer

Invoicing Capabilities and Invoice Mgmt

SBSEG

whoami (how did i get here)

  • Born and raised in Izmir, Turkey (1989)
  • Studied finance in the East Coast (August 2008)
  • Worked as an investor (June 2012)
  • Didn't like it - studied computer science (August 2014)
  • Moved to Israel (July 2016)
  • Joined Intuit (December 2017)
  • Got Married (September 2018)
  • Relocated to MTV (September 2019)

whoami (seriously tho)

  • Husband
  • Son (only child)
  • Friend
  • Cat dad
  • Guitarist
  • Setter (Volleyball)
  • Windsurfer
  • Mostly plant-based eater

what do i do?

  • Full Stack Engineer
  • Node.js and JavaScript - comfort zone
  • TypeScript - advocate (I'm on YouTube! I think)
    • Deno?
  • React, Redux
  • Svelte & Sapper
  • Go Programming Language - love it!
  • GraphQL (!)
  • Kafka (!)

what do i do at intuit?

  • Joined Mint Bills in Israel (Dec 2017)
  • Team got reorganized
  • Moved to SBSEG Counterpart Portal (April 2018)
  • Rewrote Counterpart Portal (SSR, Next.js)
  • Released, ramped up, monitored, owned, maintained
  • Invoice Management (September 2019)
  • Developing features: experiments and ramps

what do i want to do?

  • Write Code
  • Learn more ways to build technology
  • Teach technology
  • Power prosperity
    • Data
    • Language
    • Truth
    • Data => Information => Knowledge => Wisdom

craft presentation

#1 - wallet widget

Wallet widget project

  • Implement payment method forms
  • CRUD with Wallet Service
    • Network calls
    • Server-side validations
    • Logic around authenticated users' methods
  • Wallet team has a widget
  • Only works on QBO App Shell
  • Cannot decompose and tree-shake

Wallet widget project

Proposed initiative:

  • Break down the existing wallet widget into parts:
    1. ​GraphQL queries and mutations
    2. Data objects
    3. Validations (same as server-side)
    4. Form logic
    5. UI (look and feel of offering)
  • Power existing wallet widget
  • Build the Counterpart Portal "widget"
  • Publish to other offerings

Wallet widget project

Proposed architecture:

  • Lerna (monorepo pattern)
  • TypeScript
  • GraphQL => TS codegen
  • publish packages to Intuit's npm

This way, the widget can use the packages, Counterpart Portal can use the packages, new versions can be built easily

Wallet widget project

Example: Counterpart Portal

Data Obj

GraphQL

Validations

Form

Counterpart

Portal

UI Comps

Wallet widget project

Example: QBO Take Pay Page

Data Obj

GraphQL

Validations

Form

QBO

(Shell)

UI Comps

Wallet widget project

Example: TurboTax

Data Obj

GraphQL

Validations

Form

TT Online

(Shell)

UI Comps

Advantages

  • Same repo (monorepo)
  • CI / CD
  • Pick and choose (tree shaking at its best)
  • Maintainable
  • Easy for contribution

shut up and show me some code

RESULTS

  • WORKED!
  • Currently in Counterpart Portal in prod
  • SBSEG Payments Architect approved
  • Wallet PD manager approved
  • Wallet tech lead approved 
    • He was smiling the whole presentation
  • CP team approved

areas for IMPROVEMENT

  • Not the most readable code (Formik)
  • More logging infrastructure
  • Monorepo (monolith) has a potential of becoming, well, monolithic...

craft presentation

#2 - personal go project

qandas

Stands for Q&As

  • Basically a sli.do clone
  • Currently lives in:
    • http://staging.qandasapp.com

qandas - tech stack

  • Go - backend
    • Gorm
    • gin-gonic
  • Postgres
  • Svelte - front-end (not bad at all, actually)
  • TypeScript
  • DevOps
    • AWS ElasticBeanStalk
    • CodePipeline
    • Aurora (postgres flavor)

qandas - architecture

Backend has 3 layers:​

  • Delivery
    • Service layer
    • Incoming http or ws requests
  • Use case
    • Delivery calls these
    • Workflows, smart functions, logic
  • Datastore layer
    • Interaction with data sources: DB, RPC, Redis

Most basic layer:

Entities and Constants

qandas - architecture

Dependency is unidirectional:

  • Delivery dependencies
    • Use case
    • Datastore
    • Entities
  • Use case dependencies
    • Datastore
    • Entities
  • Datastore dependencies
    • Entities

How do they interact?

 

Interfaces!

 

Example: datastore

let's see some code

Thank you!

Qandas?

Internal A4A

By cannahum

Internal A4A

A4A Deck - February 2021

  • 425