1st phase: ACID, event sourcing, optimistic lock, pessimistic lock, data structures, transaction
2nd phase:
1. given some longUrl + seoKeyword return shortUrl consisting of constant shortUrl string + seoKeyword
2. given some longUrl return shortUrl consisting of constant shortUrl string + 4 random alphanumeric characters
3. Given 2 instances of same service/application how to secure that one instance will use solution from @2 and other instance will use yet another function of shortening url consisting of shortUrl+ some number from 1..n