James Mills

Social Networking platforms are broken and here's why.

  • Most are funded with an Advertising Business Model
  • Privacy is often not a first class concern or priority in their design
  • Generally encourage a psychological social flaw in human beings

“I absolutely detest modern 'social media' .– Twitter, Facebook, Instagram. It's a disease. It seems to encourage bad behaviour.” — Linus Torvalds

Business Models

Most modern day social media platforms such as Facebook and Twitter are based on a very simple yet very profitable business model.

If you're not paying for it, you're the product. — Jason Fitzpatrick

There is nothing fundamentally wrong with a company that builds and operates a platform with this model, but it leads directly to my next point...


Most social media platforms have near zero privacy controls, ways to export your data and what your data is used for. Since most modern social media platforms use your data to serve their advertising business model, you cannot also have strong privacy as it would break their business model.

Consider a social media platform that:

  • Has full end-to-end (client controlled) encryption where the service/servers cannot read or interact with your data.
  • Is completely decentralised where there is no single point of control and your data is your own.

Such a social media platform would be very hard to profit from and would also inherently have very strong privacy.


And finally social media in general is a disease, a cancer that is spreading across the face of the globe.


As Linus Torvalds put it, it encourages the worst behavior in humans. One where we embellish and boast about our lives to anyone thats willing to read. We create ever increasing clickbait posts designed to lure others into reading and ultimately promoting your ideas, business, whatever. It's not about sharing, it's about attention seeking behavior.

So what's the solution? Is there such a thing as a “better” or “good” social platform? Can we retain our individuality and privacy? Can we avoid the cancerous disease-like human physiological social flaw that makes most users of social media only post embellishments of their life or flood their networks with noise? Can we have a social platform that isn't tied to an advertising business model revenue stream?

I'd like to think so. There are examples of these that I have spent time either learning about or playing with directly gaining some experience and exposure:

  • Pump.io —This project started quite some years ago but has seen no recent development and it shows. The UI/UX is clunky and quite a poor experience. The community is almost non-existent and many aspects of the network are either broken or offline (#1698). Setting up an instance was painful even for an engineer so it would be near impossible for the layperson to do so (#1699 #1697). It has no support for e2e encryption and its privacy controls are questionable at best (#129).

  • Scuttlebot — Scuttlebot ir powered by SSB (Secure ScuttleBot). It has all of the core features talked about above in an ideal social media platform. Unfortunately I haven't spent a lot of time trying it out. It usually ships as a Desktop or Mobile app and is offline friendly so it needs no server.

  • Kiki — Kiki also has all of the ideal features and also requires no server to function. It operates as a standalone web-server designed to run on localhost only. A server is required to synchronize content and exchange messages. It has full e2e encryption using NaCL. Unfortunately it has seen very little development since it was built (even though ti does work) and the author seems to be uncontactable.

#Software #SocialNetwork

In Software Engineering naming “things” correctly is really important. Often Software teams will either come up with their own Naming Convention or adhere to some standard like PEP-8.

Whether you are following a prescribed convention or adhering to a standard, it is really important to name things correctly and precisely.

  • Variables — Name them what they are. Avoid using 1-letter variables.
  • Interfaces — A convention from Go is to use an Adverb which is actually a good idea!
  • etc...

Remembering that:

Code is read more often than it is written. — Daniel J Scheufler


Consider the following configuration file:

encrypt_cipher: cbc

At first glance, this seems reasonable until you ask yourself:

wtf is “CBC” and what kind of cipher is that?!

Only to realize that this is just one of a few “block mode”(s) of at least two ciphers, DES and AES. Which one are we referring to? Should the configuration key have been encrypt_cipher_block_mode? Should we also declare the actual cipher used and not just the block mode and assume a hard-coded cipher?

Precision is important.

#Software #NamingConvention #Standards

Solving the Chicken or the Egg problem is often quite hard in any relatively complex software system.

Often I find the easiest way to solve this is to build half a chicken.

What do I mean by that? In bootstrapping terms it means you build a simpler version to bootstrap the real thing. This is quite often done in Bootstrapping Compilers in self-hosted programming language.

Sometimes though this isn't possible due to other dependencies. For example your solution uses a set of Public Crypto keys that you don't have available in the first place. What then?

Use another chicken you've already set up elsewhere to bootstrap!


#software #ChickenEgg