A bulk carrier berthed at a jetty at sunset, with other vessels waiting at anchorage
General what-if model · Version 2

When Does Jetty Congestion Constrain Capacity?

A berth is not full at 100%. Vessels start queueing long before that, and every call blocks the berth for more than the cargo operation. This page explains the method, gives every formula, takes a full set of parameters, and shows what an additional jetty, ship-to-ship (STS) transfer, or a better berth schedule can do about it.

Go to parameter setupRead the method first
Scope: any jetty or quay, any cargo mixInputs: editable, generic example loadedRuns: in your browser, nothing is stored or sent
The short version

Seven ideas behind this model

01

Occupancy is not congestion. BOR says how full the berth is. Waiting time says how much queueing it causes, and it rises steeply well before 100%.

02

A call blocks the berth for more than cargo work. Mooring, preparation, closing, waiting for a departure window, unmooring, and clearing the berth all count.

03

Variability matters as much as volume. Irregular arrivals and uneven berth times create queues even when average capacity looks adequate.

04

More berths change the tipping point. Two berths tolerate a higher average occupancy than one, because a free berth can take the next vessel.

05

STS relieves the berth, not the system. Mother vessels wait at anchorage, and lighters still need somewhere to discharge. The model loads both.

06

One clash becomes a chain. A late or delayed vessel pushes the next one, which pushes the one after it. The schedule view shows who waits, how long, and why.

07

Every number is yours. The example values are generic placeholders. Replace them with your own timestamps and vessel-call history.

1
The question

Why a berth is “full” long before 100%

Berth occupancy tells you how much of the year a berth is busy. It does not tell you how long a vessel waits for it, and waiting is what costs money.

Berth occupancy is usually calculated as vessel calls × berth time ÷ available berth time. At 100% the berth has no free time at all, so any figure above 100% is physically impossible. But vessels do not arrive on a perfect timetable, and they do not take identical time at the berth. Random gaps and overlaps create a queue at anchorage. That queue grows slowly at low occupancy and then sharply.

Analytical work on container terminals relates berth occupancy to the ratio of waiting time to service time, and notes that the number of berths required depends on the distributions of ship arrivals and service times, including peak factors (Radmilović and Jovanović, 2006). The tipping point depends on the number of berths, how regular the arrivals are, and how uneven berth times are. This model calculates it for your own numbers.

Two further effects are easy to miss. First, berth time is more than cargo time: the berth is blocked while the vessel moors, while it is prepared for cargo work, after cargo work finishes, while it waits for a pilot or tide window to leave, and while it unmoors. Second, many BOR figures count only port stay, from berthing to departure, so waiting at anchorage sits outside the number and a berth can report a comfortable BOR while vessels queue outside.

One ship at a jetty and several ships waiting at anchorage at dusk
Illustration: one berth in use, others waiting at anchorage. Visual generated with Microsoft Copilot.
What this page lets you doSet up a jetty with any number of berths and any vessel classes. See where average waiting crosses the level you accept. Add a second jetty or an STS anchor spot and see how much relief it gives. Then put real arrival dates into a schedule and watch one clash push every later vessel.
2
Method

From one berth call to a capacity answer

The model builds up from a single call, adds the queue, then tests options. The schedule view uses the same call definition on real dates.
Step 1Calls. Calls per year by vessel class, with growth.
Step 2Phases. Mooring, preparation, cargo, closing, window wait, unmooring, gap.
Step 3Blocked time. Berth-hours per call and per year, then utilization ρ.
Step 4Queue. Average wait from ρ, berths, and variability.
Step 5Tipping point. The occupancy where waiting hits your threshold.
Step 6Options. Additional jetty, STS, shorter phases, wider windows.
Step 7Schedule. Real arrivals, clashes, snowball delays.

Your average call, built from the parameters below

The bar updates as you edit the setup. Everything except the cargo operation is time the berth is blocked without moving cargo.

Why phases matter

A phase that blocks the berth is worth the same per hour as cargo work. Moving work off the berth (documents at anchorage, pre-staged equipment, parallel tasks) raises capacity without building anything. The “value of an hour” table in the results ranks the phases.

Why a schedule view

The queue formula gives long-run averages. A schedule shows one concrete period. When two vessels clash, the second one starts late, so its berth is occupied later, so the next vessel waits longer. The Gantt shows that chain.

3
Formulas

Every calculation, in order

Symbols: i = vessel class, y = year, f = facility (main berths, additional jetty, STS anchor spots).

1Vessel calls

N(i,y) = Calls(i) × (1 + Growth)^y × DemandLever Main berths : N × (1 − sJ − sS) Add. jetty : N × sJ sJ = share routed to the additional jetty STS : N × sS sS = share moved to STS (eligible classes only)

Shares only apply from each option’s opening year. If sJ + sS exceeds 100% for a class, both are scaled down proportionally.

2Phases of one berth call

Ops(i,f) = Cargo(i) ÷ ( Rate(i,f) × (1 − Downtime(i)) ) Rate(main) = Rate    Rate(jetty) = Rate × JettyFactor    Rate(STS) = STS rate, or Rate × STSFactor a = approach & mooring p = pre-ops preparation Ops = cargo operations po = post-ops closing u = unberthing gap = berth clearing gap

“Berthing” means the vessel is alongside, at the end of a. Downtime is a share of operating time, so productive hours are grossed up by 1 ÷ (1 − Downtime). Rates are productivity while working, not averages that already include waiting.

3Pilot, daylight, and tide windows

A manoeuvre may only START inside an open window [o, c] (clock hours 0–24). Closed gap j = hours from window j closing to the next opening (cyclic over 24 h) E (expected delay) = Σ gap_j² ÷ 48 Example: one window 06:00–18:00 → gap = 12 h → E = 12² ÷ 48 = 3 h WindowIdle(i) = ( ToBerthing ? E : 0 ) + ( ToUnberthing ? E : 0 ) [only classes with Window = Yes]

E is the average wait for a manoeuvre that wants to start at a random time of day. In steady state the berth stays blocked or idle for that time, so it counts as capacity loss. The schedule view uses the actual clock times instead of this average.

4Blocked time, annual berth-hours, and utilization

Blocked(i,f) = a + p + Ops + po + u + gap + WindowIdle BerthHours(f) = Σi N(i,f) × Blocked(i,f) Available(f) = Berths × 8,760 × (1 − PlannedUnavailability) ρ(f) = BerthHours ÷ Available blocked ratio (must be below 1) Cargo-ops ratio = Σ N × Ops ÷ Available BOR alongside = Σ N × (a + p + Ops + po + u) ÷ Available Non-productive share = 1 − Σ N × Ops ÷ BerthHours

Blocked ratio ρ is the figure to compare with a planning target. BOR alongside counts only the time the vessel is attached to the jetty, so ρ is always at least as high.

5Queue at a facility

ES = Σ p_i × Blocked_i mean blocked time per call (h) Cs² = Σ p_i × Blocked_i² × (1 + CV_i²) ÷ ES² − 1 variability of berth time from the class mix A = c × ρ offered load, c = number of berths Erlang B: B(0)=1; B(k) = A×B(k−1) ÷ ( k + A×B(k−1) ) for k = 1 … c Erlang C: P(wait) = B(c) ÷ ( 1 − ρ × (1 − B(c)) ) Wq = P(wait) ÷ ( c × (1 − ρ) ) × ES × ( Ca² + Cs² ) ÷ 2 average wait before berthing (h)

p = share of calls in each class, CV = variation of berth time inside a class, Ca² = squared variability of arrival gaps (1 = random arrivals, lower = scheduled). Wq is the Erlang C waiting time scaled by (Ca² + Cs²) ÷ 2, the Allen–Cunneen approximation. If ρ ≥ 1 the queue is unstable and wait is unbounded.

Worked example, computed liveOne berth, 140 calls a year, average blocked time 50 h, Ca² = 1, Cs² = 0.25: ρ = , average wait = h, probability of waiting = .

6Tipping point, effective capacity, and the value of an hour

Find ρ* such that Wq(ρ*) = Threshold (solved numerically, bisection) Tipping blocked ratio = ρ* Effective capacity = ρ* × Available ÷ ES calls per year at the threshold Planning capacity = Target × Available ÷ ES calls per year at your target ratio Nominal capacity = Available ÷ ES calls per year at ρ = 100% Headroom = Effective capacity ÷ N − 1 (negative means congestion already constrains) Value of an hour saved : NewES = ES − hours saved (capped at the phase length) NewPlanningCapacity = Target × Available ÷ NewES

“Congestion constrains capacity” means average waiting exceeds your threshold, or the queue is unstable. The model also reports a peak-month view: ρ(peak) = ρ × PeakFactor.

7Additional jetty

Calls to jetty = N × sJ(i) Ops at jetty = Cargo ÷ ( Rate × JettyFactor × (1 − Downtime) ) Phases a, p, po, u, gap as in step 2 Then repeat steps 4 to 6 for the jetty with its own berths, availability, and opening year.

8STS transfer (days-based, with lighters)

STS Blocked(i) = aS + pS + Ops(STS) + poS + uS + gapS STS phases are global inputs STS capacity = AnchorSpots × 8,760 × (1 − Unavailability) STS utilization = Σ N(STS) × Blocked ÷ Capacity (queue at anchorage from step 5) Main-berth relief = removal of N(STS) × Blocked_main Lighter discharge ashore: N(STS) × Trips calls of ShoreHours each, added to the jetty you choose

The lighter-cycle helper in the setup converts lighter capacity, loading rate, sailing time, shore unloading rate, and the number of lighters into mother-vessel hours and shore berth hours.

9Waiting cost

WaitingVesselDays = N × Wq ÷ 24 WaitingCost = WaitingVesselDays × DelayCostPerVesselDay

Compare the “do nothing” cost with the plan to see what congestion costs, then set that against the cost of the option. Capex is not modeled.

10Berth schedule (first come, first served)

Vessels are processed in ETA order. For each vessel and each allowed berth l: Start(l) = max( ETA, Free(l) ) Mooring start M(l) = next open window at or after Start(l) (if the window applies to berthing) Pick the berth with the earliest M. STS is used only if the best jetty wait exceeds the STS trigger and STS starts earlier. Alongside = M + a Ready = M + a + p + Ops + po Unmooring start = next open window at or after Ready (if the window applies to unberthing) Cast-off = Unmooring start + u Free(l) = Cast-off + gap Wait = M − ETA = (Free − ETA, if positive: clash) + (window wait) Blocked by = the vessel that last held the chosen berth, if Free > ETA Chain level = 0 if no clash; otherwise 1 + chain level of the blocking vessel (2 or more = snowball) ETB shift = M(what-if) − M(base)

Waiting at anchorage does not block the berth. A reserved block (maintenance) is a vessel with zero phases and an operating-hours override.

4
Jetty and STS options

If the main berth runs short: three levers

Start with the cheap lever, add capacity only where the numbers say the tipping point is crossed, and use STS as a bridge with its own limits.
A lighter alongside a mother vessel at anchorage during ship-to-ship transfer
Illustration: ship-to-ship transfer at anchorage. Visual generated with Microsoft Copilot.

What the model compares

  • Main berth(s): where every vessel goes if you do nothing.
  • Additional jetty: a second facility with its own berths, opening year, availability, and handling rate relative to the main berth. It takes the share of each class you assign.
  • STS anchor spot(s): mother vessels transfer cargo to or from lighters at anchorage. It has its own phases, rate, and a days-based capacity, and the lighters may add berth time at a jetty.

Each facility is its own queue. The model compares “do nothing” against your plan year by year, then finds the tipping point and the waiting cost.

Additional jetty

Adding a berth raises the tolerable occupancy, so the capacity gain is larger than its nominal berth-days. Check its opening year against the year congestion starts, and which classes can really use it (draft, cargo gear, and berth length are not modeled).

STS transfer

STS relieves the jetty, not the system. Watch the anchor-spot utilization and the lighter load: lighters that discharge at the same jetty can cancel the relief. Weather stoppages beyond the availability input are not modeled.

Operating levers

Shorter phases, wider pilot or tide windows, steadier arrivals, and higher handling rates cost less than a new facility. The levers in section 6 and the schedule in section 7 show how far they go.

The honest scopeThis is a planning model on annual averages with a standard queueing approximation, plus a deterministic first-come-first-served schedule. It tells you when congestion is likely to constrain capacity and roughly how much relief an option gives. It does not replace a berth-planning simulation or your own port-stay records.
5
Parameter setup

Enter your parameters first

Fill in or replace every panel before reading the results. The generic example is loaded so the page works straight away, but its numbers are placeholders.

5.1 Facilities, berths, and horizon

Each berth belongs to either the main facility or the additional jetty. Only active berths count. The additional jetty and STS open in the year you set, and the schedule view can include or exclude them.

5.2 Approach and departure window (pilot, tug, daylight, tide)

A manoeuvre may only start inside an open window. Windows are fixed daily clock hours. Tidal windows must satisfy open 1 < close 1 < open 2 < close 2.

5.3 Vessel classes and berth phases

One row per class. Hours are for the main berth. Cargo operations = cargo ÷ rate, grossed up for downtime. The window flag says whether the class is limited by the window above. Leave a row empty to drop it.

5.4 Routing to the additional jetty and STS

Share of each class’s calls moved once the option is open. A class must be marked eligible to use STS. Lighter trips and shore hours describe the discharge ashore that STS creates.

STS phases (global, per mother-vessel call)

Optional lighter-cycle helper

Estimates lighter trips, mother-vessel hours, and shore berth hours for one class. It changes nothing until you press Apply.

LightersTrips per callMother-vessel hoursMother-vessel daysShore berth hours per trip

5.5 Congestion policy and economics

Status bands for the blocked ratio (% upper edges)

Above the last edge the label is “Over capacity”. These bands are an example policy, not a standard. The CSCP treats target utilization as a policy choice.

5.6 Scenario file

The page does not save anything. If you refresh, the inputs return to the example, so export the scenario first. The vessel plan in section 7 is part of the scenario file.

6
Results and what-if

What the numbers say

Move the levers and watch the verdict. The levers modify your inputs without editing them. Leave them neutral to see your own scenario.

What-if levers

“Hours saved” removes time from approach, preparation, closing, and unberthing, split in proportion to each phase. The levers act on sections 6.1 to 6.8. The schedule in section 7 has its own levers on each vessel.

Headline

    6.1 Capacity and queue in the selected year (do nothing, main berths only)

    Vessel classCalls / yearShare of callsCargo ops incl. downtime (h)Prep & manoeuvres alongside (h)Gap + window idle (h)Blocked per call (h)Annual berth-hoursNon-productive share
    MeasureValueHow to read it

    6.2 Year-by-year roadmap

    Congestion state: OK (wait below half the threshold), Watch (above half), Constrained (above the threshold), Unstable (blocked ratio at or above 100%). Wait is the average time a vessel waits before berthing.

    6.3 Blocked ratio by year

    Do nothing (main berths)With plan (main berths)◆ tipping ratio at your wait threshold (do-nothing mix)

    6.4 Wait versus occupancy, selected year

    6.5 Tipping point by number of berths

    BerthsTipping blocked ratioEffective capacity (calls/yr)Calls in selected yearVerdict

    6.6 How many berths would be needed?

    Selected year, same demand and phases. First table: main berths alone, no jetty or STS. Second table: the plan with a different number of additional jetty berths.

    Main berthsBlocked ratioAverage wait (h)Peak-month wait (h)State

    Additional jetty berths (with plan)Main ratioMain wait (h)Jetty ratioJetty wait (h)Worst state

    6.7 If the main berth is short: how much STS?

    Sweeps the share of STS-eligible calls moved to STS in the selected year (jetty shares as planned). Feasible means both the main berth and the STS anchor spot stay stable and under the waiting threshold.

    Main berth waitSTS anchorage waitFeasible window
    STS shareMain ratioMain wait (h)STS utilizationSTS wait (h)Feasible?

    How many STS anchor spots? (at the planned STS share)

    Anchor spotsSTS utilizationSTS wait (h)Main wait (h)State

    6.8 Value of an hour saved in each phase

    Selected year, main berths, do nothing. Each row removes the hours you set in section 5.5 from that phase for every call, capped at the phase length, and shows what happens to planning capacity at your target ratio.

    PhaseWeighted average now (h/call)Avg hours saved per callNew mean blocked time (h)Calls/yr at target ratioGain (calls/yr)Gain (%)

    A phase that blocks the berth is worth the same per hour as cargo work. Moving work off the berth (documents at anchorage, pre-staging, parallel tasks) raises capacity without a new jetty.

    6.9 Checks and warnings

    7
    Berth schedule

    One clash, and every later vessel moves

    Enter real or planned arrivals. The schedule places each vessel on the berth that lets it start mooring first, then shows who waits, how long, and which vessel caused it. Add or remove a vessel, shift an ETA, or add a delay to see the snowball.

    7.1 Vessel plan and what-if levers

    Base is the current plan. What-if adds the levers: set “In base” to No and “In what-if” to Yes to test an extra vessel; use ETA shift to slip a vessel; use extra ops delay for a breakdown or weather. A BLOCK row reserves a berth (maintenance, bunkering) for the hours in its ops override. Preferred berth “Any” picks the berth that allows the earliest mooring start. ETA is the arrival at the pilot station.

    IndicatorBase planWhat-ifChange

    7.2 Berth Gantt

    7.3 Vessel-by-vessel impact (snowball view)

    VesselClassBase: berthBase: wait (h)What-if: berthWhat-if: ETB (mooring start)What-if: wait (h)ETB shift (h)Chain levelBlocking chainImpact

    Chain level 1 = a direct clash with a vessel that did not itself wait for the berth. Level 2 or more = a snowball: the blocking vessel was already delayed by another. The blocking chain follows the vessels back to the root cause.

    Checks

    8
    Reading the results

    A short decision guide

    1. Check the state, not only the ratio. A blocked ratio below 100% can still be “Constrained”. That is the case the model exists to catch.
    2. Compare the tipping ratio with your trigger. If your expansion trigger is 70–80% but the tipping ratio for your mix and berth count is lower, the trigger may fire too late for the waiting level you accept.
    3. Test the cheap levers first. Phase hours, windows, steadier arrivals, and handling rate cost less than a new facility. Section 6.8 ranks the phases by what an hour is worth.
    4. Use STS as a bridge, then check its limits. Watch the anchor-spot utilization and the lighter discharge load. A high STS utilization, or lighters landing at the same berth, can cancel the relief.
    5. Size an additional jetty by its tipping point. Adding a berth raises the tolerable occupancy, so the capacity gain is larger than its nominal berth-days.
    6. Use the schedule to find the root cause. A long wait is often the end of a chain. Fix the first vessel in the chain (an ETA, a window, a delay) before adding capacity.
    7. Price the waiting. Set the waiting cost saved against the cost of the option, and test the delay cost and threshold, which are judgment inputs.

    How it maps to supply chain capacity thinking (CSCP)

    CSCP ideaWhere it shows up here
    Utilization = hours actually used ÷ hours availableThe blocked ratio is a utilization measure for a berth
    Target utilization is a policy choice that builds in spare capacityThe planning target, status bands, and waiting threshold are policy inputs
    The bottleneck limits the system (theory of constraints)The berth is the constraint, and the anchorage queue is the buffer in front of it
    Setup time reduction: turn internal work (machine stopped) into external work (machine running)Berth phases that can move off the berth, such as documents at anchorage or pre-staged equipment (the mapping to berths is an adaptation, not CSCP text)
    When load exceeds capacity: add capacity, change the load, or change the scheduleAdditional jetty and berths, shifting load to STS, and regularizing arrivals
    Capacity strategies (lead, lag, stepwise)The opening year of the jetty and STS versus the year congestion starts
    Judge changes by total cost at equal serviceWaiting cost versus the cost of the option

    The CSCP has no berth-capacity or queueing formulas. The queueing layer here is standard operations research, not CSCP content.

    9
    Limits and sources

    What this model cannot do

    The queue is an approximation

    The queue uses the Erlang C formula scaled by the Allen–Cunneen factor, valid as a planning approximation. It treats arrivals as a steady stream over the year and berths as interchangeable servers. Real berth plans, draft limits, vessel size, and cargo-specific berth restrictions make some berths unusable for some calls.

    The schedule is deterministic

    Vessels are placed first come, first served by ETA. Priorities, inserting a small vessel into a gap before an already-placed later vessel, and draft-by-tide rules are not modeled. The result is one concrete plan, not a statistical forecast.

    Windows are fixed daily hours

    A window limits when a manoeuvre may start. Real tide windows drift each day and depend on draft. In the steady-state view the window delay is an average per manoeuvre. STS operations are not restricted by the window.

    Variability inputs drive the answer

    Ca² and berth-time variability are placeholders. Small changes move the tipping point a lot. Calibrate them from your own arrival and port-stay history.

    STS is simplified

    STS uses a days-based capacity and an optional lighter cycle. It ignores swell stoppages beyond the availability input, priority rules, lighter fleet sharing between mother vessels, and the berth load lighters add in the schedule view.

    Anchorage waiting is not a berth block

    Vessels do not leave the queue, are not re-routed, and are never cancelled. Costs of building a jetty or running STS are not modeled. Define what counts as port stay, waiting, and available time, and use the same rule every year.

    Sources for the method