Geralmente, se você estiver atualizando o hardware, às vezes atualizando o software ou fazendo alterações onde os dados dos usuários possam ser perdidos, você está fazendo manutenção e quer colocar uma mensagem. Agora, dependendo de como você faz suas atualizações, você pode não precisar ficar inativo, mas se você for um único desenvolvedor trabalhando em um único site / produto, será muito difícil ter a redundância necessária para não site abaixo ao fazer alterações.
Para o software, as atualizações geralmente são rápidas e não exigem necessariamente entrar no "modo de manutenção". No entanto, vou dar um exemplo usando o Rails: ao atualizar um site, você geralmente precisa atualizar o código real e atualizar seu banco de dados para que o código possa usá-lo corretamente (no Rails, isso está executando suas migrações). Muitas vezes, o código será interrompido se o banco de dados não tiver as tabelas e colunas corretas, portanto, se você permitir que os usuários acessem seu site entre atualizar o código e atualizar o banco de dados, eles poderão ver erros. Geralmente, é melhor que eles vejam uma mensagem informando que o sistema está inoperante e voltarão no tempo X.
Na medida em que não tenha que ser interrompido para manutenção, geralmente são necessários servidores separados que são totalmente "redundantes" e, quando o novo site é carregado e pronto, você alterna todos os usuários para apontar . Manter os dados redundantes, no entanto, não é fácil.