diff --git a/2026-01-11.md b/2026-01-11.md new file mode 100644 index 0000000..9687eab --- /dev/null +++ b/2026-01-11.md @@ -0,0 +1,67 @@ +--- +id: +aliases: [] +title: 2026-01-11 +tags: + - authorship/original + - destiny/permanent + - status/draft + - type/daily +--- +# 2026-01-11 + +## 2026-01-11 09:00 + +[[2026-01-09#2026-01-09 14:45]] + +[[bid-price-modeling]] + +[[decrease-in-sigma]] + +## 2026-01-11 11:00 + +![[favorite-quotes#"It Takes an Engineer to Build a Bridge that Barely Stands"]] + +The value that estimators provide for a contractor +is in modeling project cost. +If the goal were simply to present a number the cost will not exceed, +than anyone could be an estimator. +If the goal were only to present a reasonably accurate figure, +with no other constraints, +then there are few who in the world who couldn't, +given infinite time for a single bid. +The _true_ value of an estimator, then, +is in their ability to model project cost _efficiently_, that is, +to achieve acceptable accuracy and precision as quickly as possible,--- +much as the engineer's is in building a bridge that _meets_ the requirements +as cheaply as possible. + +Estimating "as accurately as possible" +is akin to building a bridge "as strong as possible"; +it sounds nice, but ignores the actual objective of _optimal cost-efficiency_. + +I think that most estimators believe this to be the case, +but, whatever they believe in mind, they believe in practice +that the goal is to model cost as accurately and precisely as possible, +_given the time allowed for bid_. +Estimates tend always to take exactly as many weeks as until the bid due date, +even those of significantly different turnaround but equal scope and complexity. +This behavior is objectionable, +since if an acceptable estimate _could_ be provided in two weeks, +it is not cost-effective[^1] to allow it to take four.[^2] + +[^1]: "Cost" referring both to estimator salaries and the opportunity cost of declined bids. + +[^2]: Supposing a contractor maintained a modern portfolio theory styled record + of estimates including pending bids, and projects ongoing and completed, + with confidence estimates uncorrupted by [[estimating-culture#Incentives|perverse incentives]], + they may have reasonable basis to set sliding standards for estimate precision + to be specifically determined at consideration of the opportunity for bid + according to current climate (i.e. their risk appetite). + I believe my use of the absolute is still fair. + No contractor is doing that, so they lack a competent measure of risk tolerance + besides continuing to tolerate what they have historically. + +Objectionable as it is, +it is to be expected that estimators will use all time allowed them +when the standards for _acceptability_ are inadequately defined. diff --git a/actuarial-science-for-construction-estimating.md b/actuarial-science-for-construction-estimating.md index bac4a27..8642343 100644 --- a/actuarial-science-for-construction-estimating.md +++ b/actuarial-science-for-construction-estimating.md @@ -23,4 +23,4 @@ In this way, projects are better compared to _insurance accounts_. * cost of individual service is uncertain * cost to customer must be minimized -![[decrease-in-sigma#^pdf]] \ No newline at end of file +![[decrease-in-sigma#Normal PDF]] \ No newline at end of file diff --git a/bid-process-strategy.md b/bid-process-strategy.md index db364f0..62d3af4 100644 --- a/bid-process-strategy.md +++ b/bid-process-strategy.md @@ -1,5 +1,5 @@ --- -id: risk-oriented-estimating +id: aliases: [] title: Bid Process Strategy tags: diff --git a/consolidate-estimating-thoughts.md b/consolidate-estimating-thoughts.md index 2aaea28..a6463b8 100644 --- a/consolidate-estimating-thoughts.md +++ b/consolidate-estimating-thoughts.md @@ -17,6 +17,10 @@ are currently disparate, disjointed, and redundant. ## TODO +### Supertopic: Risk-Oriented Estimating + +Still deciding if I'm capable of being opinionated without rambling. + ### Legitimate Subtopics * [[estimating-methodologies]] @@ -40,7 +44,7 @@ Create and use cross-topic notes for complex thoughts: * [[bid-process-strategy]] * [[game-theory-for-construction-estimating]] - * [[estimating-culture]]: estimator incentives + * [[estimating-culture#Incentives]] * [[project-management-for-construction-estimating]] * [[separating-estimating-concerns]] diff --git a/construction-estimating.md b/construction-estimating.md index ac6de7f..2eb7dbc 100644 --- a/construction-estimating.md +++ b/construction-estimating.md @@ -40,6 +40,7 @@ For philosophy see [[bid-process-strategy]] * [[auction-theory-for-construction-estimating]] * [[game-theory-for-construction-estimating]] * [[project-management-for-construction-estimating]] +* [[utility-in-construction-estimating]] * [[ambiguity-in-construction-estimating]] * [[nontraditional-computing-for-construction-estimating]] * [[object-oriented-programing-for-construction-estimating]] diff --git a/decrease-in-sigma.md b/decrease-in-sigma.md index 55de20f..a5c973e 100644 --- a/decrease-in-sigma.md +++ b/decrease-in-sigma.md @@ -11,6 +11,8 @@ tags: --- # Decrease in Sigma +## Normal PDF + ```tikz \usepackage{pgfplots} \pgfplotsset{compat=1.16} @@ -47,53 +49,62 @@ tags: \end{document} ``` -^pdf +## Lognormal PDF -```tikz -\usepackage{pgfplots} -\pgfplotsset{compat=1.16} +![[lognormal-pdf.gif]] -\pgfmathdeclarefunction{erfapprox}{1}{% - \pgfmathparse{% - % save sign and work with |x| - ( (#1<0) ? -1 : 1 ) - * ( 1 - (1 + 0.278393*abs(#1) + 0.230389*abs(#1)^2 + 0.000972*abs(#1)^3 + 0.078108*abs(#1)^4)^(-4) ) - }% -} +%% +```python +import numpy as np +import matplotlib.pyplot as plt +from scipy.stats import lognorm +import imageio.v2 as imageio +import os -% Normal CDF using erf approximation: -% F(x;mu,sigma) = 0.5*(1 + erf((x-mu)/(sigma*sqrt(2)))) -\pgfmathdeclarefunction{normcdf}{3}{% - \pgfmathparse{ 0.5*(1 + erfapprox((#1-#2)/(#3*sqrt(2)))) }% -} +mean_target = 10.0 +sigmas = np.linspace(1.0, 0.1, 25) +x = np.linspace(0.001, 40, 2000) -\begin{document} -\begin{tikzpicture} - \begin{axis}[ - width=13cm, - height=7cm, - axis lines=middle, - xlabel={$x$}, - ylabel={$F(x;\mu,\sigma)$}, - xmin=-6, xmax=6, - ymin=0, ymax=1.05, - samples=400, - domain=-6:6, - legend style={draw=none, fill=none, at={(0.02,0.98)}, anchor=north west}, - legend cell align=left, - ytick={0,0.5,1}, - ] - - % Normal CDF: 0.5*(1 + erf((x-mu)/(sigma*sqrt(2)))) - \addplot[thick] - { normcdf(x,0,1.8) }; - \addlegendentry{$\mu=0,\ \sigma=1.8$} - - \addplot[thick, dashed] - { normcdf(x,0.8) }; - \addlegendentry{$\mu=0,\ \sigma=0.8$} - - \end{axis} -\end{tikzpicture} -\end{document} +# Precompute global y-limit +pdf_max = 0.0 +for sigma in sigmas: + mu = np.log(mean_target) - 0.5 * sigma**2 + pdf = lognorm.pdf(x, s=sigma, scale=np.exp(mu)) + pdf_max = max(pdf_max, pdf.max()) + +frames = [] +tmp_dir = "frames" +os.makedirs(tmp_dir, exist_ok=True) + +for i, sigma in enumerate(sigmas): + mu = np.log(mean_target) - 0.5 * sigma**2 + pdf = lognorm.pdf(x, s=sigma, scale=np.exp(mu)) + + plt.figure(figsize=(6, 4)) + plt.plot(x, pdf) + plt.axvline(mean_target, linestyle="--", linewidth=1) + plt.text( + mean_target, pdf_max * 0.95, + "mean", + rotation=90, + verticalalignment="top", + horizontalalignment="right" + ) + + plt.title(f"Lognormal PDF\nmean = {mean_target}, sigma = {sigma:f}") + plt.xlabel("x") + plt.ylabel("density") + plt.ylim(0, pdf_max * 1.05) + plt.tight_layout() + + frame_path = f"{tmp_dir}/frame_{i:02d}.png" + plt.savefig(frame_path, dpi=120) + plt.close() + + frames.append(imageio.imread(frame_path)) + +os.makedirs("out", exist_ok=True) +gif_path = "out/lognormal-pdf.gif" +imageio.mimsave(gif_path, frames, duration=0.15) ``` +%% \ No newline at end of file diff --git a/favorite-quotes.md b/favorite-quotes.md index 3cad828..0480783 100644 --- a/favorite-quotes.md +++ b/favorite-quotes.md @@ -34,6 +34,29 @@ tags: ## About Process Optimization +### "It Takes an Engineer to Build a Bridge that Barely Stands" + +> [!quote] Unknown +> Any idiot can build a bridge that stands. +> It takes an engineer to build a bridge that barely stands. + +The phrase "exceeds specifications" +ought not be universally perceived as positive when divorced from context like it is. + +It is often the case that exceeding minimum requirements is easy, +and that the difficulty (the kind that you pay people to handle) +is in meeting them precisely. + +In the case of civil infrastructure, +it is intuitive that even though a 10% safety factor is _good_, +a 100% safety factor is not _better_. +It is _so_ intuitive that the choice of "_barely_ stands", +I don't think would give many pause or reservation. + +However, divorced from context, +people are biased to believe that more of a good thing must be better, +especially when what's compromised isn't as tangible as dollars on an invoice. + ### "Sharpen the Axe" Frequently misattributed to Abraham Lincoln is some variation of: diff --git a/lognormal-pdf.gif b/lognormal-pdf.gif new file mode 100644 index 0000000..f972f2f Binary files /dev/null and b/lognormal-pdf.gif differ diff --git a/music-theory-as-code.md b/music-theory-as-code.md index 092365c..8c0a26f 100644 --- a/music-theory-as-code.md +++ b/music-theory-as-code.md @@ -9,6 +9,15 @@ tags: --- # Music Theory as Code +%% +## TALK + +For now a scratchpad for implementation, +ultimately to discuss the difficulty +and why every extant library +seems to have wildly different ergonomics and terminology +%% + PowerShell module to assist in translating between banjo fingerings and concert notes, as well as between [[lilypond]] and conventional notation. diff --git a/music-theory-for-banjo.md b/music-theory-for-banjo.md index e0053b9..8b9b79c 100644 --- a/music-theory-for-banjo.md +++ b/music-theory-for-banjo.md @@ -12,3 +12,10 @@ tags: # Music Theory for Banjo Cross-topic of [[music-theory]] and [[banjo]]. + +%% +## TALK + +practical application of music theory concepts for playing banjo +including vocal accompaniment. +%% diff --git a/nontraditional-computing.md b/nontraditional-computing.md index f8f62f8..d95189e 100644 --- a/nontraditional-computing.md +++ b/nontraditional-computing.md @@ -10,4 +10,25 @@ tags: --- # Nontraditional Computing -**Nontraditional computing** refers to UX patterns \ No newline at end of file +**Nontraditional computing** refers to UX patterns +unlike those originally pioneered by Xerox and IBM, +and cemented by Apple and Microsoft. + +Desktops, hierarchical filesystems, +obligatory mouse and keyboard + +Perhaps more accurate is **nontraditional _business_ computing**, +since the real innovation is making mobile device patterns practical. + +Designers frequently malign traditional computing, +stating accurately that it was a compromise +for restrictions that we no longer face, +but there is very little movement +on practical implementation of nontraditional patterns. +[Ink & Switch](https://www.inkandswitch.com/) +is at the forefront as I understand it, +however they have as much effort or more +invested in traditional systems. + +[Liber Indigo](https://www.justinckirkwood.net/liber-indigo) +is mostly woo-woo, but has some fun things to say about NTC. diff --git a/optimal-estimating-patterns.md b/optimal-estimating-patterns.md deleted file mode 100644 index 0879f8a..0000000 --- a/optimal-estimating-patterns.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -id: -aliases: [] -tags: - - authorship/original - - destiny/fleeting - - status/incomplete - - topic/estimating - - topic/software - - type/idea -title: Optimal Estimating Patterns ---- -# Optimal Estimating Patterns - -[[construction-estimating-software]] consistently fails to innovate -on the stale patterns developed for marginally similar applications decades ago. - -## More Optimal Patterns - -> [!note] -> Note that while the patterns described below -> _are_ more optimal than those of traditional applications, -> the bigger problem with such applications -> is their suboptimal implementation of their patterns. -> If you could just do what they're trying to do correctly, -> you probably wouldn't need all these optimizations anyway. - -%% TODO: - -Count-based takeoff speed increases with count. - -Optimizing the takeoff process means: - -* _Minimizing_ the need for information outside of drawings -* _Maximizing_ organizational consistency - -%% diff --git a/risk-management-for-construction-estimating.md b/risk-management-for-construction-estimating.md index 1dac75a..ad8284a 100644 --- a/risk-management-for-construction-estimating.md +++ b/risk-management-for-construction-estimating.md @@ -15,15 +15,31 @@ tags: Cross-topic of [[risk-management]] and [[construction-estimating]]. -## Estimating as Risk Mitigation +%% +## TALK -* reduce risk of wasted estimation effort due to bid loss - (prefer lower bid) -* reduce risk of project overrun - (prefer higher bid) + +%% + +## Bid Risk + +**Bid risk** is not only risk of project overrun given award, +but also includes the risk of wasted estimation effort due to bid loss, +and the opportunity cost of excluding other opportunities. + +## Estimating as Risk Mitigation Estimating resources should be allocated according to Return on Mitigation (RoM), that is, their contribution to _cost certainty_. $\text{Efficiency} = -1 \times \frac{d\sigma}{dt}$ + +But the RoM of estimating effort has a steep drop off, +and cost will obviously never be entirely certain. + +It is not foolhardy to tolerate imprecision in an estimate +when the effort to increase precision +will not decrease bid risk at least equivalently + +(stigmatizing "assumptions") \ No newline at end of file diff --git a/supertopics.md b/supertopics.md index b35db0c..3455d9b 100644 --- a/supertopics.md +++ b/supertopics.md @@ -18,6 +18,8 @@ They are a group of topics that, while they may seem disparate in a vacuum, are all fundamental to a greater understanding of the whole. + + %% ## TALK diff --git a/uncertainty-in-construction-estimating.md b/uncertainty-in-construction-estimating.md index d15c31a..044531d 100644 --- a/uncertainty-in-construction-estimating.md +++ b/uncertainty-in-construction-estimating.md @@ -51,19 +51,3 @@ Suppose the estimator is prescient and has observed the final cost of the projec as reported in the winning contractor's historicals. %% - -## Expected Value of Perfect Information - -[[uncertainty#Expected Value of Perfect Information]] - -%% - -an organization pays in estimator hours. -These hours have a direct cost in salary and benefits, -however the greater cost is the **opportunity cost** -of tying up an estimator who could otherwise be starting a new project. - -In many cases, the [[utility]] of doubled throughput -far outweighs the increased risk of individual bids. - -%% diff --git a/utility-in-construction-estimating.md b/utility-in-construction-estimating.md new file mode 100644 index 0000000..2a38598 --- /dev/null +++ b/utility-in-construction-estimating.md @@ -0,0 +1,31 @@ +--- +id: +aliases: [] +title: +tags: + - authorship/original + - destiny/permanent + - status/incomplete + - topic/estimating + - topic/risk + - type/cross-topic +--- +# Utility in Construction Estimating + +Cross-topic of [[utility]] and [[construction-estimating]]. + +## Expected Value of Perfect Information + +[[uncertainty#Expected Value of Perfect Information]] + +%% + +an organization pays in estimator hours. +These hours have a direct cost in salary and benefits, +however the greater cost is the **opportunity cost** +of tying up an estimator who could otherwise be starting a new project. + +In many cases, the [[utility]] of doubled throughput +far outweighs the increased risk of individual bids. + +%% diff --git a/utility.md b/utility.md index b098e37..a3ae2ef 100644 --- a/utility.md +++ b/utility.md @@ -14,3 +14,7 @@ tags: [Utility](https://en.wikipedia.org/wiki/Utility) is a measure of a party's satisfaction with a certain state of the world. + +The measure is intended to account for unintuitive quirks of human perception of value. +A rich man is not as satisfied with receiving one dollar as a poor man, +therefore the utility of the dollar is contextual, not objective.