I've  been using systemd's "predictable network interface names" for a
 few days now. You know, the ones that go like "enp5s0".

 After thinking about it for a while, I came  to  the  conclusion  that
 these interface names are indeed a very good solution for most setups.
 For me, though, they  don't  work  very  well.  I'm  better  off  with
 statically assigned interface names depending on the MAC address.

 Reason's  simple:  I  use an USB ethernet adapter. Now, with systemd's
 naming scheme, it gets named like  this:  "enp0s29u1u4".  Hmmm.  Yeah,
 technically  correct  (the  USB  "slot"  is encoded in this name), but
 impractical. When I plug the adapter into another USB port,  its  name
 changes! Bummer.

 I'll go back to simply doing something like this:

   1   SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="72:07:b9:a8:9c:19", NAME="lan"
   2   SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="57:04:b6:c2:6c:33", NAME="usblan"

 Interfaces  that  I  *know*  get  a special name. Anything else is the
 usual "eth0", "eth1", "wlan0", ...

 I've also been playing with  interface  names  depending  on  the  MAC
 address.  Literally,  the MAC is part of the interface name. You'd end
 up with "en7207b9a89c19". Pretty clumsy, eh? But you wouldn't have  to
 worry about collisions or USB ports. Nah, too clumsy.