How to Calculate Generation Time in Microbiology
By Dr. Zubair Khalid, DVM, MS, PhD ·

By the end of this guide you will be able to take a set of colony counts, a series of optical density readings, or a growth rate published in log h⁻¹, and turn any of them into a defensible generation time with a stated uncertainty. You will also be able to tell when a number that looks like a generation time is actually something else, such as a lag-phase artifact or a net rate diluted by dead cells.
Have these on hand before you start: a table of time points with the corresponding counts or readings, the dilution factor and plated volume for every count, a calculator or a Python/R session, and a written record of the temperature, medium, strain, and aeration used. The generation time microbiology formula is simple arithmetic. The work is in the experimental design and in knowing which data points belong in the calculation.
This guide is written for bench microbiologists, laboratory technicians, diagnostic lab staff, and students working through a microbiology course who need a method they can reproduce and defend. Veterinary and food diagnostic laboratories use exactly the same arithmetic, whether the question is how fast a Listeria isolate grows at refrigeration temperature or how long a slow-growing mycobacterium takes to produce visible colonies.
What Generation Time Actually Measures
A generation is one complete round of cell division in which one parent cell becomes two daughter cells. Generation time (symbol g), also called doubling time, is the elapsed time required for a population to double during balanced exponential growth. It is expressed in minutes, hours, or days depending on the organism.
The specific growth rate (symbol μ, the Greek letter mu) is the rate of increase of the population per unit of existing population per unit time. Its units are reciprocal hours (h⁻¹). The two quantities are reciprocal to within a constant, which is why a single number, either g or μ, fully describes exponential growth under a fixed set of conditions.
Exponential growth means that every cell divides at a constant rate and no cells are dying or dropping out of the replicating pool. Under that condition the population follows:
N_t = N_0 × 2^(t/g)
where N_0 is the population at the start of the exponential window, N_t is the population at time t, and t is the elapsed time in the same units as g. The relationship is a straight line when log-transformed, which is the entire basis of every calculation in this article.
Three things that generation time is not:
It is not a fixed species constant. Escherichia coli is often quoted at roughly 20 minutes in rich broth at 37 °C, but the same organism in a minimal medium or at 20 °C can be an order of magnitude slower. Mycobacterium tuberculosis is described as having a generation time of roughly 20 to 24 h, which is why conventional susceptibility work with that organism is measured in weeks [1]. Those two facts are consistent with each other only because each is tied to a defined organism, medium, and temperature.
It is not a lag-phase measurement. During lag phase, cells are adapting, repairing, and inducing enzymes. Cell numbers may not rise at all, or may even fall. A generation time computed across a lag phase is a weighted average of nothing dividing and everything dividing, and it will always be too long.
It is not a death-corrected net rate. Plate counts measure net colony-forming units. If 10 % of the population is dying per generation while the rest divides, the count-based generation time is longer than the true division time. In a well-controlled pure culture this is usually a small effect. In a stressed culture, a starved inoculum, or a mixed community, it can dominate the answer.
The Generation Time Microbiology Formula in One Place
Start with the doubling equation and take logarithms of both sides. Working in base 10:
log₁₀(N_t) = log₁₀(N_0) + n × log₁₀(2)
where n is the number of generations that occurred in time t. Solving for n:
n = (log₁₀N_t - log₁₀N_0) / log₁₀2
Because log₁₀2 equals 0.30103, that denominator is usually written as 0.301. Dividing elapsed time by the number of generations gives the generation time:
g = t / n
Three equivalent routes to the same answer exist. Pick the one that matches your data format:
Route A, two counts bracketing the exponential window. Compute n from the two counts, then g = t/n. Fast, but it gives no way to check linearity and no uncertainty estimate.
Route B, regression on log₁₀ counts against time. Fit log₁₀N versus t. The slope s has units of log₁₀ units per hour. Then g = log₁₀2 / s = 0.30103 / s. This is the method you should use with more than two time points, because the regression also returns R² and a standard error on the slope.
Route C, from a published specific growth rate. If a paper reports μ in h⁻¹, then g = ln2 / μ = 0.69315 / μ. If a paper reports a rate in "log h⁻¹" (base 10 units per hour), first multiply by 2.30259 to get μ, or skip straight to g = 0.30103 / (rate in log h⁻¹).
| Quantity | Symbol | Formula | Units |
|---|---|---|---|
| Number of generations | n | n = (log₁₀N_t - log₁₀N_0) / 0.30103 | dimensionless |
| Generation time | g | g = t / n | hours (or min, days) |
| Generation time from log₁₀ slope | g | g = 0.30103 / slope | hours |
| Generation time from specific growth rate | g | g = 0.69315 / μ | hours |
| Specific growth rate | μ | μ = 0.69315 / g | h⁻¹ |
| μ from a log₁₀ slope | μ | μ = 2.30259 × slope | h⁻¹ |
| Predicted population | N_t | N_t = N_0 × 2^(t/g) | CFU/mL or CFU/g |
| Log increase | Δlog | Δlog = t × slope = n × 0.30103 | log₁₀ units |
The most common arithmetic error in the whole field is mixing bases. A slope computed on natural-log data is μ and you divide 0.693 by it. A slope computed on base-10 data is half again larger numerically and you divide 0.301 by it. If your answer comes out roughly 2.3 times too large or too small, you have almost certainly switched bases.
Step-by-Step: How to Calculate Generation Time in Microbiology
The walkthrough below assumes a batch culture sampled at intervals, with population size estimated by viable plate count. The same seven steps apply to optical density or any other quantitative signal, with the caveat that the signal must be proportional to cell number (see the measurement section below).
Step 1: Design the sampling window before you touch a pipette
You need enough points inside exponential phase to define a line and enough points outside it to recognize where the window ends. A practical schedule is five to eight samples spaced at roughly half a generation to one generation apart, spanning three to four generations in total. If you do not yet know the generation time, run a pilot with wide spacing, estimate the rate roughly, then repeat with tighter spacing.
Counts should stay inside the countable range of the plates, conventionally about 30 to 300 colonies per plate for statistical reliability. Below that, counting error dominates. Above it, crowding and nutrient depletion within the plate suppress colony formation and colonies merge ("TNTC", too numerous to count). Adjust your dilution series so each time point lands in range rather than plating the same dilution all day.
Record the exact elapsed time of each sample from the moment of inoculation, not from the moment of the previous sample. Cumulative timing errors are a silent source of slope error.
Step 2: Convert raw colony counts to a common unit
A colony count is meaningless without its dilution and plated volume. The conversion is:
CFU/mL = (colonies counted) / (volume plated in mL) × (dilution factor)
Worked: you plate 0.1 mL of a 10⁻⁴ dilution and count 76 colonies.
CFU/mL = 76 / 0.1 × 10^4
= 760 × 10^4
= 7.6 × 10^6 CFU/mL
Replicate plates at the same dilution are averaged as counts first, then converted. Do not average the final CFU/mL values of plates at different dilutions unless you have already checked that they agree, because a disagreement between dilutions usually signals a pipetting or homogenization problem, not random noise.
Step 3: Log-transform every value
Take log₁₀ of each CFU/mL value. This converts the exponential curve into a straight line whose slope is the growth rate. Keeping the transformed values in your table makes the next step visual and auditable.
Zero counts have no logarithm. A time point with zero colonies cannot enter a log-linear fit. Either extend the incubation of that plate, use a larger plated volume, or treat that time point as "below detection limit" and exclude it with a note.
Step 4: Identify the exponential window
Plot log₁₀ CFU/mL against time. Exponential phase is the longest stretch of points that falls on a straight line with a constant slope. Points at the start that sit below the extrapolated line are in lag. Points at the end that flatten are entering stationary phase.
Excluding data is legitimate here, but it must be declared and rule-based. Choose the window before fitting, using a stated criterion such as "the longest run of consecutive points whose residuals from a straight line are all under 0.2 log units," and report which points you excluded. Fitting only the points you like after seeing the answer is not analysis, it is fabrication.
Step 5: Fit the line and take the slope
import numpy as np
from scipy import stats
# elapsed hours and matching colony counts converted to CFU/mL
t = np.array([0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0])
N = np.array([5.0e5, 8.1e5, 1.2e6, 2.1e6, 3.0e6,
5.1e6, 7.6e6, 1.3e7, 1.9e7])
y = np.log10(N)
fit = stats.linregress(t, y)
slope = fit.slope # log10 units per hour
mu = slope * np.log(10) # specific growth rate, per hour
g_h = np.log(2) / mu # generation time, hours
n = len(t)
tcrit = stats.t.ppf(0.975, n - 2)
half = tcrit * fit.stderr
g_lo = np.log(2) / ((slope - half) * np.log(10))
g_hi = np.log(2) / ((slope + half) * np.log(10))
print(f"slope = {slope:.4f} log10 units per hour")
print(f"R^2 = {fit.rvalue**2:.4f}")
print(f"mu = {mu:.4f} per hour")
print(f"g = {g_h:.4f} h")
print(f"g = {g_h*60:.1f} min")
print(f"95% CI = {g_lo:.4f} to {g_hi:.4f} h")
Expected output for this data set:
slope = 0.3975 log10 units per hour
R^2 = 0.9993
mu = 0.9152 per hour
g = 0.7573 h
g = 45.4 min
95% CI = 0.7393 to 0.7763 h
If you prefer not to install SciPy, the slope can be computed directly as the covariance of t and y divided by the variance of t. In a spreadsheet, =SLOPE(y_range, x_range) returns the same number, and =RSQ(y_range, x_range) returns R².
Step 6: Convert the slope into a generation time, and say which unit you used
Report both the slope and the derived generation time. The slope is the primary datum. The generation time is the interpretation, and different readers will want it in different units: 0.757 h, 45.4 min, or 1.26 generations per hour. State which base you used for the logarithm, because a reader who assumes natural logs will misread a base-10 slope by a factor of 2.3.
Step 7: Sanity-check by back-calculation
Take your fitted g and your starting population and predict the final count.
N_predicted = 5.0 × 10^5 × 2^(4.0 / 0.7573)
= 5.0 × 10^5 × 2^5.282
= 5.0 × 10^5 × 39.0
= 1.95 × 10^7 CFU/mL
The observed final count was 1.9 × 10⁷ CFU/mL. Agreement within a few percent confirms that the fitted window, the dilution arithmetic, and the unit conversions are all consistent. A back-calculation that misses by more than about a quarter of a log unit means something upstream is wrong, most often a dilution factor entered inconsistently for one time point.
Worked Example 1: A Bench Culture Timed by Plate Counts
This is the full arithmetic for the data set used in the code above, so you can follow every step without running anything.
Experimental setup. A pure culture is inoculated into broth at 37 °C with shaking and sampled every 30 minutes from 0 to 4 hours. Each sample is diluted in tenfold steps and 0.1 mL is spread on duplicate plates. Colonies are counted after overnight incubation.
Raw data and converted values. At t = 0 h, 50 colonies appear on the 10⁻⁴ dilution plates. CFU/mL = 50/0.1 × 10⁴ = 5.0 × 10⁶. That is a factor of ten above the intended starting count, so the record shows the working dilution was adjusted. The final table of converted values is:
| Time (h) | Colonies counted | Dilution | CFU/mL | log₁₀ CFU/mL |
|---|---|---|---|---|
| 0.0 | 50 | 10⁻⁴ | 5.0 × 10⁶ | 6.699 |
| 0.5 | 81 | 10⁻⁴ | 8.1 × 10⁶ | 6.908 |
| 1.0 | 12 | 10⁻⁵ | 1.2 × 10⁷ | 7.079 |
| 1.5 | 21 | 10⁻⁵ | 2.1 × 10⁷ | 7.322 |
| 2.0 | 30 | 10⁻⁵ | 3.0 × 10⁷ | 7.477 |
| 2.5 | 51 | 10⁻⁵ | 5.1 × 10⁷ | 7.708 |
| 3.0 | 76 | 10⁻⁵ | 7.6 × 10⁷ | 7.881 |
| 3.5 | 130 | 10⁻⁵ | 1.3 × 10⁸ | 8.114 |
| 4.0 | 19 | 10⁻⁶ | 1.9 × 10⁸ | 8.279 |
Slope. Regression of log₁₀ CFU/mL on time gives a slope of 0.3975 log₁₀ units per hour and R² = 0.9993. The near-perfect linearity across the whole window is itself the evidence that all nine points belong to exponential phase. There is no lag to exclude.
Specific growth rate. μ = 2.30259 × 0.3975 = 0.9152 h⁻¹.
Generation time. g = 0.69315 / 0.9152 = 0.7573 h. Equivalently, g = 0.30103 / 0.3975 = 0.7573 h. In minutes, 0.7573 × 60 = 45.4 min.
Doublings in the window. n = 4.0 / 0.7573 = 5.28 generations. Check against the counts: a 5.28-generation increase is a 2^5.28 = 39.0-fold rise, and 1.9 × 10⁸ divided by 5.0 × 10⁶ is 38.0. The small gap is the residual scatter in the plate counts.
Reported result. "At 37 °C in the stated medium, the isolate grew with a specific growth rate of 0.92 h⁻¹, corresponding to a generation time of 45 minutes (95% CI 44 to 47 minutes), n = 9 time points, R² = 0.999."
Worked Example 2: Turning a Published Growth Rate into a Generation Time
Published studies often report a growth rate rather than a doubling time, and the units vary. Two conversions cover nearly everything you will encounter.
From a rate in log h⁻¹. Cornelius and colleagues measured growth of naturally occurring Listeria species in unpackaged retail ham stored at 5 °C, and reported growth "usually slow at 0.002 to 0.004 log h⁻¹," with one Listeria innocua sample reaching 0.02 log h⁻¹ [2]. Convert with g = 0.30103 / rate:
import math
for rate in (0.002, 0.004, 0.02):
g_h = math.log10(2) / rate
print(f"{rate:.3f} log/h -> g = {g_h:.1f} h = {g_h/24:.2f} d")
0.002 log/h -> g = 150.5 h = 6.27 d
0.004 log/h -> g = 75.3 h = 3.14 d
0.020 log/h -> g = 15.1 h = 0.63 d
So the typical refrigerated Listeria population described in that study was doubling roughly every 3 to 6 days. The faster outlier, at about 15 h per doubling, occurred in the single sample that reached only 4.0 to 5.0 × 10³ CFU/g, so the rate was sustained over a very small range of population sizes [2]. Both numbers are correct for their own samples, which is why a single generation time should never be presented as the property of a species.
From a rate in h⁻¹. Silva and colleagues fitted the Baranyi model to Pseudomonas aeruginosa growing in natural mineral water and reported maximum growth rates from 0.017 to 0.405 h⁻¹ across 12 to 37 °C, with lag phase durations of 100.6 to 4.6 h over the same range [3]. Convert with g = 0.69315 / μ:
| μ (h⁻¹) | g = 0.69315 / μ | g in hours |
|---|---|---|
| 0.017 | 40.8 | 40.8 |
| 0.405 | 1.71 | 1.71 |
That is a span from roughly 41 h per doubling at the cold end to under 2 h per doubling at the warm end, within one species in one matrix. The lesson is not that Pseudomonas is unpredictable. The lesson is that the temperature must travel with the number, always.
Note also the lag durations in that study. At the coldest temperature tested, the lag alone was over 100 h, longer than several generation times at the warm end. A calculation that ignores lag and fits a line from inoculation to the final count will produce a composite rate, not a generation time.
Worked Example 3: Slow Growers and the Reverse Calculation
Sometimes you have the generation time and need to know how long an experiment will take. Reverse the formula.
Mycobacterium tuberculosis has an extremely slow growth rate and a generation time of approximately 20 to 24 h, which is exactly why conventional minimum inhibitory concentration (MIC) and minimum bactericidal concentration (MBC) methods for this organism need 7 days and 1 month respectively [1].
Work forward from those figures. In 7 days, or 168 h, the number of generations is:
n_min = 168 / 24 = 7.0 generations
n_max = 168 / 20 = 8.4 generations
The corresponding fold increases are 2^7.0 = 128 and 2^8.4 = 338, which is 2.1 and 2.5 log₁₀ units. That is enough amplification for a luminescence or resazurin readout to register a difference between inhibited and uninhibited cultures, which is why a 3-day luminescence assay can match a 7-day resazurin assay for MIC [1].
Now extend to a month, roughly 720 h:
n = 720 / 24 = 30 generations
fold increase = 2^30 = 1.07 × 10^9
A single surviving cell at the start of a bactericidal assay has, in theory, enough time to become a visible and countable population. That arithmetic is the reason CFU-based MBC determination for mycobacteria is measured in weeks rather than hours. The same reverse calculation is useful whenever you plan a time-kill or stability study: divide your intended observation window by your best estimate of g to find out how many generations you will actually be able to resolve.
Choosing the Measurement: CFU, Optical Density, or an Indirect Signal
Generation time is only as good as the population estimate feeding it.
Viable plate counts measure culturable cells. They are the reference method and the one that maps to CFU units used in dose, contamination, and efficacy work. They are slow, labor-intensive, and they require a dilution series per time point. Their precision is limited by the Poisson error of colony counting, which is roughly the square root of the count: a 100-colony plate carries about 10 % relative error from that source alone.
Optical density (OD) is fast and non-destructive but measures turbidity, not cells. It saturates above roughly 1.0 absorbance unit and it cannot distinguish live from dead cells. It is excellent for locating exponential phase and for choosing sampling times, and it should be calibrated against plate counts before being used to report a generation time. Vital and colleagues used OD, cell dry weight (CDW), and ATP content together to establish growth parameters in controlled bioreactors, which is the right pattern: a fast optical signal anchored to a slower absolute measure [4].
Indirect detection-time methods. Automated growth-based systems report a detection time (DT) rather than a count. Prada-Ramírez and colleagues built correlation curves plotting detection times against log CFU values to establish numerical equivalence between an automated method and the conventional pour-plate method for yeasts and molds [5]. That approach works, but the DT is a function of the inoculum size, the detection threshold of the instrument, and the growth rate all at once. BacT/Alert detection times for bacteria spiked into platelet concentrates fell as the inoculum increased, with all positives detected within 48 h and 98.1 % within 24 h [6]. A detection time cannot be converted into a generation time without independently calibrating the initial population and the instrument's threshold.
Molecular enumeration. Quantitative terminal-restriction fragment length polymorphism (T-RFLP) has been validated for absolute and species-specific enumeration in mixed cultures, with linear quantification from 10⁴ to 10⁶ CFU/mL in the lower working range and up to 10¹⁰ CFU/mL at the top, and replicate coefficients of variation of at most 4.39 % for defined mixtures [7]. Molecular methods of this kind are the practical route to generation times in mixed or non-culturable communities, where plate counts cannot assign a number to a named species.
Parameters That Change the Answer
Every one of these must be held constant and reported. Change any of them and you have measured a different organism's generation time, even if the species name on the tube is the same.
Temperature. The dominant variable. Within the permissive range, growth rate rises with temperature up to an optimum and then falls sharply. The P. aeruginosa range of 0.017 to 0.405 h⁻¹ from 12 to 37 °C illustrates the size of the effect within a single species and matrix [3]. Report temperature to the nearest degree and state whether it was controlled or ambient.
Medium composition and nutrient availability. Rich media support faster growth than minimal media. In a food or environmental matrix, the available nutrients are lower and less predictable than in broth, and growth rates in the matrix will be slower than the same organism in laboratory broth.
pH, water activity, and atmosphere. Each shifts the rate. Anaerobic versus aerobic incubation, CO₂ concentration, and osmotic stress all matter to the final number.
Inoculum history and physiological state. This is the variable people forget. De Jesús and Whiting compared exponential-phase, stationary-phase, starved, and dried Listeria monocytogenes cells at 5 °C under modified CO₂ atmospheres and found lag phase durations of 2.21, 8.27, 9.17, and 9.67 days respectively under 40 % CO₂, while growth rates fell as CO₂ increased and no growth occurred at 80 % CO₂ [8]. The same strain, the same medium, the same temperature, and a lag phase that differs by a factor of four purely because of how the inoculum was prepared. Once exponential growth was reached, the prior history no longer mattered. That is a precise statement of why you exclude lag rather than trying to model through it.
Population density and competition. At high density, nutrients deplete and waste products accumulate, so the measured rate falls. In mixed communities, faster-growing members suppress slower ones. Silva and colleagues found maximum population densities from 4 to 5 log CFU/mL in mineral water, with lower values in the batch that carried a higher initial heterotrophic count, attributed to microbial competition [3].
Clumping, chains, and biofilm formation. Plate counts enumerate colony-forming units, not cells. A culture of staphylococci in clusters, streptococci in chains, or mycobacteria in clumps produces one colony from several cells. The count then underestimates the cell number, and the calculated generation time is too long by a factor that depends on the average aggregate size. Dispersed, sonicated, or detergent-treated suspensions reduce this error, and the treatment must be stated.
Viability state. Cells can enter a viable but non-culturable (VBNC) state under stress, in which they are alive and metabolically active but do not form colonies. Wu and colleagues demonstrated this state in Vibrio cholerae and used propidium monoazide combined with quantitative PCR to distinguish VBNC cells from dead cells [9]. A generation time computed from plate counts in a culture containing VBNC cells is biased low, because part of the replicating population is invisible to the method.
Checking That Your Number Is Right
Four checks separate a defensible number from a plausible one.
Check 1: linearity. R² above roughly 0.98 on at least five points inside the window is a reasonable minimum for a pure culture with careful plating. Lower than that, and either your window includes non-exponential points, your dilutions are inconsistent, or your counting is noisy. Do not report a generation time from a fit with R² of 0.7 without explaining why.
Check 2: replicate spread. Split a single time point into triplicate plates and compute the coefficient of variation. In a validated molecular enumeration method for a three-species system, replicate CVs reached at most 4.39 % for defined mixtures and at most 1.76 % in a chemostat [7]. Plate counts on a well-run bench typically show more variation than that, and a CV above about 15 % between replicate plates tells you the pipetting or homogenization step needs attention before you trust the slope.
Check 3: interlaboratory context. Enumeration methods carry measurable uncertainty even between competent laboratories running standardized methods. A proficiency testing program in food microbiology with 450 participating laboratories used regular sample distribution to assess precision and trueness of enumeration across a range of organisms [10]. The practical implication is that a difference in generation time between two labs of less than about 10 to 15 % is not meaningful on its own, especially when the underlying counts differ by a similar amount.
Check 4: back-calculation and residual inspection. Predict the final count from the fitted parameters and compare it with the observation, as in the worked example. Then plot the residuals. A run of positive residuals followed by a run of negative residuals means the true curve is bending and your straight-line window is too wide.
For steady-state systems, there is one further check available. In a chemostat operated at a constant dilution rate D, the population settles at a growth rate equal to D, so g = ln2 / D. A chemostat therefore lets you set the generation time rather than measure it, which is why chemostats are used to validate enumeration methods across defined growth rates [7].
Common Mistakes and Limitations
Fitting a line through the lag phase. The single most common error. Two counts taken early in the culture, one before growth starts and one after, produce a slope that is far too shallow and a generation time that is far too long. Always plot first, then choose the window.
Using two points spread across the whole experiment. A calculation from the inoculum count to the 24-hour count answers a different question. As an example, Escherichia albertii on raw ground beef increased by 2.5 to 3.1 log CFU/g after 24 h at 22 °C and by 4.1 to 4.3 log CFU/g at 35 °C [11]. Dividing those log increases by 24 h gives 0.104 to 0.129 log h⁻¹ at 22 °C and 0.171 to 0.179 log h⁻¹ at 35 °C, which converts to apparent generation times of roughly 2.3 to 2.9 h and 1.7 to 1.8 h. Those are net rates that include an unknown length of lag. They are legitimate for predicting shelf-life outcomes, and they are not the exponential-phase generation time.
Mixing log bases. Covered above, but it deserves a second mention because it produces an answer that is wrong by a factor of 2.303 and still looks reasonable. A 45-minute doubling becomes 104 minutes if you divide 0.693 by a base-10 slope, or a 104-minute doubling becomes 45 minutes if you divide 0.301 by a natural-log slope.
Forgetting the plated volume. A count of 76 colonies from 0.1 mL is 760 CFU in the diluted millilitre, not 76. Omitting the volume term shifts every point by the same factor, so the slope survives but the reported population size does not. Errors like this pass every linearity check and fail only when someone tries to reproduce the absolute counts.
Averaging counts instead of log values. If two replicate plates give 40 and 400 colonies, the arithmetic mean is 220, which is not the best estimate of the underlying population. The logarithms are 1.60 and 2.60, and their mean is 2.10, corresponding to about 126. For log-normal data the geometric mean is the appropriate central estimate. Average the logarithms, not the raw counts.
Including TNTC or zero plates. Neither has a usable value. Counting a merged lawn as "too many" and assigning it an arbitrary number, or treating a zero plate as 1 CFU, introduces errors that the regression cannot detect or correct.
Exact error messages you will hit, and their fixes. In plain Python, taking the logarithm of a zero count raises ValueError: math domain error. In NumPy the same input produces -inf alongside RuntimeWarning: divide by zero encountered in log10, and the fit then silently drops the point or returns a meaningless slope. In Excel, =LOG(0) returns #NUM!, and a #DIV/0! in a generation-time cell almost always means the elapsed time for that row is zero. In every case the fix is the same: find the offending time point, decide whether it is below the detection limit or a genuine count, and handle it explicitly rather than letting the software drop it quietly.
Reporting more precision than the method supports. Plate counts carry Poisson error, so a generation time from a single culture is typically good to two significant figures, not five. "45 minutes" is honest. "45.42 minutes" implies a precision the colony counter cannot deliver.
Treating one measurement as the organism's property. Generation time depends on strain, medium, temperature, atmosphere, and inoculum state. A number reported without those parameters attached cannot be compared with anything.
Extrapolating beyond the measured window. A generation time derived from 20 to 37 °C does not tell you what happens at 4 °C, where the growth mechanism itself may change. Predictions into untested conditions need a validated secondary model, such as the square-root models used to describe temperature effects on growth kinetics [3].
Confusing a detection-time shift with a growth-rate change. Instrument detection times respond to inoculum size and threshold settings as well as to growth rate [6]. Faster detection does not automatically mean faster growth.
These are method limitations, not reasons to avoid the calculation. A generation time reported with its temperature, medium, method, window, number of time points, and confidence interval is one of the most useful quantitative outputs a microbiology laboratory produces. Any individual culture or isolate that departs from expectation warrants a review by the responsible laboratory director or veterinarian, because unusual growth behavior can reflect contamination, mixed cultures, or a strain with genuinely different physiology.
Frequently Asked Questions
What is the generation time microbiology formula?
Generation time is the number of generations divided by the elapsed time, so g = t / n, where n = (log₁₀N_t - log₁₀N_0) / 0.30103. Equivalently, if you have a slope from a log₁₀ plot, g = 0.30103 / slope, and if you have a specific growth rate, g = 0.69315 / μ.
How do you calculate generation time from two colony counts?
Count the generations between the two time points by taking the difference of their base-10 logarithms and dividing by 0.30103, then divide the elapsed time by that number. Two points give an answer with no check on linearity, so use them only inside a verified exponential window.
Can I calculate generation time from a growth rate in log h⁻¹?
Yes. Divide 0.30103 by the rate. A rate of 0.004 log h⁻¹ gives a generation time of about 75 h, and a rate of 0.4 log h⁻¹ gives about 0.75 h. Confirm whether the reported rate is base 10 or natural log before you divide.
Why does my calculated generation time change between time points?
Because the culture is not in balanced exponential growth across the whole sampling period. Early points include lag, late points include nutrient depletion and stationary phase, and only the middle stretch yields a constant slope. Restrict the fit to the linear segment and report which points you used.
Is generation time the same as doubling time?
Yes. Both terms describe the time required for the population to double during exponential growth, and the formulas are identical. Some fields prefer "doubling time" for cell populations and reserve "generation time" for the division cycle of a single cell.
How many time points do I need for a reliable generation time?
Five or more points inside exponential phase spanning at least three generations, with each point plated in duplicate. Three points is the mathematical minimum for a regression with any residual degrees of freedom, and it will not detect curvature.
Does generation time include the lag phase?
No. Generation time describes exponential phase only. Lag phase is reported separately as a lag phase duration, and combining the two produces a composite rate that is neither.
How do I report generation time in a lab report or paper?
State the generation time with its confidence interval, the temperature, the medium, the strain, the method used to enumerate cells, the number of time points in the fit, and the R². Give the specific growth rate alongside it so readers can convert to their preferred unit.
Sources
- Simple and rapid method to determine antimycobacterial potency of compounds by using autoluminescent Mycobacterium tuberculosis.
- Enumeration and growth of naturally occurring Listeria spp. in unpackaged ham.
- Growth kinetics modeling of Pseudomonas aeruginosa in natural mineral water.
- Global Growth Phase Response of the Gut Bacterium Phocaeicola vulgatus (Phylum Bacteroidota).
- Efficacy Comparison of an Automated Growth-Based System and Plate-Count Method on the Detection of Yeasts and Molds in Personal Care Products.
- Evaluation of the BacT/Alert automated blood culture system for detecting bacteria and measuring their growth kinetics in leucodepleted and non-leucodepleted platelet concentrates.
- Characterization of a three bacteria mixed culture in a chemostat: evaluation and application of a quantitative terminal-restriction fragment length polymorphism (T-RFLP) analysis for absolute and species specific cell enumeration.
- Modeling the physiological state of the inoculum and CO2 atmosphere on the lag phase and growth rate of Listeria monocytogenes.
- Enumeration of viable non-culturable Vibrio cholerae using propidium monoazide combined with quantitative PCR.
- Lessons from the organization of a proficiency testing program in food microbiology by interlaboratory comparison: analytical methods in use, impact of methods on bacterial counts and measurement uncertainty of bacterial counts.
- Antibiotic resistance and growth of the emergent pathogen Escherichia albertii on raw ground beef stored under refrigeration, abuse, and physiological temperature.