Order for dealing with FE tech debt

Status

Decided

Decision leader

@Oladimeji Onalaja (Unlicensed) 

Contributors

@Panos Paralakis (Unlicensed) @Tuomas Alahäivälä (Unlicensed) 

Date

Sep 30, 2019 

Outcome

Bring all apps up to Angular v8 (variously from v1.2, v1.5, v5, v6, and v7). Remove jHipster dependencies. Move to standardised file structure. Tidy up SCSS folder. Tidy up Protractor and Cucumber tests. NGRX Observable.

Background

There's a lot of tech debt across TIS. In FE this is the case too.

Over time, some FE devs have tried to address the tech debt, with varying degrees of success and completion.

The result is an FE beast with duplicated elements in places, that need converging into one agreed solution, and multiple areas where the codebase needs bringing up the date (e.g. Angular 5 Apps containing non-Angular 5 code, and other Apps that aren't yet Angular 5 that need re-writing with Angular 5)

Relevant data

Things that need addressing are:

  1. Different versions of Angular in use

  2. Removal of dependency on jHipster scaffolding

  3. Aligning the filing structure to match best practice for Angular 5

  4. Tidy up the SCSS folder and code

  5. Where to apply global and local styles

  6. Tidying up of a plethora of tests and test approaches

  7. NGRX - observable

Options considered

 

Option 1:

Option 2:

Option 3:

Option 4:

 

Option 1:

Option 2:

Option 3:

Option 4:

Bringing all elements in TIS up to the same, current version of Angular

V5

V6

V7

V8

Pros and cons

 Admins UI is v5 and the biggest element of TIS. Getting everything to v5 would mean we could then upgrade all of TIS to later versions of Angular more easily

 v5 is already 2 full versions behind the current stable version of Angular (v7). Admins UI contains lots of non-Angular v5 code within it that will need to be converted to Angular v5 first

 More modern version of Angular opens up new features and addresses issues from v5

 Admins UI is now Angular v6, but bringing Reval up to v6 is a large task

 More modern version of Angular opens up new features and addresses issues from v6

 No element is using Angular v7 yet, so bringing all of TIS up to v7 is a huge task

 More modern version of Angular opens up new features and addresses issues from v7

 No element is using Angular v8 yet, so bringing all of TIS up to v8 is a huge task

Estimated cost

MEDIUM

LARGE

LARGE

LARGE

Status

In progress - Admins UI done, Reval to do

in progress - Admins UI done, Reval to do

to do

to do

Action items

Update Admins UI code to Angular v5
Update Admins UI code to Angular v6
Update Admins UI code to Angular v7
Update Admins UI code to Angular v8
TISNEW-2498: Re-write Angular 1.2/1.5 apps (Reval | Concerns Log | Notifications | Common Components) to Angular v5, and upgrade to v6, v7 and v8
TISNEW-2503: Remove dependencies on jHipster scaffolding
TISNEW-1650: Move to standardised file structure for Angular v5, v6, v7, v8 - (@Panos Paralakis (Unlicensed), @Oladimeji Onalaja (Unlicensed), @Tuomas Alahäivälä (Unlicensed) - does this need to be defined clearly somewhere, in order to give a consistent reference point?)
Tidy up SCSS folder, files and code (@Panos Paralakis (Unlicensed), @Oladimeji Onalaja (Unlicensed), @Tuomas Alahäivälä (Unlicensed) - does this need to be defined clearly somewhere, in order to give a consistent reference point?)
Decide when global components are preferable, and where TIS would benefit from local styles
Tidy up tests - protractor, cucumber, etc (@Panos Paralakis (Unlicensed), @Oladimeji Onalaja (Unlicensed), @Tuomas Alahäivälä (Unlicensed) - does this need to be defined clearly somewhere, in order to give a consistent reference point?)
NGRX - observable (@Panos Paralakis (Unlicensed), @Oladimeji Onalaja (Unlicensed), @Tuomas Alahäivälä (Unlicensed) - please turn this item into a specific action)

Outcome

Bring all apps up to Angular v8 (variously from v1.2, v1.5, v5, v6, and v7). Remove jHipster dependencies. Move to standardised file structure. Tidy up SCSS folder. Tidy up Protractor and Cucumber tests. NGRX Observable.