This is a really interesting topic to me.
My environment kept evolving - and like many others I think, I came to realize that lean is mean. Adding every app available really is just asking for trouble seemed fun at first but long term it wasn't fun.
I would complete a migration first. so your old unit can be taken out/off and set aside as a form of backup. Speaking of which, do download backup locally to keep copies as you step through your cleaning.
I streamlined my apps first, cutting out both HE provided and Community provided Apps. You can look at the Apps code under 'For Developers' to see apps drivers (under the Used by column). That help me streamline. Same for Device drivers.

Take full advantage of Device Label and Device Name. I am now highly invested in she who may not be named. The HE NAME of a device is very important. Not just for Alexa but also for HE + dashboards.
I use the format '{roomname} {Manufacturer} {appliance/location} {main attribute} {Type}' format for the HE device label.
For the HE device name I use a '{roomname} {appliance/location} {Main attribute}' to shorten tile displays.
I did spend time removing a few one offs, - devices that I had gotten working but I only had 1 of. Over the years I had 6-7 styles of Motion sensors, I've standardized them so I only maintain a single driver, and I try to stay off specialized/community drivers when possible.
For Virtual devices - I put a 2 digit App identifier in place.
Here's some Zone Motion 
If it's just a standalone virtual device, I use the room 'Virtual'.
Groups are another oddity - I have an exception rule for them. I use the word Group in both the Label and the Name. This allows me to identify it specifically on dashboards so I can customize Icons/Tiles for it. I also use plurals for Groups. so Office Light and Office Lights can be taken advantage of in Alexa (she recognizes the word difference and it helps a lot)
Here's an HD+ group tile detail
I spell out my room names in rooms and assign devices appropriately. I duplicate my room names exactly in bridged environments too. So my Alexa rooms match.
On the Alexa side, I have a complete set of standards as well. It has more functionality surrounding rooms, but there is a cost - device name duplication. EG; two Torche lights, one in my office and one in my living room - Alexa gets confused and troubled by duplicate names. I wrote an Alexa thoughts posting a while back about how to clean that up too so as to take full advantage and remove stumbling issues.
I want to add that I had to force myself to accept that HE names and labels only get you so far, By that I mean, names and labels can be customized on the other side - in HD+ (my dashboard) or Alexa. Devices connect at the device ID level, so the names and labels aren't actually a failure point if you change them!
I was re-reading my post and realized I didn't make note of a learned issue - that my Alexa environment does stuff HE doesn't handle (at least naturally). Alexa has Multi-room capabilities. My HE evolution never really needed it, but to keep my bridge between HE and a 3rd party tool, I modified my HE to meet and match. I now have 'Upstairs' and 'Downstairs' as rooms in HE. I never used them in rules and apps on the HE side but it helped my rule migration. So don't forget to think in reverse as well about bridged environments - it makes the logic work smoother when you minimize exceptions.
The sign of a great environment FOR ME, is not that I have error free day to day operations (which I now do for the first time in years) but that when I have guests, my environment still functions well and their use is intuitive! Keep in mind you know the environment, but others don't!