Итак, уже есть два хороших ответа, попробую чуть поточнее.
Фронтэнд — сущность системы со стороны пользовательского интерфейса, а так же программная часть, отвечающая за пользовательское взаимодействие.
Бэкенд — интерфейсы системы с другими системами, API, хранение, сортировка и обработка данных, работа с базами данных, закрытый админский интерфейс при условии отдельного пользовательского, настройка системы, сервисные скрипты, скрипты статистики и выдачи рекламных блоков, логирование.
Например, если у нас вся система для внутренних юзеров, то её интерфейсная часть и будет фронтендом.
С другой стороны, если есть доступ пользователей, посетителей и покупателей, то интерфейс для них будет фронтендом, а доступ к системе управления (CMS или CRM) и к сервисным процедурам будет бэкендом. Также и API, выгрузка данных в XML, интеграция с 1С Бухгалтерией и прочее шаманство будет бэкендом.
Сайт без админки чисто на HTML+CSS по сути будет сплошным фронтендом. Сайт, собранный на конструкторе, обладает обеими частями, но за бэкенд отвечает фирма-разработчик (хозяева) конструктора.
Есть и другое разделение. Зачастую к фронтенду относятся вёрстка и работа с шаблонами, программные решения, относящиеся к пользовательской части. При таком подходе программист на фронтенде будет верстать и админскую часть.
Зачастую есть отдельно программисты на фронтенд, и отдельно на бэкенд+фронтенд.
Юзабилити и работа тестировщиков относятся к обеим частям системы.