Skip to content

Roadmap

Current State (Q1)

  • Shifts originate in core and are published to WhenIWork upon manual trigger
  • Shift changes are pulled in batch from WhenIWork upon manual trigger
  • Location, position, employee, and site changes are pulled in batch from WhenIWork upon manual trigger
graph LR subgraph "When I Work" WIW[fa:fa-calendar When I Work API] click WIW "https://dev.wheniwork.com/" end subgraph Intuit QB[fa:fa-dollar QuickBooks Online API] click QB "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer" end subgraph IndeVets CORE{fa:fa-sun Core} PG[("PostgreSQL<br>Database")] PG === CORE CORE --> |"Publish shifts<br>{ site, employee, location, position,<br>start_time, end_time, color, notes, published, is_open }"| WIW WIW --> |"Pull shifts<br>{ customer, creator, employee, location, position, site,<br>start_time, end_time, color, notes, alerted, published,<br>notified, acknowledegd, is_open, is_overnight }"| CORE WIW --> |"Pull locations<br>{ account, place, name, region, postal_code, sort, is_deleted }"| CORE WIW --> |"Pull positions<br>{ name, color, sort, is_private }"| CORE WIW --> |"Pull employees<br>{ email, first/last name, phone, hourly_rate, position_rates,<br>activated, is_hidden, is_private, is_deleted, is_active, avatar }"| CORE WIW --> |"Pull sites<br>{ location, customer, name, color,<br>description, address, lat/lon, deleted_at }"| CORE QB --> |"Pull customers<br>{ parent, company_name, is_parent, is_child,<br>is_subcustomer, bill_with_parent, is_invoicable, is_office,<br>is_site, is_active, is_indie_corp }"| CORE CORE --> |"Create customer<br>{ first/last name, display name, company name,<br>check name, primary email, notes, billing address }"| QB end RESTIC[/Restic Repository\] WIW --> |Hourly unstructured snapshot| RESTIC PG --> |Hourly structured snapshot| RESTIC RESTIC -.-> CLOUD1[/GCP Cloud Storage\] RESTIC -.-> OFFCLOUD1[\Off-cloud storage/]

WhenIWork Transitional State (Q2-Q3)

  • Q2: Phase-out use of manually-triggered batch pulls of WIW entity properties
  • Q2: Phase-in narrow reactions to specific WhenIWork change events
  • Q2: We will err on the side of keeping records managed in WhenIWork to maximize focus on doctor workflow R&D
  • Q2: Core data models extended and added to support new features, update from WhenIWork change events
  • Q3: Phase out doing any records management in WhenIWork, provide full management in Core and push changes into WhenIWork
  • Q3: Monitor WhenIWork Audit Flow Dashboard
  • Q3: Wind-down doctor use of WhenIWork: no new vets onboarded, user accounts gradually deactivated, notifications switched over
  • Q3: Payroll and other business reporting migrated over to Core
graph LR subgraph IndeVets CORE{fa:fa-sun Core} WIW-MIRRORfa:fa-camera-retro WhenIWork<br>Structured<br>Data Mirror WIW-OBSERVERfa:fa-eye WhenIWork<br>Observer WIW-FLOWDASH["fa:fa-bar-chart WhenIWork<br>Audit Flow<br>Dashboard"] PG[(PostgreSQL)] PG === CORE end subgraph Intuit QB[fa:fa-dollar QuickBooks Online API] click QB "https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/customer" QB --> |Pull customers| CORE CORE --> |Create customer| QB end subgraph "When I Work" WIW[fa:fa-calendar When I Work API] click WIW "https://dev.wheniwork.com/" CORE --> |Publish shift| WIW CORE --> |Take shift| WIW CORE --> |Core-managed entity updates| WIW WIW ==> |Hourly structured snapshot of all entities| WIW-MIRROR WIW --> |Minutely structured snapshot of current shifts| WIW-MIRROR WIW-MIRROR -.-> |Audit logs| CORE WIW-MIRROR -.-> |Audit events| WIW-OBSERVER WIW-OBSERVER -.-> |Shift taken| CORE WIW-OBSERVER -.-> |WIW-managed entity updates| CORE WIW-MIRROR --- WIW-FLOWDASH end subgraph Backups RESTIC[/Restic Repository\] PG --> |Hourly structured snapshot| RESTIC RESTIC -.-> CLOUD1[/GCP Cloud Storage\] RESTIC -.-> OFFCLOUD1[\Off-cloud storage/] end

Post-WhenIWork State (Q4)

  • All records managed in Core
  • WhenIWork no longer updated or used in the field
  • Automation of payroll and other business processes driven by Core recordkeeping
graph LR subgraph Intuit QB[fa:fa-dollar QuickBooks Online API] end subgraph IndeVets CORE{fa:fa-sun Core} PG[(PostgreSQL)] PG === CORE CORE --> |Create customer| QB CORE --> |Create invoice| QB QB --> |Invoice status| CORE end RESTIC[/Restic Repository\] PG --> |Hourly structured snapshot| RESTIC RESTIC -.-> CLOUD1[/GCP Cloud Storage\] RESTIC -.-> OFFCLOUD1[\Off-cloud storage/] RESTIC -.-> OFFCLOUD2[\IndeVets Office/]