Реализация проекта поэтапной диагностики, как лучше?
Вроде бы, тут древовидная структура описывает все пути. Несколько вопросов в корне, затем идёт, видимо, ветвление. Описать такую можно списком, где у элемента есть ссылки на родителя и на дочерние элементы. 
Что-то типаconst knowledge = [
  {id: "0", title: "Как начать пользоваться сервисом", description: "", prev: null, next: ["0.0", "0.1" ]},
    {id: "0.0", title: "Упрощенная инструкция", description: "для новых пользователей", prev: "0", next: []}
    {id: "0.1", title: "Продвинутая", description: "для клиентов, чьи познания больше", prev: "0", next: []},
  {id: "1", title: "Пользуется ПК", description: "", prev: null, next: ["1.1", ]},
  {id: "2", title: "Браузер Google Chrome", description: "", prev: null, next: ["2.1", ]},
  {id: "3", title: "Версия последняя", description: "", prev: null, next: ["3.1", ]},

];
Состояние страницы характериуется текущим активным элементом: показан он и возможные дальнейшие пути, и известно, куда вернуться шаг назад. Если в один вопрос можно прийти несколькими путями, надо запоминать в массиве пройденный путь, и тогда шаг назад брать из него.
Есть два варианта. Первый - воспользоваться каким-нибудь конструктором квиза, ведь, по сути, это он. Второй - прописать всё ручками.
Каждая кнопка - это post-форма, можно на ту же страницу.  В hidden-поле нужно записать ответ, а номер стадии лучше передать в url (чтобы можно было вернуться к предыдущей стадии просто по ссылке). Сама кнопка - submit. Ответы на прошлые вопросы лучше записывать в cookie. В зависимости от этих данных формируются новые формы. А в конце вместо форм - конечные результаты.