IPFS: Lessons Learned
In my time using IPFS, there were things that I think were very good. Even though the balance in my opinion is net negative, the good parts should be lifted to use with follow on systems (this is what I plan to do).
HTTP Gateway
Probably the best part of the system is that it has an HTTP gateway built in from the beginning. This allows for piecemeal bootstrapping, which is one of the largest problems facing any new protocol or system. The only thing getting in the way of the IPFS implementation being downright awesome was that HTTPS threw a wrench in things.
DNSLink
DNSLink was another feature that can be described as backwards compatibility. It allowed for IPFS/IPNS hashes to be placed into the DNS directory and the gateway would automatically translate, i.e. http://ipfs.io/ would translate to some /ipfs/Y389sayfbaspifas89a hash.
Self-Describing Hashes
IPFS includes a way to specify hashes that includes the hash function and the encoding. I dislike the way they chose to use a format that excludes human readability, but the base idea I like and will be using myself, albeit with human readability in mind.