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:
- GraphQL queries and mutations
- Data objects
- Validations (same as server-side)
- Form logic
- 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