\flushbottom vs \raggedbottom

There isn't a universal right answer.

\raggedbottom is of course an easier format to achieve as you lose the constraint on equalising page content.

If however you want \flushbottom then you have to ensure that the page content fits in the specified size. For example if your content consists entirely of lines of text on a 15 pt baseline with no stretchy white space between lines or paragraphs, and your text body height is not a multiple of that \baselineskip, then every page will be underfull as TeX cannot achieve the specified size so has to break a line short. The solution there is to adjust the \baselineskip and/or the \textheight to be compatible, or, if typesetting on a grid is not an absolute requirement, add some vertical stretch glue between lines (by giving \baselinestretch a plus component) or between paragraphs (by giving \parskip a plus component).

In the final editing stages using either you may want to adjust page size on a per-page (or per-spread) basis using \enlargethispage.

See also

Do I have to care about bad boxes?


With this trick you'll get a \textheight so that each page contains an integer number of lines (equal to what you'd get without the trick)

\documentclass[12pt]{book} % or 10pt or 11 pt
\usepackage{setspace}
\setstretch{1.15}

\setlength{\dimen0}{\textheight}
\addtolength{\dimen0}{-\topskip}
\divide\dimen0\baselineskip
\setlength{\textheight}{\number\dimen0 \baselineskip}
\addtolength{\textheight}{\topskip}

\usepackage{lipsum}

\begin{document}
\lipsum
\end{document}

Alternatively, you can load the geometry package and use its option heightrounded (but this would change also other page parameters).