Привет, сам я не так долго пишу на ангуляре, около полугода, могу перечислить основные моменты, которые я для себя за это время отметил
1) Разберись как работает стратегия детекции изменений OnPush и старайся везде использовать ее. Это улучшит быстродействие и заставит лучше продумывать архитектуру приложения. Если изначально не планировать архитектуру с учетом особенностей OnPush, то когда столкнешься с тем, что на дефолтной стратегии слишком много времени тратится на лишний чейндетекшн, то окажется, что это так просто не исправить и требуется переделка сервисов. Под OnPush сервисы становятся похожи на минимальный Redux, в сервисах будет куча subject, компоненты подписываются на эти subject(желательно через async pipe), сервис содержит в себе функции при вызове которых меняется содержимое subject и все подписанные компоненты получают последние изменения. Научись подключать профайлер для ангуляра и как замерять время на чейндетекшн.
2) Разберись хорошо с rxjs, особенно с тем, что касается отписок и hot/cold observables. Если забывать отписаться, то будут возникать утечки памяти, если не понимать разницу между hot и cold, то можно слать по несколько запросов вместо одного. Еще важно почитать про антипатерны rxjs и научится их обходить (к примеру не подписываться внутри подписки, а юзать mergeMap/switchMap)