Core Design Principles for Software Developers by Venkat Subramaniam


Alright welcome to the session on Core Design Principles for Software Developers. My name is Venkat Subramaniam. We’re gonna talk about some of the things we need to think about when it comes to designing software. So I’m gonna be talking quite a bit about what are some of the principles we can consider when it comes to writing code on a daily basis. These are principles we can consider when writing codes on a daily basis These are principles that I have personally benefited from a great deal Almost every single day when I write code I think of a lot of these principles these have been extremely valuable for developing software which I consider to be a better software So I want to talk about some of these principles the way I’m going to structure this is I’m going to talk for about an hour and twenty minutes give or take and then we’ll take a fifteen minute break and then we’ll come back for the remaining half of the session and finish up the rest of the part I really appreciate questions if you do have a question I certainly welcome them But I have a problem of not being able to see through the blinding lights so if you do have a question Speak up raise your voice, draw my attention I’ll be more than happy to listen to you and then participate in your discussions questions comments just about anything so with that said let’s get started the first question I want to start by asking is, what do we consider as good design that’s the very first thing I want to consider well I once worked with a guy who had a really interesting way to define a good design He said the design is good because I created it well I think we need a better way of defining than that So how do we really be objective in defining good design that’s the next question to ask Well I’m going to say a design is good if the cost of changing the design is minimum So I’m going say this design is really good because when I wanted to change it I didn’t have to spend way too much time and effort changing it Well while that could be a good definition there is one big problem with that definition And the problem is when it comes time to change the design you realize that this is horrible and that’s way too late to say oh gosh we messed up So we need to be able to proactively say that we are creating a better design rather than after the fact Say well that was after all not a good design So again how do we really define a good design then So clearly a good design is a design that is easier to change So maybe one thing we can do is maybe we can start subjecting the design to change along the way and see how the design stands up and if it doesn’t we can after all keep evolving it and getting it towards something that’s easier to change Well the very first I wanna start out by saying is this is something that I I am really beginning to realize more and more is Almost and I’m not going to say almost impossible to get it right the first time and this is something we need to keep in mind because a good design is almost impossible to get it right the first time This is insane in my opinion because programmers wanna sit down write code once and say I am done but if you really think about a lot of human activities We never seem to do things in one time we take several iterations to get things done If you look at the evidence of some really famous artists for example the greatest of painters Greatest of sculpters the masterpieces they created, they never created those masterpieces in one sitting There is evidence of several prototypes having been created and that eventually led towards creating this masterpiece And we come to work and think we can sit and get the coding done in one day and be done with it So the very first thing I think we should come to realize as developers is we definitely have to give time to really create the better quality software and we have to really improve on what we do rather than just creating it once and be done with it Because I firmly begin to believe now that software is a never actually written it is always rewritten So we definitely have to provide ourselves the opprotunity to rewrite software As much as we can and why should we really care about it? Because a software has to constantly evolve if somebody comes to you and tells you they wrote the software once and they never had to change it again what they are telling you is that their project got canceled because any software that is relevant has to change and we have to be constantly changing and evolving software that is extremely important So, as a result, we should really afford for the change, that becomes very important to make it possible But how do we evaluate the quality of design? Well, thankfully there are some really good ways to evalate quality of design and we are gonna talk about some of those things And how do we create good design? I want to say, if we want to create a really good design there is one first step I think this is not easy but we should try, the first and foremost To create a good design, the first step, this is the hardest step actually is: ‘Let go of the ego” So, this is really hard for a lot of us, right? Because, it’s MY design, I created it Well, at some point we got to realize, you know, we can not be perfect By definition we are human, that means, it rules us out, we cannot be perfect and we have really to let go of the ego, and work towards creating better design and the minute we let go of the ego in us, I think we get better and I want to say a little bit about ego, I don’t think we want to really have no ego at all that is important, because if we don’t have any ego at all, we wouldn’t have pride we wouldn’t have passion in what we do, so ego is kind of like cholesterol: you want good parts but not the bad parts so you want to make sure you that you have the right amount of ego to really get motivated to do stuff but not enough to [ … ] our progress.
So, let go of that and the second thing I would say in this case in creating better design is: Be unemotional. You know, when it comes to creating design, we often get really emotional You may look at this and say: gosh, this guy is talking about non-technical stuff Well, I think that’s really the first step, because this non-technical things really makes it hard for us to develop better software So we really need to be unemotional about it. So, when we become unemotional we are not attached to the solution and what we are really attached to is solving the problem we have So, one thing we could say is.. I would like to, as much as I can, say: “Here is an idea, I want you to either do this or come up with something better than this” And when it comes to people, I think it’s important to have people who can challenge each other, that’s very important And I want to say this because this is really something that I am looking for and I am gonna say, per se, this is something critical to think about When you have people working with, there are two kinds of people that are dangerous to work with. So, who are those? So, one, who can’t follow instructions; these people are really dangerous Two: who can only follow instructions; these are also very dangerous So, folks who cannot follow instructions, you tell them what to do you come back from lunch, they are still sitting there I told you exactly what to do, why wouldn’t you do it? The other group is even more dangerous, right: you tell them what to do and they literally did that And they are like, instead to, you found there is a better way here, why didn’t you do it? “Because you didn’t tell me to do that”, right, and that’s really dangerous also So, I think it is important to empower people, so that people will have the courage, the confidence to deviate from your plan and that’s one of the times when you want people to come back and challenge I remember this one time, I had a person walking with me and he said How do you do this? I said: I know exactly how to do it but I won’t tell you! And I want you to go find the answer for this.
Here are some ideas I want you to come back and tell me what you find, but here’s a little direction About two hours later he said: by the way, thanks for the tip, I figured it out and I have implemented it. So, show me what you have. And he shows me what he has

77 comments

  • Mourad Mahouachi

    Best presentation ever ^^

    Reply
  • Sina Madani

    Great presentation; although very similar to his previous ones.

    Reply
  • Eddie Jackson

    Love….lol…this guy is pretty funny.

    Reply
  • Dinh Thi

    Great, Thank so much !

    Reply
  • MusicByJC

    Good video. Good energy in the presentation.

    Reply
  • Bo-Han Liao

    Wow, That's embarrassing when I realized that I'm violating these principles everyday until now. Thanks for this wonderful presentation!

    Reply
  • Antimo Di Comite

    https://youtu.be/llGgO74uXMI?t=3449 standing ovation "I know where does those method come from…. The people who wrote long methods are working now make those method long as we speak….. "

    Reply
  • Wembley Leach

    Great talk! Reminds me a lot of Clean Code.

    Reply
  • Amadou DIA

    great presentation!! a lot of very good anecdote, thanks

    Reply
  • nikotwenty

    I don't get why devs/speakers always talk about when you come back to look at your old code you won't recognize it. I always remember what I did, if not right away, within a few minutes . why are so many devs supposedly plauged by this? I don't think it's true, I think it's just a talking point myth

    Reply
  • Nikolay Bobovnikov

    Interesting idea – to use a text editor for the presentation. You can change the slides on the fly 🙂

    Reply
  • sha p

    thanks a lot Venkat sir , you rock as usual….thank you

    Reply
  • Nelson Raul Cabero Mendoza

    what is the editor he uses?

    Reply
  • Matt Nielsen

    I don't know about you, but I wouldn't trust a man that uses a Mac to tell me how to design good software.

    Reply
  • Josiah Tobas

    I've been looking for someone who teaches good design principles. He has what it takes, and I'll be viewing more of his videos.

    Reply
  • Christoph Za

    Anyone noticed Venkat is wearing socks? That is – as the lecture – great 😀

    Reply
  • Johan Zahri

    He invented TDD 17 years ago! (Joking..:D)
    Loved the lecture.

    Reply
  • LongValleyT

    32:28 – 32:44 ; 1:02:21 😀

    Reply
  • Bryon Lape

    If you don't comment code, but use one page of Javadoc, you are a hypocrite.

    Reply
  • Chiranjib Ghorai

    "Coding is like violence, if it doesn't work use more of it" 😀

    Reply
  • kookoon

    this guy is so funny and easy to listen to, i would listen to him forever.

    Reply
  • Fazlan Nazeem

    what an awesome presentation

    Reply
  • Michal Pavlíček

    Awesome 🙂

    Reply
  • jalal sadeghi

    Great presentation ,good explanation of detail of software design principles

    Reply
  • Sameer Langde

    Rightly said – you can only improve your design by applying all these principles is when you retrospect – applying it while writing code the first time would be like recollecting all the rules of grammar before forming a sentence to speak.

    Really thankful for the videos.

    Reply
  • jjuel5

    What is he using for his TODO list there?

    Reply
  • Sunil Sharma

    Venkat sir.. You are amazing as always

    Reply
  • Marcelo Augusto

    Pay this guy a beer. He's awesome. Great presentation.

    Reply
  • Hari Alla

    Must watch for every Software Programmer. First time i have watched a Tech presentation like a Movie. I have become fan of you sir.

    Reply
  • Juan Garcia

    i'm so thankful ,i came across your videos.

    Reply
  • Thulsa Doom

    i TOTALLY don't agree on not having comments..that is just plain stupid…too much joking not enough seriousness

    Reply
  • Abdulelah Al Jeffery

    even though he takes very few pauses while talking, he is still easy to follow 🙂

    Reply
  • Omego2K

    I don't get it at 2:05:18

    How does inheriting from A violate LSP here? The contract of using B through a reference of A remains identical. You are able to substitute B wherever A is needed without repercussion.

    Reply
  • Moonz97

    Awesome guy. Entertaining all the way through!

    Reply
  • Jnana Rana

    So nicely explained the complicated stuff

    Reply
  • Ritesh Man Tamrakar

    DRY SOLID Presentation. Thanks!!! I will not YAGNIy it in my work anymore 🙂

    Reply
  • bikejoede

    Fantastic teacher!

    Reply
  • Ajay Menon

    A nice watch after having a really bad day. 🙂 Thanks Venkat.

    Reply
  • Phạm Hữu Bằng

    His accent is very good, no Indian accent.

    Reply
  • Stefano Coletta

    Awesome.

    Reply
  • xtraWikipedia

    And now I am gonna create a manager class and as you would expect, manager does absolutely nothing

    Reply
  • Denis Gantsev

    funny and informative!

    Reply
  • InsideLyfe

    Great energy and great pace of presentation. Crisp explanation of various design principles. Single shop to buy all design principles. I would recommend to many.

    Reply
  • daverdal1

    haha, "the aliens wrote it when I was sleeping" . ahahaha

    Reply
  • Kovalski

    In one word: genious 🙂 Than You sir for sharing your knowledge with us

    Reply
  • C0deLikeaPRO!

    1:05:00 – long methods are bad… because they are hard to NAME, , I cant believe no one in that entire room called that one out

    Reply
  • Abhishek Singhabhishek

    Stand-up comedian Venket https://youtu.be/llGgO74uXMI?t=8227

    Reply
  • Satish Rock

    Beggars…! This Video for Software Engineers. You just skip this Video. Because you don't know anything that's why putting Bullshit comments

    Reply
  • Narsing Wadikar

    good expln

    Reply
  • Rogelio Moisés Castañeda

    A YouTube developer wanted to put two thumbs up buttons but he was told: YAGNI. Well, I actually need them now!

    Reply
  • Prabhakaran Manickkavachagam

    i love this video..

    Reply
  • Nano Byte

    the concepts are nicely and clearly put.

    Reply
  • Kenichi Mori

    Distance presentation

    Reply
  • Sudip Bhandari

    1:30:10
    Can ayone tell me what's the editor/tool he is using while demonstrating? It seems simple like a text editor with easy compile/debug

    Reply
  • Sanjay

    Longest method I have seen with so many lines that even putting a single line in that method, compiler would give "code too large" error for that method.

    Reply
  • Diógenes Gondim

    Give this guy a cookie!

    Reply
  • Jay Killeen

    Great one! Reminds me of Sandi Metz talks. Such good leadership. 10/10 would watch again and again

    Reply
  • Rishabh

    I discovered Venkat today and I am lucky I did.

    Reply
  • Eric Halim

    So functional programming better than oo programming?

    Reply
  • nyrtzi

    It's the same with user interfaces. Familiarity isn't the same as simple. Devs often confuse a familiar-looking user interface for a simple one.

    Reply
  • Sarir Ahmad

    How fluently he speaks and very best lecture

    Reply
  • Reemus Kumar Vincent Peeriz

    The presentation is very simple. But, one has to watch it over and over again to get all of it. Thanks a lot, Venkat 🙂

    Reply
  • redbenus

    Good talk, annoying voice tone

    Reply
  • Adrian B

    Interesting video! Watched till 41:30 but i've got other things to learn atm! and will get back to this another time.

    Reply
  • Arjun Thakur

    I think he is wrong at 1:59:20, Scala doesn't have restrictions on collection of base class not accepting derived classes.

    Reply
  • Abhishek Kumar

    The epic humour: 4:45, 13:40

    Reply
  • Walter Hill

    Well Done Venkat!!!

    Reply
  • Vimol Kshetrimayum

    I like his statement "A good code is like a joke". This is the best explanation.

    Reply
  • Mochilador

    This guy is amazing.

    Reply
  • auchan42

    Still relevant in 2019

    Reply
  • saarah khan

    27:16 🙂 😛

    Reply
  • Sneha Rathod

    Superb talk. Really informative

    Reply
  • leo mak

    Great talk. I really like the way he thinks.

    Reply
  • Matt Erhart

    Good explanation of when to implement 21:50

    Reply
  • Mohamad Mawed

    Great talk from a truly genius developer.
    You are amazing as always.

    Reply
  • mohit valecha

    You are the real champ Venkat!…really entertaining and informative…lovely.

    Reply
  • Koj

    Where can I buy his courses?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *