você projeta coisas de front-end quando cria sistemas que interagem com o cliente dos seus sistemas. Observe aqui que a palavra cliente é bastante grande, mas basicamente significa que você está trabalhando no front-end quando fornece uma interface para o mundo externo.
A maioria dos sites é apenas front-end, ou seja, eles fornecem informações para o mundo exterior e, na maioria das vezes, essas informações podem ser armazenadas simplesmente como texto em arquivos HTML.
Você projeta o back-end quando precisa fornecer serviços e encapsula a funcionalidade que seu front-end consumirá. Isso permite deslocar parte da carga de trabalho do cliente (front-end) para o servidor (back-end). Você fará isso nos casos em que precisar coordenar informações de diferentes clientes que possam acessar seu sistema simultaneamente. Ou se você precisar usar um repositório de dados central para agrupar dados dinâmicos ou se precisar de alguns requisitos de segurança específicos. Esta lista não é exaustiva, apenas exemplos rápidos.
para resumir, o Front-end (cliente) apresentará informações para o mundo externo. Geralmente estes são seres humanos através de algum tipo de GUI, HTML ou outro.
O back-end fornecerá meios para centralizar serviços para o seu front-end usar. O uso de um back-end não é obrigatório e agrega complexidade a um sistema, mas permite gerenciar melhor a complexidade inerente ao sistema que você está tentando construir.
Por exemplo, é possível fornecer um serviço como um wiki apenas através do front-end, mas haverá muitas limitações que o uso de um back-end para armazenar os dados e servi-los no front-end resolveria de uma maneira mais natural.