Skip to content
This repository has been archived by the owner on Jan 26, 2021. It is now read-only.

Split up project into separate components + responsibilities #101

Closed
jspahrsummers opened this issue Aug 25, 2019 · 5 comments · Fixed by #102
Closed

Split up project into separate components + responsibilities #101

jspahrsummers opened this issue Aug 25, 2019 · 5 comments · Fixed by #102
Assignees
Labels
better-engineering Tech debt or maintainability improvements

Comments

@jspahrsummers
Copy link
Member

In trying to build another project which wants to use pieces of bankroll, I'm finding the current structure kind of unwieldy, and don't want to risk this becoming a kitchen sink. At bare minimum, we should probably separate the model from the brokerage support from the analysis and tools.

Something like this, although not necessarily as finely-sliced:

component graph

digraph {
  rankdir = BT;
  { rank = min; model; }
  { rank = same; ibkr; schwab; fidelity; vanguard; }
  { rank = same; analysis, "plugin framework" }
  { rank = max; cli, notebooks }
  ibkr, schwab, fidelity, vanguard -> model
  ibkr, schwab, fidelity, vanguard -> "plugin framework" [style=dashed]
  analysis -> model
  notebooks -> analysis, "plugin framework"
  cli -> analysis, "plugin framework"
}
@jspahrsummers jspahrsummers added the better-engineering Tech debt or maintainability improvements label Aug 25, 2019
@jspahrsummers jspahrsummers self-assigned this Aug 25, 2019
@jspahrsummers
Copy link
Member Author

Creating things under https://github.com/bankroll-py

@jspahrsummers
Copy link
Member Author

Started thinking about how to isolate third-party dependencies to as small a region as possible, so I ended up adding a marketdata component:

digraph {
  rankdir = BT;
  { rank = min; model; }
  { rank = same; ibkr; schwab; fidelity; vanguard; }
  { rank = max; cli, notebooks }
  ibkr, schwab, fidelity, vanguard, marketdata -> model
  ibkr, schwab, fidelity, vanguard -> "plugin framework" [style=dashed]
  
  ibkr -> marketdata [style=dashed]
  ibkr -> ib_insync
  marketdata -> rx
  rx [style=dotted]
  ib_insync [style=dotted]
  
  analysis -> model
  analysis -> pandas
  pandas [style=dotted]
  
  notebooks -> analysis, "plugin framework", marketdata
  cli -> analysis, "plugin framework", marketdata
}

graphviz

@jspahrsummers
Copy link
Member Author

Not really happy with this generic analysis component, though. Feels like it'll just be a dumping ground. @joshvera, any thoughts on how to proceed in that area specifically?

@jspahrsummers
Copy link
Member Author

jspahrsummers commented Aug 26, 2019

To do:

@jspahrsummers
Copy link
Member Author

I suppose we can just put all the analysis bits into the CLI and notebooks repo for now, since those things will all be used in concert anyways (and the value of analysis to other software is dubious).

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
better-engineering Tech debt or maintainability improvements
Development

Successfully merging a pull request may close this issue.

1 participant