No creo que haya querido decir "mal diseño" sino "mala práctica". En términos generales, una aplicación web debe ser tan apátrida como sea posible. Aunque, por ejemplo, es posible que necesite conocer la información del usuario para autorizar la visualización de la página, esa información podría guardarse en la máquina del cliente en forma de cookie y el servidor simplemente valida la información del usuario cada vez.
Eso sería ideal, pero no siempre puede contar con que el cliente pueda guardar cookies. Además, implica validar al usuario de forma apátrida, lo que potencialmente implica consultar información de la base de datos para una simple solicitud de página. Muchas veces es más sencillo guardar dicha información en la sesión.
Sin embargo, una vez que haya cruzado el Rubicón, muchos programadores se sienten tentados a guardar no solo la información de autenticación en la sesión, sino también muchas otras cosas. Este es un antipatrón y tiende a hacer que su aplicación web dependa en gran medida del estado, que es precisamente lo que se suponía que debía evitarse en primer lugar.
Algunos programadores se basarían en tecnología como Spring (si está utilizando Java) para desenredar lo que de otro modo sería un desastre de dependencias, pero argumentaría que eso solo hace que sea más fácil crear dependencias en lugar de eliminarlas. Dichas tecnologías deberían ayudar a su desarrollo, no hacer que su antipatrón sea un problema menor.
Por lo tanto, una buena regla general es que si puede escribir sin estado, probablemente sea una mejor idea hacerlo o corre el riesgo de caer en esta trampa. Obviamente, se encontrará con situaciones en las que esto es necesario, pero en términos generales, solo debe guardar información que de otro modo sería difícil de recuperar.