Não acho que ele quis dizer "mau design", mas "má prática". De um modo geral, um aplicativo Web deve ser o mais sem estado possível. Mesmo que, por exemplo, você precise conhecer as informações do usuário para autorizar a exibição da página, essas informações podem ser salvas na máquina cliente na forma de um cookie e o servidor simplesmente valida as informações do usuário todas as vezes.
Isso seria ideal, mas nem sempre você pode contar com o cliente para salvar cookies. Além disso, envolve a validação do usuário de um estado sem estado, o que potencialmente envolve consultar informações do banco de dados para uma simples solicitação de página. Muitas vezes, é mais simples salvar essas informações na sessão.
No entanto, depois de atravessar o Rubicon, muitos programadores são tentados a salvar não apenas informações de autenticação na sessão, mas também muitas outras coisas. Esse é um antipadrão e tende a tornar seu aplicativo Web fortemente dependente do estado, que é precisamente o que deveria ser evitado em primeiro lugar.
Alguns programadores se baseariam em tecnologias como a Spring (se você estiver usando Java) para desvendar o que seria uma bagunça de dependências, mas eu argumentaria que isso apenas facilita a criação de dependências, em vez de eliminá-las. Tais tecnologias devem ajudar seu desenvolvimento, não tornar seu antipadrão menos um problema.
Portanto, uma boa regra geral é que, se você pode escrevê-lo sem estado, provavelmente é uma idéia melhor fazê-lo ou corre o risco de cair nessa armadilha. Obviamente, você vai se deparar com situações nas quais isso é necessário, mas de um modo geral, você deve salvar apenas informações que, de outra forma, seriam difíceis de obter.