├── .gitignore
├── Innovation.ipynb
├── README.md
├── apt.txt
├── hiring.ipynb
├── project-throughput.ipynb
├── reliability.ipynb
└── requirements.txt
/.gitignore:
--------------------------------------------------------------------------------
1 | env/
2 | .ipynb_checkpoints/
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # systems-explorations
2 |
3 | This is a collection of system models developed
4 | using the [systems](https://github.com/lethain/systems) library,
5 | and explorable via [Binder](https://mybinder.org/) or locally runnable.
6 |
7 | [](https://mybinder.org/v2/gh/lethain/systems-explorations/master)
8 |
9 | ## Explorations
10 |
11 | The current explorations are:
12 |
13 | * **Hiring** ([github](./hiring.ipynb)) - model of a hiring funnel
14 | * **Reliability** ([github](./reliability.ipynb)) - model of reliability
15 |
16 | ## Installation
17 |
18 | Installation instructions are:
19 |
20 | git clone https://github.com/lethain/systems-explorations.git
21 | cd systems-explorations
22 | python3 -m venv ./env
23 | source ./env/bin/activate
24 | pip install -r requirements.txt
25 |
26 | Using the graphviz extensions will require also install `dot` for your
27 | operating system.
28 |
29 | Then you run Jupyter via:
30 |
31 | jupyter notebook
32 |
33 | Then click into the notebooks and get started.
--------------------------------------------------------------------------------
/apt.txt:
--------------------------------------------------------------------------------
1 | graphviz
2 |
--------------------------------------------------------------------------------
/hiring.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 8,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from systems.parse import parse\n",
10 | "from systems.viz import as_dot\n",
11 | "from IPython.core.display import HTML\n",
12 | "import pandas as pd\n",
13 | "import matplotlib.pyplot as plt"
14 | ]
15 | },
16 | {
17 | "cell_type": "code",
18 | "execution_count": 9,
19 | "metadata": {},
20 | "outputs": [],
21 | "source": [
22 | "spec = \"\"\"\n",
23 | "\n",
24 | "[Candidate] > Recruiters(3, 7) @ 1\n",
25 | "\n",
26 | "[Candidate] > Prospect @ Recruiters * 3\n",
27 | "Prospect > Screen @ 0.5\n",
28 | "Screen > Onsite @ 0.5\n",
29 | "Onsite > Offer @ 0.25\n",
30 | "Offer > Accept @ 0.5\n",
31 | "Accept > Hired @ 1.0\n",
32 | "\n",
33 | "\"\"\"\n",
34 | "model = parse(spec)"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 10,
40 | "metadata": {},
41 | "outputs": [
42 | {
43 | "data": {
44 | "image/svg+xml": [
45 | "\n",
46 | "\n",
48 | "\n",
50 | "\n",
51 | "\n"
148 | ],
149 | "text/plain": [
150 | ""
151 | ]
152 | },
153 | "execution_count": 10,
154 | "metadata": {},
155 | "output_type": "execute_result"
156 | }
157 | ],
158 | "source": [
159 | "# this will fail on e.g. Binder or if you don't have graphiz installed\n",
160 | "as_dot(model)"
161 | ]
162 | },
163 | {
164 | "cell_type": "code",
165 | "execution_count": 11,
166 | "metadata": {},
167 | "outputs": [
168 | {
169 | "data": {
170 | "text/html": [
171 | "\n",
172 | "\n",
173 | "\n",
174 | "Round | \n",
175 | "Recruiters | \n",
176 | "Prospect | \n",
177 | "Screen | \n",
178 | "Onsite | \n",
179 | "Offer | \n",
180 | "Accept | \n",
181 | "Hired | \n",
182 | "
\n",
183 | "\n",
184 | "\n",
185 | "0 | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
\n",
186 | "1 | 4 | 9 | 0 | 0 | 0 | 0 | 0 |
\n",
187 | "2 | 5 | 12 | 4 | 0 | 0 | 0 | 0 |
\n",
188 | "3 | 6 | 15 | 6 | 2 | 0 | 0 | 0 |
\n",
189 | "4 | 7 | 18 | 7 | 5 | 0 | 0 | 0 |
\n",
190 | "5 | 7 | 21 | 9 | 3 | 1 | 0 | 0 |
\n",
191 | "6 | 7 | 21 | 10 | 7 | 1 | 0 | 0 |
\n",
192 | "7 | 7 | 21 | 10 | 5 | 2 | 0 | 0 |
\n",
193 | "8 | 7 | 21 | 10 | 5 | 1 | 1 | 0 |
\n",
194 | "9 | 7 | 21 | 10 | 5 | 2 | 0 | 1 |
\n",
195 | "10 | 7 | 21 | 10 | 5 | 1 | 1 | 1 |
\n",
196 | "\n",
197 | "
"
198 | ],
199 | "text/plain": [
200 | ""
201 | ]
202 | },
203 | "execution_count": 11,
204 | "metadata": {},
205 | "output_type": "execute_result"
206 | }
207 | ],
208 | "source": [
209 | "results = model.run(rounds=10)\n",
210 | "rendered = model.render_html(results)\n",
211 | "HTML(rendered)"
212 | ]
213 | },
214 | {
215 | "cell_type": "code",
216 | "execution_count": 14,
217 | "metadata": {},
218 | "outputs": [
219 | {
220 | "data": {
221 | "text/plain": [
222 | ""
223 | ]
224 | },
225 | "metadata": {},
226 | "output_type": "display_data"
227 | },
228 | {
229 | "data": {
230 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsYAAAD8CAYAAAB0FmJXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzt3Xl4lNXd//H3yb4HQkIIZGNT9kXCEtxQFFxQarUiLli1xaVabfVXrdVa69qnm63aqn3qU4KoWFxr3RFXIkvYZFFBzGSFJEDIvszM+f0xARIIe5J7knxe15WLmTv3PfOdYWA+c+bc52ustYiIiIiIdHcBThcgIiIiIuIPFIxFRERERFAwFhEREREBFIxFRERERAAFYxERERERQMFYRERERARQMBYRERERARSMRUREREQABWMREREREQCCOvLO4uPjbXp6ekfepYiIiIh0Qzk5OWXW2oSjOaZDg3F6ejorV67syLsUERERkW7IGOM62mM0lUJEREREBAVjERERERFAwVhEREREBOjgOcataWxspKCggLq6OqdL6VTCwsJITk4mODjY6VJEREREugTHg3FBQQHR0dGkp6djjHG6nE7BWsuOHTsoKCigf//+TpcjIiIi0iU4PpWirq6OXr16KRQfBWMMvXr10ii7iIiISBtyPBgDCsXHQM+ZiIiISNtyfCqFiIi0bkdVPW+sLWJXdYPTpYiIdAsKxkBgYCAjR47E7XYzdOhQ5s2bR0REhNNlAfDYY48xd+5cv6lHRNrfuoJy5i118Z91RTS4vegLIhGRjqFgDISHh7NmzRoArrjiCp566il+/vOf7/29tRZrLQEBHT/z5LHHHuPKK69UMBbp4urdHt76sph5S12syS8nIiSQWRkpzMlMY3BitNPliYh0OubRoz9GwXg/p556KuvWrSM3N5fp06czceJEcnJyeOutt1i6dCkPP/ww1lrOP/98fve73+HxeLjuuutYuXIlxhiuvfZafvaznzFlyhRGjx7Nxx9/jNvt5tlnn2XChAlUV1dzyy23sH79ehobG/nNb37DzJkz8Xg83HnnnbzzzjsEBATw4x//GGstRUVFnHHGGcTHx7NkyRKnnx4RaWNF5bUsWObixeX57KhuYEB8JL+5YBjfH5dMTJiWYxQR6Uh+FYzv/88GNhZVtOltDusb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8p04yhgTBbwM3GatrXC6HnGWMWYGUGKtzXG6FvErQcBJwN+ttWOBao7wa1HpuprmjM7E98GpLxBpjLnS2arEH1nfEmxHtAxbRwTjQiCl2fXkpm3SzRljgvGF4gXW2lecrkf8wsnAhcaYXHzTrs40xjznbEniBwqAAmvtnm+VFuELytK9nQV8Z60ttdY2Aq8Akx2uSfzHdmNMEkDTnyVHclBHBOMVwGBjTH9jTAi+ifFvdMD9ih8zxhh88wU3WWv/5HQ94h+stb+01iZba9Px/V/xobVWI0DdnLV2G5BvjDmxadNUYKODJYl/yAMmGWMimt5TpqKTMmWfN4Crmy5fDbx+JAcFtVs5Tay1bmPMzcC7+M4YfdZau6G971f83snAVcCXxpg1Tdvutta+5WBNIuK/bgEWNA2wbAWucbgecZi1dpkxZhGwCt9KR6tRB7xuyRjzAjAFiDfGFAD3AY8CLxljrgNcwKVHdFvqfCciIiIiopPvREREREQABWMREREREUDBWEREREQEUDAWEREREQEUjEVEREREAAVjERERERFAwVhEREREBFAwFhEREREB4P8DvaT8a3YFEkIAAAAASUVORK5CYII=\n",
231 | "text/plain": [
232 | ""
233 | ]
234 | },
235 | "metadata": {
236 | "needs_background": "light"
237 | },
238 | "output_type": "display_data"
239 | }
240 | ],
241 | "source": [
242 | "plt.close('all')\n",
243 | "df = pd.DataFrame.from_records(results, columns=['Prospect', 'Screen', 'Offer', 'Hired'])\n",
244 | "df.cumsum()\n",
245 | "plt.figure();\n",
246 | "df.plot(figsize=(12, 4));"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": null,
252 | "metadata": {},
253 | "outputs": [],
254 | "source": []
255 | }
256 | ],
257 | "metadata": {
258 | "kernelspec": {
259 | "display_name": "Python 3",
260 | "language": "python",
261 | "name": "python3"
262 | },
263 | "language_info": {
264 | "codemirror_mode": {
265 | "name": "ipython",
266 | "version": 3
267 | },
268 | "file_extension": ".py",
269 | "mimetype": "text/x-python",
270 | "name": "python",
271 | "nbconvert_exporter": "python",
272 | "pygments_lexer": "ipython3",
273 | "version": "3.6.3"
274 | }
275 | },
276 | "nbformat": 4,
277 | "nbformat_minor": 2
278 | }
279 |
--------------------------------------------------------------------------------
/reliability.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 1,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "from systems.parse import parse\n",
10 | "from systems.viz import as_dot\n",
11 | "from IPython.core.display import HTML\n",
12 | "import pandas as pd\n",
13 | "import matplotlib.pyplot as plt"
14 | ]
15 | },
16 | {
17 | "cell_type": "code",
18 | "execution_count": 6,
19 | "metadata": {},
20 | "outputs": [],
21 | "source": [
22 | "spec = \"\"\"\n",
23 | "[Hires] > Developers @ 5\n",
24 | "[Hires] > SREs @ 1\n",
25 | "[Plans] > Changes @ (Developers-Incidents) * 2\n",
26 | "Changes > Incidents @ Conversion(1 / (1 + Remediated))\n",
27 | "Incidents > Mitigated @ SREs * 2\n",
28 | "Mitigated > Remediated @ 1\n",
29 | "\"\"\"\n",
30 | "model = parse(spec)"
31 | ]
32 | },
33 | {
34 | "cell_type": "code",
35 | "execution_count": 7,
36 | "metadata": {},
37 | "outputs": [
38 | {
39 | "data": {
40 | "image/svg+xml": [
41 | "\n",
42 | "\n",
44 | "\n",
46 | "\n",
47 | "\n"
138 | ],
139 | "text/plain": [
140 | ""
141 | ]
142 | },
143 | "execution_count": 7,
144 | "metadata": {},
145 | "output_type": "execute_result"
146 | }
147 | ],
148 | "source": [
149 | "# this will fail on e.g. Binder or if you don't have graphiz installed\n",
150 | "as_dot(model)"
151 | ]
152 | },
153 | {
154 | "cell_type": "code",
155 | "execution_count": 8,
156 | "metadata": {},
157 | "outputs": [
158 | {
159 | "data": {
160 | "text/html": [
161 | "\n",
162 | "\n",
163 | "\n",
164 | "Round | \n",
165 | "Developers | \n",
166 | "SREs | \n",
167 | "Changes | \n",
168 | "Incidents | \n",
169 | "Mitigated | \n",
170 | "Remediated | \n",
171 | "
\n",
172 | "\n",
173 | "\n",
174 | "0 | 0 | 0 | 0 | 0 | 0 | 0 |
\n",
175 | "1 | 5 | 1 | 0 | 0 | 0 | 0 |
\n",
176 | "2 | 10 | 2 | 10 | 0 | 0 | 0 |
\n",
177 | "3 | 15 | 3 | 20 | 10 | 0 | 0 |
\n",
178 | "4 | 20 | 4 | 22 | 24 | 6 | 0 |
\n",
179 | "5 | 25 | 5 | 8 | 38 | 13 | 1 |
\n",
180 | "6 | 30 | 6 | 0 | 32 | 22 | 2 |
\n",
181 | "7 | 35 | 7 | 20 | 20 | 33 | 3 |
\n",
182 | "8 | 40 | 8 | 58 | 11 | 46 | 4 |
\n",
183 | "9 | 45 | 9 | 58 | 22 | 45 | 5 |
\n",
184 | "10 | 50 | 10 | 82 | 13 | 62 | 6 |
\n",
185 | "\n",
186 | "
"
187 | ],
188 | "text/plain": [
189 | ""
190 | ]
191 | },
192 | "execution_count": 8,
193 | "metadata": {},
194 | "output_type": "execute_result"
195 | }
196 | ],
197 | "source": [
198 | "results = model.run(rounds=10)\n",
199 | "rendered = model.render_html(results)\n",
200 | "HTML(rendered)\n",
201 | "#rendered.replace('\\n','').replace(\"\", \"\")"
202 | ]
203 | },
204 | {
205 | "cell_type": "code",
206 | "execution_count": 10,
207 | "metadata": {},
208 | "outputs": [
209 | {
210 | "data": {
211 | "text/plain": [
212 | ""
213 | ]
214 | },
215 | "metadata": {},
216 | "output_type": "display_data"
217 | },
218 | {
219 | "data": {
220 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAAD8CAYAAACFHTnaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xt809X9x/HXadIm9ALlVkSgcoeC3ATxgiIX7yL6m0xFnf7QTbe5i3Nz013cdLrp5s9t6qbD6dRt4v2Ct23eEO8IyB2UO7RcCoWWpm3SJvn+/jgptKWlaZs2Sft+Ph48mn6bJqclTd4538/5HOM4DiIiIiIickhKvAcgIiIiIpJoFJJFREREROpQSBYRERERqUMhWURERESkDoVkEREREZE6FJJFREREROpQSBYRERERqUMhWURERESkDoVkEREREZE63PEeAECPHj2c/v37x3sYIiIiItLOLVmyZK/jOD0bu15ChOT+/fuzePHieA9DRERERNo5Y8zWaK6ncgsRERERkToUkkVERERE6lBIFhERERGpIyFqkutTVVVFfn4+fr8/3kNJal6vl759+5KamhrvoYiIiIgkjYQNyfn5+WRlZdG/f3+MMfEeTlJyHIeioiLy8/MZMGBAvIcjIiIikjQSttzC7/fTvXt3BeQWMMbQvXt3zcaLiIiINFHChmRAATkG9DsUERERabqELbcQERERiaWNe3y8vmIn6R43mR4XmZ5UMjwuMj1uMr1u+9HjJsPjJtWV0POI0gYUko/AGMPll1/OP//5TwCCwSC9e/fmhBNO4NVXX2X+/PmsWbOGm2++mZdeeomhQ4cyYsQIAG699VYmT57M6aef3uT7XbZsGTt27ODcc89t0vdNmTKFe+65hwkTJjT5PkVERNq7hxZs5Nkl+VFd1+NOIct7KDTXDNB1A3VW5FjN62V63WSmucnwuHArcCclheQjyMjIYNWqVVRUVNCpUyfefPNN+vTpc/DrM2fOZObMmQC89NJLzJgx42BIvv3225t9v8uWLWPx4sVNDskiIiLSsPz9FYztl83jcybiqwzi8wfxBSL//EHKAoc+LwsEKY18rL7ergP+g9cp9QcJBMNR3a83NYVMT6qdvfa6yUhzk1UzVEcCdXXQzmogjGd63LhSVEbZVhSSG3Huuefy2muvMWvWLObNm8fs2bN5//33AXjsscdYvHgxl112GfPnz+e9997jjjvu4Pnnn+fXv/41M2bMYNasWbz++uvceOONZGRkMGnSJDZt2sSrr77KokWL+P73v4/f76dTp078/e9/Z8CAAdx6661UVFTwwQcfcMsttzBjxgy++93vsmrVKqqqqvjVr37FBRdcQEVFBXPmzGH58uUMHz6cioqKOP+2REREEteOkgpG982mS3oqXdJb3hq1KhQ+PFj7g5QFQvgCVQcvl1VWHz8UyHcU+2uF8cooA3enVFet8HxwNtvrjpSORMK4p04Ir3E5w2ODugL3kSVFSL7tldWs2XEgprc54ujO/PL8kY1e79JLL+X2229nxowZrFixgquvvvpgSK528sknM3PmzIOhuCa/3891113HwoULGTBgALNnzz74teHDh/P+++/jdrt56623+OlPf8rzzz/P7bffzuLFi3nggQcA+OlPf8q0adN49NFHKS4uZuLEiZx++un89a9/JT09nbVr17JixQqOO+64GPxmRERE2p9w2GFnsZ+zj/XG7DZTXSlkp6eRnZ7W4tuqDB4K3GWRWe66M9nVQbtm6C4LhCgorsAXqLLh3B+kMhRd4M5Ic9Wasc5Iq6eUpE7JyaEZ8EM13RlpblLaYeBOipAcT6NHj2bLli3MmzevWeUP69atY+DAgQf7FM+ePZu5c+cCUFJSwlVXXcX69esxxlBVVVXvbfz3v/9l/vz53HPPPYAN3tu2bWPhwoV873vfOzjO0aNHN+dHFBERaff2+gJUhsL0ze4U76HUK82dQpo7ja4ZLQ/cgWDIzmBHgnX1jHXdGe+6x33+INv3lde6XlXIieo+M9JctcpFqstK6gvdDR73uElPdSVM4E6KkBzNjG9rmjlzJj/60Y9YsGABRUVFMbvdX/ziF0ydOpUXX3yRLVu2MGXKlHqv5zgOzz//PMOGDYvZfYuIiHQk+cW2JPHoBA3JseRxu/C4XXSLUeD2RcpGSqtnqwNV+AKhg3XcpfXUdPsCQYp85XbGOzIzHgw3HriNIbLgsW6Ntqt2XXfN2u0Gyko6pbpa1Ao3KUJyvF199dVkZ2czatQoFixYUO91srKyKC0tPez4sGHD2LRpE1u2bKF///48/fTTB79WUlJycCHgY4891uBtnXXWWdx///3cf//9GGP4/PPPGTduHJMnT+bJJ59k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\n",
221 | "text/plain": [
222 | ""
223 | ]
224 | },
225 | "metadata": {
226 | "needs_background": "light"
227 | },
228 | "output_type": "display_data"
229 | }
230 | ],
231 | "source": [
232 | "plt.close('all')\n",
233 | "results = model.run(rounds=100)\n",
234 | "df = pd.DataFrame.from_records(results[1:], columns=['Mitigated', 'Incidents'])\n",
235 | "df.cumsum()\n",
236 | "plt.figure();\n",
237 | "df.plot(figsize=(12, 4));"
238 | ]
239 | },
240 | {
241 | "cell_type": "code",
242 | "execution_count": null,
243 | "metadata": {},
244 | "outputs": [],
245 | "source": []
246 | }
247 | ],
248 | "metadata": {
249 | "kernelspec": {
250 | "display_name": "Python 3",
251 | "language": "python",
252 | "name": "python3"
253 | },
254 | "language_info": {
255 | "codemirror_mode": {
256 | "name": "ipython",
257 | "version": 3
258 | },
259 | "file_extension": ".py",
260 | "mimetype": "text/x-python",
261 | "name": "python",
262 | "nbconvert_exporter": "python",
263 | "pygments_lexer": "ipython3",
264 | "version": "3.6.3"
265 | }
266 | },
267 | "nbformat": 4,
268 | "nbformat_minor": 2
269 | }
270 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | graphviz==0.9
2 | jupyter==1.0.0
3 | jupyter-client==5.2.4
4 | jupyter-console==6.0.0
5 | jupyter-core==4.4.0
6 | matplotlib==3.0.2
7 | notebook==5.7.4
8 | pandas==0.24.1
9 | PyYAML>=4.2b1
10 | requests>=2.20.0
11 | systems>=0.1.0
12 |
--------------------------------------------------------------------------------