  Several notions of code products are known in quantum error correction, such
as hyper-graph products, homological products, lifted products, balanced
products, to name a few. In this paper we introduce a new product code
construction which is a natural generalisation of classical product codes to
quantum codes: starting from a set of component Calderbank-Shor-Steane (CSS)
codes, a larger CSS code is obtained where both $X$ parity checks and $Z$
parity checks are associated to classical product codes. We deduce several
properties of product CSS codes from the properties of the component codes,
including bounds to the code distance, and show that built-in redundancies in
the parity checks result in so-called meta-checks which can be exploited to
correct syndrome read-out errors. We then specialise to the case of
single-parity-check (SPC) product codes which in the classical domain are a
common choice for constructing product codes. Logical error rate simulations of
a SPC $3$-fold product CSS code having parameters $[[512,174,8]]$ are shown
under both a maximum likelihood decoder for the erasure channel and belief
propagation decoding for depolarising noise. We compare the results with other
codes of comparable length and dimension, including a code from the family of
asymptotically good Tanner codes. We observe that our reference product CSS
code outperforms all the other examined codes.
