flowchart TD
Buffet["Buffet<br/>P(Success): 0.45<br/>NPV: $180MM"]
Buffet --> Cove["Cove<br/>P(Success): 0.35<br/>NPV: $70MM"]
Buffet --> Ledge["Ledge<br/>P(Success): 0.55<br/>NPV: $75MM"]
Buffet --> Bridge["Bridge<br/>P(Success): 0.10<br/>NPV: -$200MM"]
Bridge --> Bonanza["Bonanza<br/>P(Success): 0.15<br/>NPV: $1,200MM"]
Bonanza --> Crest["Crest<br/>P(Success): 0.20<br/>NPV: $700MM"]
Bonanza --> Saddle["Saddle<br/>P(Success): 0.18<br/>NPV: $650MM"]
Bonanza --> Spur["Spur<br/>P(Success): 0.12<br/>NPV: $1,000MM"]
Resgo builds towards a powerful endgame: lossless probabilistic portfolio analysis.
When I say lossless, I mean that every prospect in the portfolio is a self-contained Resgo prospect model, which I outlined in some detail in my previous post introducing the software.
Because Resgo runs a full probabilistic model down to specific reservoir targets and producers, the Prospect is a very rich object to aggregate into portfolio-level analysis.
Simulating outcomes at the reservoir level has a side benefit of allowing the sharing of information between connected opportunities. If drilling a prospect shows that a reservoir is charged on a previously unexplored migration corridor, that provides strong evidence regarding the prospectivity of all other opportunities in that corridor. That prospect has significant strategic value, which is difficult to quantify.
At least it was difficult… before I built the tooling to do it with Resgo.
Using an ergonomic data structure and some probabilistic tricks, Resgo can light up a whole portfolio of opportunities like a Christmas tree, and provide first-class decision support for huge, play-opening investments. That means portfolio-level, stochastic commercial metrics, plus standalone and (much more importantly) strategic opportunity value quantification.
My goal with this post is to introduce you to the Resgo portfolio analysis capabilities, and by the end of it, convince you that you should drill a strongly negative EMV prospect, using a fully worked example.
The first ingredient is explaining how information can flow between Resgo prospects.
Dependency mechanics
I’m going to bring up Bayes again, sorry1.
Dependency in this framing is a connection between two reservoirs. That connection is quantified in simulation using a Bayesian probability update from the prior risk probability (say a 0.5 P(Charge) in the child reservoir) conditional on the outcome at the parent.
Mechanically, the update is applied in odds space:
\[ O_{\mathrm{post}} = O_{\mathrm{prior}} \times \text{LH} \]
or, equivalently, in log-odds space:
\[ \ln_2\left(O_{\mathrm{post}}\right) = \ln_2\left(O_{\mathrm{prior}}\right) + \ln_2\left(\text{LH}\right) \]
where \(O = p / (1 - p)\) is the odds, \(\text{LH}\) is the likelihood ratio, and \(\ln_2\) denotes a base-2 logarithm.
A quick aside on “Bits” of evidence
Using a base-2 logarithm means that the evidence term, \(\ln_2(\text{LH})\), is measured in bits: positive bits increase the odds of success, negative bits decrease them, and zero bits leave the prior odds unchanged.
You’ll have to humor me—I know it seems weird—but this is a very mentally ergonomic way of framing Bayesian probability updates.
Starting from a prior probability of 0.50 as an example, each additional bit doubles the likelihood ratio:
| Evidence | Likelihood ratio | Posterior probability |
|---|---|---|
| -4 bits | 1:16 | 0.06 |
| -3 bits | 1:8 | 0.11 |
| -2 bits | 1:4 | 0.20 |
| -1 bit | 1:2 | 0.33 |
| 0 bits | 1:1 | 0.50 |
| 1 bit | 2:1 | 0.67 |
| 2 bits | 4:1 | 0.80 |
| 3 bits | 8:1 | 0.89 |
| 4 bits | 16:1 | 0.94 |
Operating in this way means that updates are commutative: you can add and subtract bits of evidence to arrive at a final posterior. This is mental Bayes trickery, but is also useful for efficient and interpretable communication of risk dependencies in the context of the portfolio simulator.
“If the Buffet prospect fails on charge, how bad would that be for charge risk at Bonanza?”
“They’re on the same migration corridor so really bad… probably -4 bits.”
“We did see shows on that separate migration corridor connecting to Bonanza though, remember?”
“Fair enough, that’s probably worth 1 bit. -3 bits total then.”
Now, regardless of P(Charge) at Buffet, the information it provides to Bonanza is explicitly communicated.
If, for example, P(Charge) is 0.5 across prospects and Buffet fails on charge, that means Bonanza gets a P(Charge) of 0.11 (killing it). If Buffet is charged though, that increases P(Charge) at Bonanza to 0.89!
See? We can all become Bayesians with some language tricks.
There is a technical wrinkle that positive and negative updates are not necessarily symmetric (relevant example here), so the code should make that explicit, but default to symmetric updates.
So that covers dependency. The next thing that needs explaining is decision gates.
Decision gates
For the portfolio simulation to be coherent, decisions need to be made about whether to drill for each Prospect, based on the information available. That requires point-estimate hurdles. During simulation (traversal of the tree of prospects in sequential order), prospect outcomes bifurcate according to what is observed in the parent. This requires some careful consideration.
Decisions aren’t made stochastically. We can’t just use the simulation result to determine the right path on every iteration, because the decision maker doesn’t know what will happen. That means a decision criterion needs to be specified that emulates the choice the decision maker would have made given the information available.
Examples include a positive risked mean NPV (equivalent to EMV):
\[ \mathbb{E}\left[\mathrm{NPV}_{\mathrm{risked}}\right] > 0 \]
or a positive risked P90 NPV, in exceedance terms (equivalent here to the 10th percentile):
\[ Q_{0.10}\left(\mathrm{NPV}_{\mathrm{risked}}\right) > 0 \]
But it needs to be agreed upon up front for the portfolio simulation to operate. Most companies have defined hurdles like this in place, but there may be situations where hurdles are prospect specific.
Luckily, because Resgo simulates everything in a single integrated chain, these decision metrics will be consistently applied to rigorously defined stochastic ranges of NPV. The information that the simulated decision maker has access to is the prospect model itself, with its risk factors adjusted according to the upstream outcomes observed.
Simulation process
Resgo portfolio analysis simulates the entire portfolio tree in a forward pass, adjusting risk factors based on success/failure outcomes in parent nodes, then runs the decision gating logic on the results to determine which prospects get drilled and which get rejected.
We can then aggregate the portfolio-level NPV to assess its overall economic value and uncertainty. Perhaps more importantly, we can analyze each individual prospect in a new level of detail. This detail is what I’m calling strategic value quantification.
Strategic value
Prospect strategic value is the standalone value of the prospect, plus any downstream value it creates through information acquisition.
That information is valuable for two reasons:
- Reservoir success observations propagate to child prospect reservoirs, boosting their respective risk factors. This may shift a prospect from subeconomic to clearly economic, opening up a previously undrillable opportunity.
- Reservoir failure observations propagate in the same way, but may lead to prospects being rejected on the basis of updated risk factors, avoiding the cost of drilling dry holes.
This means that a standalone prospect with negative NPV—maybe due to a low P(Success)—can have its downstream value quantified and summed to make it clearly full-cycle economic, even if it is not drillable on its own merits.
For example:
Hear me out.
Bridge is a high-risk, low-return prospect. It will probably fail, and it’s a small closure. It’s a dog.
But if Buffet were successful, you’d be crazy not to drill Bridge next.
This is the crazy senior geologist speaking. He has a mad twinkle in his eye, and he knows nobody will listen, but he knows he is right, dammit.
Why is he right?
Because the information that Bridge provides, expensive as it may be, has huge upside.
A success at Bridge would boost the P(Success) of Bonanza, a high-risk, high-reward prospect that nobody is considering because “there is no migration that way”.
Bridge is a play opener, it has several follow-ups, all of which are currently high risk, but high-value.
So you drill it to open up the play. It may fail, but the success case upside is huge.
I’ve been the crazy guy before. I’ve never been able to quantify any of this stuff persuasively. Resgo lets me quantify the whole lot, all the way through to economics, while preserving uncertainty end-to-end. It all flows naturally as a consequence of your decision metrics, and the risks and uncertainties in your portfolio.
Resgo quantifies Bridge’s strategic value, and gives it a very strong tick, for decision makers to ponder.
And the tool isn’t crazy! It’s just uncertainty propagation, Bayesian updating and commercial modelling. Don’t argue with the results, just make sure you verify your inputs.
Now let me try to convince you with a worked example.
Example
Here’s the portfolio tree again, without risks and NPVs as we haven’t calculated them yet:
flowchart TD
Buffet[Buffet]
Buffet --> Cove[Cove]
Buffet --> Ledge[Ledge]
Buffet --> Bridge[Bridge]
Bridge --> Bonanza[Bonanza]
Bonanza --> Crest[Crest]
Bonanza --> Saddle[Saddle]
Bonanza --> Spur[Spur]
My goal with this example will be to live demo the sequence I spelled out in the previous section on strategic value.
This is all make-believe, but what I want to try and illustrate is that standalone prospect economics is insufficient for good opportunity ranking or decision making. These prospects will look far too risky to drill on their own, but at the portfolio level, they warrant serious consideration.
First, let’s define these prospects. All prospects will share the same set of reservoir targets, named “Archer”, “Boulder”, “Canyon” and “Drift”.
This will be a bit of a repetitive section, so feel free to look through one prospect, then skip ahead.
Prospects
Buffet
Buffet is a risky but high upside prospect that is the overall play opener for the portfolio. The biggest concern the team has is with charge, as they are not convinced a migration pathway exists at this location. The trap size is also a big uncertainty, leading to wide uncertainty in outcomes.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.64 | 116.0 | 8.7 | 22.8 | 89.4 | 234.3 | 422.4 |
| Solution Gas (mscf) | Total Volumes | 0.64 | 217.6 | 14.5 | 38.1 | 162.2 | 463.0 | 881.3 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.34 | 49.0 | 7.4 | 12.3 | 35.3 | 100.5 | 244.6 |
| Boulder | 0.33 | 57.9 | 11.6 | 18.7 | 41.0 | 124.2 | 225.1 | |
| Canyon | 0.32 | 41.6 | 7.6 | 11.6 | 29.0 | 87.2 | 140.1 | |
| Drift | 0.30 | 82.8 | 9.7 | 19.1 | 58.6 | 169.5 | 446.8 | |
| Solution Gas (mscf) | Archer | 0.34 | 94.2 | 10.5 | 19.0 | 63.6 | 202.7 | 495.4 |
| Boulder | 0.33 | 107.6 | 16.7 | 27.4 | 72.4 | 243.6 | 531.8 | |
| Canyon | 0.32 | 76.1 | 10.6 | 20.1 | 52.3 | 155.8 | 346.8 | |
| Drift | 0.30 | 155.6 | 11.0 | 29.8 | 107.8 | 290.1 | 997.2 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.24 | -93 | -1027 | -813 | -40 | 537 | 1895 |
Cove
Cove is a small, low-risk, single-producer, near-field exploration opportunity that success at Buffet opens up.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.64 | 90.6 | 13.5 | 26.4 | 79.0 | 169.5 | 262.2 |
| Solution Gas (mscf) | Total Volumes | 0.64 | 169.9 | 19.1 | 39.7 | 145.4 | 329.1 | 586.2 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.34 | 36.9 | 10.1 | 16.4 | 32.6 | 62.6 | 96.9 |
| Boulder | 0.33 | 47.3 | 17.7 | 22.8 | 41.4 | 82.1 | 131.0 | |
| Canyon | 0.32 | 33.9 | 10.8 | 15.7 | 30.3 | 59.0 | 78.3 | |
| Drift | 0.30 | 62.2 | 16.0 | 24.5 | 51.7 | 107.0 | 210.8 | |
| Solution Gas (mscf) | Archer | 0.34 | 71.0 | 12.9 | 24.4 | 57.5 | 133.1 | 240.7 |
| Boulder | 0.33 | 88.1 | 19.5 | 32.1 | 69.4 | 170.2 | 330.1 | |
| Canyon | 0.32 | 62.0 | 16.5 | 25.6 | 54.8 | 103.0 | 195.2 | |
| Drift | 0.30 | 117.1 | 18.2 | 35.5 | 91.2 | 217.8 | 476.5 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.62 | 208 | -23 | -20 | 163 | 554 | 755 |
Ledge
Ledge is a marginal single producer near field exploration opportunity.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.64 | 30.2 | 4.5 | 8.8 | 26.3 | 56.5 | 87.4 |
| Solution Gas (mscf) | Total Volumes | 0.64 | 56.6 | 6.4 | 13.2 | 48.5 | 109.7 | 195.4 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.34 | 12.3 | 3.4 | 5.5 | 10.9 | 20.9 | 32.3 |
| Boulder | 0.33 | 15.8 | 5.9 | 7.6 | 13.8 | 27.4 | 43.7 | |
| Canyon | 0.32 | 11.3 | 3.6 | 5.2 | 10.1 | 19.7 | 26.1 | |
| Drift | 0.30 | 20.7 | 5.3 | 8.2 | 17.2 | 35.7 | 70.3 | |
| Solution Gas (mscf) | Archer | 0.34 | 23.7 | 4.3 | 8.1 | 19.2 | 44.4 | 80.2 |
| Boulder | 0.33 | 29.4 | 6.5 | 10.7 | 23.1 | 56.7 | 110.0 | |
| Canyon | 0.32 | 20.7 | 5.5 | 8.5 | 18.3 | 34.3 | 65.1 | |
| Drift | 0.30 | 39.0 | 6.1 | 11.8 | 30.4 | 72.6 | 158.8 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.31 | -11 | -195 | -120 | -25 | 119 | 243 |
Bridge
Bridge is a high-risk and low-reward prospect, with a single producer.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.23 | 33.3 | 6.6 | 10.3 | 24.9 | 69.5 | 112.1 |
| Solution Gas (mscf) | Total Volumes | 0.23 | 65.1 | 8.9 | 16.5 | 47.0 | 131.4 | 254.3 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.08 | 20.8 | 4.6 | 7.6 | 16.9 | 45.8 | 57.3 |
| Boulder | 0.10 | 24.5 | 8.0 | 11.6 | 20.5 | 44.7 | 55.1 | |
| Canyon | 0.08 | 17.5 | 6.9 | 8.6 | 14.8 | 29.1 | 44.6 | |
| Drift | 0.06 | 34.6 | 10.0 | 12.4 | 26.6 | 66.6 | 119.2 | |
| Solution Gas (mscf) | Archer | 0.08 | 42.8 | 5.4 | 13.6 | 36.2 | 86.2 | 141.7 |
| Boulder | 0.10 | 48.3 | 8.8 | 17.5 | 35.4 | 104.6 | 136.7 | |
| Canyon | 0.08 | 36.0 | 9.7 | 13.0 | 29.5 | 57.9 | 165.7 | |
| Drift | 0.06 | 62.0 | 12.5 | 24.6 | 48.4 | 104.0 | 262.7 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.08 | -37 | -216 | -91 | -35 | -35 | 211 |
Bonanza
Bonanza has the largest upside opportunity in the portfolio, but is currently written off as extremely high risk.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.23 | 1321.2 | 283.5 | 469.2 | 1081.5 | 2620.2 | 3871.8 |
| Solution Gas (mscf) | Total Volumes | 0.23 | 2582.3 | 423.7 | 750.0 | 1910.8 | 5010.6 | 8976.1 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.08 | 794.7 | 271.6 | 351.2 | 704.3 | 1388.0 | 1776.6 |
| Boulder | 0.10 | 992.8 | 377.1 | 559.6 | 878.7 | 1711.2 | 1911.1 | |
| Canyon | 0.08 | 723.6 | 302.4 | 388.9 | 656.5 | 1160.5 | 1500.8 | |
| Drift | 0.06 | 1344.1 | 471.2 | 578.0 | 1157.2 | 2102.6 | 3758.3 | |
| Solution Gas (mscf) | Archer | 0.08 | 1622.7 | 284.9 | 616.1 | 1421.4 | 2722.4 | 4704.6 |
| Boulder | 0.10 | 1941.0 | 401.2 | 758.4 | 1547.1 | 3772.6 | 4885.1 | |
| Canyon | 0.08 | 1491.0 | 435.2 | 602.7 | 1312.4 | 2273.2 | 6109.2 | |
| Drift | 0.06 | 2441.7 | 565.9 | 1006.0 | 1992.5 | 4217.2 | 8565.9 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.23 | 556 | -60 | -60 | -60 | 2439 | 6672 |
Crest
Crest is a mid-sized three producer follow-up opportunity opened by success at Bonanza.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.23 | 229.2 | 48.2 | 78.5 | 181.3 | 459.8 | 702.3 |
| Solution Gas (mscf) | Total Volumes | 0.23 | 447.8 | 70.1 | 125.9 | 332.0 | 871.2 | 1521.5 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.08 | 139.6 | 41.8 | 58.4 | 121.2 | 269.1 | 338.0 |
| Boulder | 0.10 | 171.0 | 61.8 | 93.1 | 149.3 | 293.0 | 342.2 | |
| Canyon | 0.08 | 123.7 | 50.8 | 64.9 | 106.4 | 202.0 | 276.9 | |
| Drift | 0.06 | 235.0 | 79.0 | 94.5 | 195.3 | 395.9 | 709.1 | |
| Solution Gas (mscf) | Archer | 0.08 | 285.8 | 44.4 | 100.7 | 244.5 | 506.7 | 867.9 |
| Boulder | 0.10 | 335.3 | 66.7 | 126.7 | 259.4 | 678.5 | 862.4 | |
| Canyon | 0.08 | 254.7 | 72.8 | 98.6 | 222.8 | 385.4 | 1090.5 | |
| Drift | 0.06 | 424.6 | 93.8 | 172.1 | 348.2 | 709.3 | 1564.0 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.22 | 132 | -35 | -35 | -35 | 635 | 1795 |
Saddle
Saddle is another mid-sized three producer Bonanza follow-up.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.23 | 188.9 | 39.8 | 65.0 | 150.3 | 376.2 | 575.3 |
| Solution Gas (mscf) | Total Volumes | 0.23 | 369.1 | 58.2 | 104.3 | 273.6 | 718.2 | 1257.5 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.08 | 114.8 | 35.1 | 48.2 | 100.2 | 218.2 | 275.2 |
| Boulder | 0.10 | 141.1 | 51.3 | 77.2 | 123.1 | 241.1 | 279.4 | |
| Canyon | 0.08 | 102.2 | 42.0 | 53.9 | 87.9 | 166.4 | 226.5 | |
| Drift | 0.06 | 193.4 | 65.6 | 78.6 | 161.6 | 322.6 | 577.9 | |
| Solution Gas (mscf) | Archer | 0.08 | 235.1 | 37.1 | 83.0 | 200.8 | 413.0 | 709.5 |
| Boulder | 0.10 | 276.5 | 55.3 | 104.8 | 214.2 | 556.6 | 709.2 | |
| Canyon | 0.08 | 210.3 | 60.3 | 81.9 | 183.5 | 319.6 | 895.3 | |
| Drift | 0.06 | 349.9 | 77.8 | 142.2 | 288.3 | 587.1 | 1274.6 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.21 | 107 | -81 | -35 | -35 | 551 | 1594 |
Spur
Spur is the third mid-sized three producer Bonanza follow-up.
Volumetrics
Total
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | ||||||||
| STOIIP (stb) | Total Volumes | 0.23 | 256.8 | 54.6 | 89.5 | 206.0 | 506.3 | 769.8 |
| Solution Gas (mscf) | Total Volumes | 0.23 | 501.9 | 80.7 | 143.7 | 371.7 | 977.0 | 1724.7 |
By Reservoir
| P(Success) | Mean | P99 | P90 | P50 | P10 | P1 | ||
|---|---|---|---|---|---|---|---|---|
| stream | reservoir | |||||||
| STOIIP (stb) | Archer | 0.08 | 155.4 | 50.4 | 66.1 | 137.1 | 285.1 | 362.4 |
| Boulder | 0.10 | 192.3 | 71.2 | 106.5 | 167.7 | 328.9 | 375.2 | |
| Canyon | 0.08 | 139.7 | 57.8 | 74.5 | 122.5 | 226.0 | 301.6 | |
| Drift | 0.06 | 262.3 | 91.0 | 111.2 | 221.9 | 426.0 | 762.5 | |
| Solution Gas (mscf) | Archer | 0.08 | 317.8 | 52.5 | 114.6 | 275.4 | 544.8 | 943.8 |
| Boulder | 0.10 | 376.6 | 76.6 | 144.2 | 294.1 | 747.4 | 958.3 | |
| Canyon | 0.08 | 287.6 | 83.1 | 113.8 | 250.3 | 441.4 | 1205.0 | |
| Drift | 0.06 | 475.3 | 107.5 | 194.3 | 390.1 | 807.3 | 1682.3 |
Economics
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Nominal Risked NPV | 0.22 | 146 | -35 | -35 | -35 | 701 | 1864 |
Risky business
You’ll notice this entire portfolio is very high risk.
That is because all risk factors are being applied with our current state of information. The entire portfolio has high charge risk, a P(Charge) of 0.4 for Buffet, Cove, Ledge and Bridge, and an even harsher 0.1 for Bonanza and its children, making them all a bad bet. This is an untested migration corridor in our exploration acreage.
The opportunities don’t necessarily hold up on their own merits. Buffet, the entire play opener, is negative EMV! But, as the results will show, it is a very good idea to drill it (assuming the loss in the event of failure is survivable).
This is why strategic value is so important. The strategic, full-cycle value of these prospects will be simulated on a portfolio basis, and that will provide us with a richer picture for decision support.
Portfolio model
The portfolio manages all these prospects, along with their parent-child relationships and information sharing for risk factors. For simplicity we will just model information sharing for P(Charge), but a user could model relationships between reservoir risk factors as they see fit.
Charge dependency
The charge dependency between reservoir intersections is intuitive. Information we acquire on a migration corridor (observing charge) changes the risk factors applied to any child prospects in the portfolio. In this example we give charge +3 bits of information. So if Buffet fails on charge, the whole portfolio dies, but if it succeeds, the portfolio lights up like a Christmas tree, and we follow the opportunity branches.
Importantly, the information flowing is not contingent on commercial success; it is contingent on the observation regarding that particular risk factor. If Buffet is charged, but tiny and subeconomic, that doesn’t change anything for the child prospects; what matters is that now we know they are probably charged!
Because Resgo is simulating prospects at that level of detail, that detail can be propagated through the portfolio.
Simulation process
It varies with the number of reservoirs and producer count, but because Resgo is all multithreaded, each Prospect takes about 3-4 seconds to run end-to-end. That means the entire portfolio simulation runs in around 30 seconds.
This iteration speed is a key design standard I am working to preserve. I want new prospects, different dependency assumptions, and differing parent-child relationships all testable in minutes, not hours.
Taken to a heavy enterprise deployment—say, a large company with an opportunity register of hundreds of prospects spanning various basins—distributed computation of each subtree (one node per independent chain of prospects), where each node is itself multithreaded, should mean portfolios are effectively interactive for an end user.
Change some assumptions around, rerun. Watch the portfolio update whenever a new prospect is added to the register. Test whatever galaxy-brained development sequences you can come up with.
… Or run discrete optimization algorithms to find the best strategy automatically. That may be where I go with this next.
Visualizing results
The Resgo Portfolio, as it turns out, is quite a complicated object to visualize. Every node in the tree is stochastic, and outcomes bifurcate via the information sharing between nodes. Bifurcation in this case effectively means very high success probability vs almost certain failure, given how sensitive we are to charge risk.
That creates very wide uncertainties. That uncertainty is real, but it is long-tailed and (by prospect) bimodal.
Portfolio cash flow
Here is the portfolio-aggregated stochastic cash flow plot, presented just as it is at the Resgo prospect level.
Portfolio mean case
And here is the mean portfolio case, partitioned by prospect:
This might be (and I’m really not sure yet) the best way to visualize the portfolio value through time. I say I’m not sure because taking the mean across the whole simulated array by month is smoothing through a lot of complexity. I can’t stack prospects while also visualizing uncertainty, so a mean timeline is a good compromise even though the mean is not actually a case—it never appears in the simulated array.
I could use the P50 (median) case, but what do we actually mean by P50 at this level of analysis? I can’t take the P50 array of each individual prospect, because the actual P50 portfolio-level case is made of an ensemble of uncertain outcomes, none of which represent prospect-level P50 outcomes. There is also the problem of how nonrepresentative the P50 is when dealing with long-tailed probability distributions, which I’ll touch on later.
This plot above is, more or less, a stacked time-series EMV plot. That is useful because it indicates prospect-level expected performance. For example, the Buffet prospect (green in the plot above) is negative EMV as it ends below zero. Likewise with Bridge (orange). The large wedge created by Bonanza (blue) gives the user an impression of how strategically important Bonanza is to the portfolio value.
But it also… hides a lot.
Some brainstorming and refinement will be needed here, I think.
It’s pretty cool though.
Decision summary
| Decision | |
|---|---|
| node | |
| Buffet | strategic |
| Cove | accepted |
| Ledge | rejected |
| Bridge | strategic |
| Bonanza | accepted |
| Crest | accepted |
| Saddle | accepted |
| Spur | accepted |
You’ll notice that the decisions assigned to Buffet and Bridge in the table above are strategic. That is because these prospects are not drillable on their own merits; they have negative standalone EMV. Considering downstream opportunity creation, however, made it a clear decision to drill Buffet to open the play, and Bridge to open up the Bonanza subplay.
The other prospect that looked highly questionable on a first pass, Ledge, was rejected in the portfolio, even conditional on Buffet demonstrating charge. It was too small to justify.
If Ledge opened up downstream opportunity, it would likely be set to strategic as well. From this perspective it is worth cataloguing every opportunity, regardless of whether they stack up commercially on their own, as they may provide pathways to further exploration if new opportunities are identified down the line.
Portfolio risked NPV
Total
Here is the range of portfolio-aggregated NPV:
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| Total Nominal Risked NPV | 0.48 | 627 | -1114 | -661 | -49 | 2691 | 7870 |
By prospect
Things get interesting when we split by prospect. When we look at prospect value, we can report standalone NPV (the commercial value of the prospect, taken in isolation), but we can also report full-cycle value, which considers the value of the opportunities that the prospect opens up via its dependencies.
Standalone
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| prospect | |||||||
| Buffet | 0.24 | -93 | -1027 | -813 | -40 | 537 | 1895 |
| Cove | 0.63 | 181 | -19 | -19 | 133 | 463 | 690 |
| Bridge | 0.16 | -24 | -187 | -105 | -30 | 60 | 226 |
| Bonanza | 0.23 | 435 | -49 | -49 | -49 | 1804 | 5586 |
| Crest | 0.14 | 42 | -26 | -26 | -26 | 228 | 1012 |
| Saddle | 0.14 | 36 | -46 | -25 | -25 | 197 | 959 |
| Spur | 0.14 | 50 | -23 | -23 | -23 | 234 | 1179 |
Notice that, on a standalone basis, Buffet and Bridge are negative mean NPV. They would not get drilled based on our decision metric from a standalone economic perspective.
Full-cycle
| P(Commercial) | Mean | P99 | P90 | P50 | P10 | P1 | |
|---|---|---|---|---|---|---|---|
| prospect | |||||||
| Buffet | 0.48 | 627 | -1114 | -661 | -49 | 2691 | 7870 |
| Cove | 0.63 | 181 | -19 | -19 | 133 | 463 | 690 |
| Bridge | 0.34 | 539 | -304 | -158 | -153 | 2150 | 7209 |
| Bonanza | 0.33 | 563 | -122 | -122 | -122 | 2169 | 7238 |
| Crest | 0.14 | 42 | -26 | -26 | -26 | 228 | 1012 |
| Saddle | 0.14 | 36 | -46 | -25 | -25 | 197 | 959 |
| Spur | 0.14 | 50 | -23 | -23 | -23 | 234 | 1179 |
But look at their full-cycle value! Buffet and Bridge were negative before, but from a full-cycle perspective, they are the most valuable opportunities in the whole portfolio!
Strategic value summary
| Decision | Mean (Standalone) | Mean (Downstream) | Mean (Full Cycle) | |
|---|---|---|---|---|
| prospect | ||||
| Buffet | strategic | -93 | 720 | 627 |
| Cove | accepted | 181 | 0 | 181 |
| Bridge | strategic | -24 | 563 | 539 |
| Bonanza | accepted | 435 | 128 | 563 |
| Crest | accepted | 42 | 0 | 42 |
| Saddle | accepted | 36 | 0 | 36 |
| Spur | accepted | 50 | 0 | 50 |
This table breaks this down explicitly, focusing on mean outcomes. The downstream value here is the sum of child prospect NPV (simulated with end-to-end Resgo prospect models, remember), excluding rejected child prospects (as ignoring subeconomic options does not incur any cost).
Buffet and Bridge are listed as strategic because they are drillable on their full-cycle value, not their standalone value.
The plot below is helpful for summarizing this information, but requires some explanation to avoid confusion (for me and you).
Standalone Success NPV is the NPV conditional on the prospect geological success. We need to present it that way, because we are trying to capture opportunity, and the P(Geological Success) is changing during portfolio simulation.
Full Cycle Success NPV is the Standalone Success NPV plus the risked sum of downstream opportunity NPV (including geological failure cases). We can’t assume downstream prospects will succeed conditional on the parent prospect, so they must remain risked to be accurately captured in the full-cycle value of the parent. Rejected prospects are also left out here, as there is no sense in penalizing a parent prospect with its undrillable child prospects, the only ones that matter are the ones we would pursue.
Headache? Don’t worry, me too.
Here’s the plot:
Notice the change in Buffet and Bridge, in particular. A bunch of high-side potential is captured in the Full Cycle Success NPV that is missed in standalone economics.
Neat!
Overall thoughts
Okay, there is a lot to unpack here.
The first thing that might jump out is that the commercial outcomes at the portfolio- aggregated level are incredibly uncertain.
This isn’t surprising, if you think about it. We don’t even know if this corridor is charged. That means we have anything between zero value here, and potentially eight decently sized prospects that could be worth a combined $3 billion in NPV. That is going to be a very wide range.
Furthermore, at each level in the tree we have risk bifurcation, which means prospect outcomes get split into two paths. This naturally widens portfolio-level uncertainty.
This is all a completely consistent logical view of the opportunities in the portfolio though.
To spell out what is happening a bit more:
If Buffet fails, the entire portfolio is ruled out. Too risky on charge. That is a simple story to wrap your head around.
If Buffet succeeds, that boosts the P(Charge) of its children Cove, Ledge, and Bridge. That doesn’t mean they all succeed (other risk factors are at play) but they become much more likely to. This is a more complicated story, because it puts many different possibilities on the table, all of which are part of the simulated portfolio distribution.
Contingent on Buffet’s success, Bridge gets drilled. If Bridge is charged, that information flows to Bonanza and its children. These prospects were written off as extremely high risk before drilling with P(Charge) of 0.1. The success upstream at Bridge, even though Bridge on its own is subeconomic, opens up the Bonanza play. That has huge strategic value, as Bonanza is the biggest prospect in the portfolio on an unrisked basis.
Because of the dependencies between prospects in the portfolio, standalone economic metrics aren’t enough to capture opportunity value. Most of the value in Buffet is not standalone; it is in the downstream information it provides to child prospects, connected via the P(Charge) dependency.
Similarly, Bridge would never get drilled on its own merits—it would disappear in the rankings of a naive opportunity register—it provides value via its downstream consequences. These complicated arguments are very difficult to make in normal circumstances, especially under uncertainty. This is my best attempt at making the whole simulated system explicit.
And it works pretty damn well, if you ask me.2
A note on means and medians
Something else this exercise has clarified for me is that summary statistics like the mean and median are horribly reductive when uncertainties are this wide. The whole point of drilling Buffet and opening up this play is the exposure to upside. On a mean (expected) basis, the decision is supported because the portfolio is NPV positive… but that isn’t the real reason for doing it.
According to the model, there is a 10% chance this portfolio is worth more than $2.7 billion in net present value. The mean is $580 million.
The range is really important to keep in mind, because we aren’t going to discover the mean portfolio outcome; we’re going to be strapped onto an uncertainty rocket with no way of knowing where we end up. Considering the downside exposure vs upside exposure is more informative than an abstract mean that will never happen.
In the previous post on Resgo prospect simulation, I brought up loss functions, and I think they are even more relevant at this level of analysis.
As for the median… throw it out. It is very misleading because the outcome NPV distributions we are considering are so long-tailed. It just doesn’t make sense as a metric if you take uncertainty seriously. So the mean is lossy, but the median is not representative.
So the stochastic representation is the only reliable output of the model, in my view. The challenge is making it interpretable.
Portfolio optimization
I haven’t built it yet (maybe it’ll be the topic of my next post on Resgo), but this simulation chain also creates a very powerful optimization surface.
A discrete optimization model—shifting prospect drill order, wells per prospect, delays—under capital allocation and infrastructure constraints, where the target is discounted cash flows (so the benefit of acting sooner is implicit in the optimization), is a pretty compelling proposition.
It might be a nightmare to build, and it might light my mini PC on fire, but I’ll likely give it a go soon.
Where is the D-Tree?
This whole simulation can be thought of as a stochastic decision tree, with Bayesian updates informing success/failure at each node, and full-cycle economics driving drill/walk decisions. I don’t have a pretty plot presenting it that way, but mechanically, that is what it is doing.
The pretty plot will likely be needed as part of the interpretability piece.
Closing thoughts
I’m not sure how to close this out, but I will say that I am very happy with how portfolio simulation in Resgo has turned out.
It has been a “capstone” feature in the back of my mind from the beginning, but I can’t claim that I designed for it. I was lucky that the implementation fit so well into Resgo’s architecture. Treating Prospects as nodes in a tree, and simply simulating that tree with a few in-loop alterations based on risk dependencies, is a pretty elegant way of handling portfolio analysis, and it leverages what Resgo already offered, essentially for free.
The part I am now unsure about is how to rigorously define all these metrics. Reporting quantities like Standalone Success NPV, Full Cycle Success NPV, portfolio-aggregated NPV, and whatever other commercial metrics I will add later, start to build up and cause confusion. Handling geological success as a commercial outcome (i.e. an NPV-negative dry hole) changes the semantics of prospect evaluation, because traditionally the failure case would be captured as a failure arm in a D-Tree. I don’t think that is the elegant approach here—I can go a lot further by naturally capturing a range in a single simulated array and reasoning about it downstream—but there are definitely some semantic rough edges to figure out.
My next step, I think, will be to start building a UI—refining the simulation code itself is probably the most important thing to be focused on—but I also need to be able to get Resgo into other people’s hands at some point, unless I only use it in a consultancy capacity.
I do like the consultancy approach, at least at first, because it will allow me to field test with real opportunities, and iron out any wrinkles I’ve left in the process. There is a lot of process here, so it is inevitable that I’ve left some mess behind me while building it.
To round this out, here is how my AI agent summarizes the Resgo value proposition (because I’m so bad at doing it myself, and I was interested):
Value Proposition
Resgo is trying to do things that are extremely challenging to achieve rigorously with spreadsheet workflows and disconnected prospect evaluations:
- Connect subsurface uncertainty to commercial outcomes. Volumetrics, risking, development concepts, cash flows, and decision gates all live in one simulation chain.
- Expose the real shape of uncertainty. Prospect outcomes are not reduced to a single deterministic case; downside, upside, skew, and long tails remain visible.
- Give technical teams a common language for value. Geoscience judgement, Bayesian updating, and economic decision-making are translated into a shared quantitative framework.
- Make dependency assumptions explicit. Geological dependencies between prospects are encoded directly at the reservoir and risk-factor level, instead of living as vague narrative in slide decks.
- Evaluate drill/walk decisions dynamically. Each prospect is assessed using the information available at that point in the portfolio, including what has been learned upstream.
- Quantify strategic value, not just standalone value. Prospects can be valued for the opportunities they unlock, not only for their own direct economics.
- Turn exploration strategy into an auditable model. The logic behind a sequence of wells can be inspected, challenged, revised, and rerun.
- Support better capital allocation. Resgo creates the simulation surface needed to rank opportunities, test development sequences, and eventually optimize portfolio choices under real constraints.
… Thanks AI, I agree.
Thanks for reading!