Three flaws in software design

Google posted a small serie of videos about some flaws in software design. I found it really interesting as it relates to the day to day life to any developer. Here's my quick takeaway.

Don't write code that isn't needed.

It's similar to the MVP in the lean startup theory. Don't write code that does not bring value immediately. There was a great example about a youtube-like app. Don't start by writing the browsing feature, because, in itself that's useless. Start by writing the video player. That's the core of the application.

Don't write code that is not easy to change

There was a lot of great examples coming from the bugzilla project. Basically, treat every asumptions like users will never need to do that as a warning. Be careful of magic numbers littering the code everywhere. One might be right in these asumptions, but most likely, he will be wrong.

Don't be too generic (overengineering)

This point is hard to balance with the previous one. There was a great advice about it: the system should look like it was design from the start to do what it's doing. The example was about a socket implementation.

You start with a simple unix socket, with 2 classes: Socket and SocketTest. Then, when you want to add a UDP socket, you don't add an if statement in the Socket class. At that point, you create an abstract class with UnixSocket and UDPSocket as concrete implementation. And so on, when you have to add the TCP socket feature, you can then pull out the IP layer.

Some generic advices

The last part was about some final thoughts. And especially, two things I'll remember.

The talks were made by a book author and I am now seriously considering reading his book, there was a lot of value in his talks. Go through the videos if you have one hour to spare.