Conf42 Python 2021 - Online

Don't put your server in a nuclear silo

Video size:

Abstract

Over my career I made lots of mistakes, lots of them very stupid but I got some cool anecdotes. My hope is that you walk away amused and wiser for this experience :)

Summary

  • I'm going to be sharing a bunch of anecdotes from my last decade of development. First anecdotes in the series is how I learned to do Linux administration. You should always try to be the smartest person in the room, no matter how insane it is.
  • You need to talk with your clients before sending them proposal to figure out what's important to them. Sometimes clients just want to try making something and sometimes the project they're wanting to build requires expertise from their side. Sometimes it pays to talk to friends of the clients that are giving them awesome advice.
  • One thing I realized pretty quickly is that I have no idea how to do design. Learn your limitations. Have a set work time. Personal life is more important than your programming skills.

Transcript

This transcript was autogenerated. To make changes, submit a PR.
Hello and welcome to my talk. I'm going to be sharing a bunch of anecdotes that encouraged during my last decade of development. And there has been a bunch of crazy stuff, mostly due to myself. First anecdotes in the series that I chose based on no order whatsoever is how I learned to do Linux administration. Basically it was the middle of the night, which is a perfect time for doing any sort of administration Linux production servers. So I wanted to delete some stuff. It was in a separate directory and normally I'm going to delete it with using pseudo privileges. So pseudo remove recursively everything under slash. Now for those not so versed into Linux as I was that moment that deletes everything from hard drive. And good thing is some things stay in memory. So there exists at a brief moment in time there was absolutely nothing on the hard drive, but website was working after 30 seconds. Once the realization hit me about what I just did, I had to boot up the new server, install all the requirements, do got deployment, set up all permission, check if everything is working correctly, and dont DNS server to that. Now that woke me up very fast. If you want to switch from Red Bull or coffee, I warmly recommend deleting production servers. That's going to wake you up very quickly. And I remembered almost everything from stack orderflow that I googled in that panicked moment. So that's how you should start your morning now. Another crazy stuff that I did was basically using text editor for the development. I know there are some super smart people, they can do text editor for development of complex programs, but myself am got among them. I love my autocomplete, I love syntax checking, all that stuff. So using Notepad, notepad Plus, but just notepad for the first two or three weeks of my career was not a good choice. To make it even better, I was doing basically had one file would write into it, then FTP uploads to the production server because what else? And if I managed to mess up the PHP syntax production site would crash. But that was okay because client was in USA and you would not notice that. So develop in the completely opposite time zone of your clients. That's a very good lesson if you're going to use production server for your testing purposes later. I did realize how you can create your local environment and why you should have a staging environment and dev environment when it comes to that. Things that I learned after that is version control. That was super amazing stuff that I discovered before entire mankind. Since what I was doing is every time I would upload a file to production server using FTTP. I would just make copy of that file with a timestamp and that way I could return to it later if there was need for that. I was watching YouTube at the time and I saw somebody talking about version control and I realized this cool, be good. I started using it and it was super fun. Then I think it was two years after I realized that branches existed in git and after that everything was super awesome. Another thing that is super useful is you should always try to be the smartest person in the room. That way everything you say is absolutely correct, no matter how insane it is. Since we were working at the startup in the first company we didn't have lots of resources, so we hired a bunch of juniors and me with my six months of experience was leading them technical disaster in all the possible ways. Seniors are expensive, but they are less expensive than juniors. Try to have a mix of them and company culture is important. Also, I realize I can be pretty stupid at the time, so I need somebody smarter to tell me when I'm making crazy stuff. Now that first startup was done, I realized, okay, in the end we managed to create something good because it was a search engine, it had some super good performances and you could get the listing from million track articles in less than 15 milliseconds. With the solar that's super good. Now design was created by me in the first version, which means that everybody who visited that website started bleeding from the iris. But later I hired a designer. That's probably smartest thing I did at that point, and website looked pretty good. Now why did that website or startup failed? Well, after one and a half year we realized we do not have any sorts of monetization plan. So before you start working on a project or a startup, figure out how you're going to make money. That's one of the things that's pretty crazy to me today because for most of the Silicon Valley companies, their business plan is we're going to get zillion users, then we're going to get funding, then we're going to got acquired. Myself, based on my lessons, I love to get business plan early, see how I'm going to monetize this project. It doesn't mean writing 50 pages of business plan, but I need to know how this thing is going to make money and focus on that. So with that in mind, I decided we should start the second startup. Now we are all smarter and super good. Same team and me. We decided we're going to make social network because it was 2012 2015. You can check on my LinkedIn profile. I do not remember the years, but social network movie came up and our main investor really wanted to make social network and we were all very excited. Now since social network was very hype at the moment, there was also another technology that was super hyped and you know what? That was NoSQL. Normally we started the project with MongoDB and everything was super good because we were ready for a web scale. Two years later, I did realize that majority of the code I have written related to communication with database was to turn it into relational database. So that's my lesson to you. In 95% of the cases, relational database is perfectly fine for you. You do not need to jump straight into NoSQL. And when you do, you need to know why are you jumping into NoSQL database. Do not be afraid. Relational databases are good. I can assure you I've been working with them after I learned my lesson. The second lesson that I learned during that whole trip is dont get hype driven. That second startup was pretty amazing to multiple factors, mostly because I learned how not to do things. Our main investor, he loved having meetings because those would inspire us. So every day we had hour and a half meeting where we would listen to speeches and get super inspired and get motivated to work whole day. This is not me making fun of my clients. This is me telling you how I failed to communicate and manage that project. Today, I would not allow client to hold that many unproductive meetings that had absolutely no point. I would communicate better. At least I hope I would communicate better to a client that his time can be spent in much more productive way. At that point in time, I did not know how to say no to the clients, because sometimes you need to say, this is not working. Also, we worked on that project for a year and a half before actually getting to our users. Now that's another lesson that's very well done, because once we release it, we release. Nobody's going to use this stuff. And always talk to your users, see if they want to use that crazy thing you're building. They may want to, they may not want to, but talk to them because you want to fail fast as possible. Less money spent and more you can focus on something else. And another thing is talk to your team. I did not communicate very well with my team. One time I decided to speak with each of the team members, 15 of us. And what happened is I just asked him a simple stuff, what are we making? I got 15 different answers, myself included in those, they were not even the similar. Everybody thought we were building the different thing. And I can assure you that product looked absolutely schizophrenic and was unusable. Now, after that, I started doing consulting because it should be less stressful than developing your own product. And I had plenty of python architecture skills. I encountered some very interesting clients. Sometimes it would be nontechnical client. Those are very difficult to work with because what you need to do is establish the trust between you and them. Basically assure them that you are not trying to steal money from them and that you know how to do your work. Almost all of the time you're going to be asked to send a proposal, and that proposal is going to be beautiful. I know that because I believe in each and one of you. You make beautiful proposals. Client is going to go over 20 pages of that proposal. It's going to ignore completely everything else. So what I learned during that is that you need to talk with your clients before sending them proposal to figure out what's important to them. Is it just the pricing? Is it quality of the work? What are their biggest fear? What problems are they trying to solve? Because sometimes clients just want to try making something and sometimes the project they're wanting to build actually requires bunch of expertise from their side and is critical to their business. You need to differentiate between those two. Based on that, you can make your proposal. I can guarantee your proposal is going to stand out once you've done your research and figure out what exactly client wants, than if you just send them the proposal. If you just send them the proposal, it's going to get ignored. Because if you got your job or contract just based on the price, there's always going to be somebody who can do it cheaper. Now, another anecdotes. One time we were building a simple video player and client was pretty successful in his business, decided to bring more innovation into our product. So I asked him, okay, what sort of innovation? He said, don't you think that majority of players are just one dimensional? I said, okay, what do you mean exactly? You can move backwards and forward in the video. How about we make it three dimensional? Okay, so you can go backwards and forwards in the video, up and down, could handle the volume. And what's the third dimension? You can go backwards and forwards. So I thought to myself, what's the third dimension? You can control videos. Would that be something else? However, client had very much confidence into me and told me, you can figure it out. Now, I spent about two weeks trying to figure but how to create the player controls that would work in three dimensions. And when I figured something out, I talked with clients and he already forgot. So don't be afraid to tell clients that they can be a bit crazy or let idea slip for a bit, because that can happen. Now, the most interesting type of clients that I encounter are clients that have friends that know something. Basically, they would get friends to tell them what's good or not. In my case, since I love doing things with Python, I would make a proposal for writing entire website in Python because I know that stuff. The client would ask their friend and they would tell me, yeah, but their friend says they're using Java in their company, so Python is no good. And I was like, okay, but you can write website in. No, no, they're not using Python. Well then you need to find, no, no, no, we want you to write in Java. So after back and forth asked to speak with their friend and they told me, yeah, you can write stuff in Python as well. Sometimes it pays to talk to the friends of the clients that are giving them awesome advice. Sometimes it just pays to pass on the project. And one anecdote that every designer is going to tell you is the moment when their client's child told them that a logo design is not nice and they need to change it. Luckily, since I'm backend developer, nobody ever gave me a compliment and told me, oh my gosh, your backend code is so beautiful. Most of the time what they tell me is, okay, it's working or it's not working, fix it right away. So that's what I do. Ash, I'm sure most of you have come to hear the story about nuclear silo and Python development. Well, at the peak of 218, when blockchain was all decraised as it is now, client decided to create a new blockchain and they invested a bunch of money into that blockchain. So one time, since I was a contractor and I was the most expendable person on the team, but sadly, I was the only person who knew the entire back end because I built it. I was also the person who could not be easily fired. So they put me as a sacrificial lamp to hear an idea from the CEO because nobody else could say no to him because they would get fired. I said, okay, I know something crazy is going to happen, but let's hear it. CEO starts telling me, okay, since we are developing this blockchain and it's going to got super popular, what we should do is basically buy a nuclear silo and put our servers there move everything from AWS to nuclear silo, and that's going to be super secure. And I was thinking back a little, because my first question is, you can buy nuclear silos. To which my response I got, yes, they're selling decommissioned nuclear silo for just 800,000. For me, that's a super good deal. I don't have that kind of money, but if I ever wanted to buy decommissioned nuclear silo, that's a super good price. So I tried to explain to a client that that's not how computer security works. AWS has a good security system. You just need to configure it. And we had a bunch of back and forth, and then I realized I'm using technical language. So I explained to him that using nuclear silos to secure your blockchain servers is the same thing as buying a dog and putting it next to your computer to ward off the hackers. And that worked. That metaphor solved everything. We did not buy the nuclear silo, which is super sad because I cool have worked on nuclear silo project, but can't have everything. And what he didn't mention that meeting, which I probably should, is that security and nuclear silos were not the biggest problem on that project. Problem was that nobody was using that blockchain. It was pretty much useless. So, lesson for everybody. Focus on project market fit, get some users, then try to solve problems in that area. And another client wanted us to write a file system for a website that was basically a marketplace. And I asked him why, and he said, well, Google and Facebook, they all have proprietary technology. So that's AWS. We should have our own proprietary technology. So let's write everything from the start. When client asks you something like that, then you know you're going to lose a bunch of times. So what they did is just make an estimate how much it would cost to reinvent a file system, how much it would cost to rewrite entire database from zero and stuff like that. And he realized that for his $10,000 web store, he did not need custom file system and database, and all was good. One thing I realized pretty quickly is that I have no idea how to do design. Because this goes way back into the time when I thought I actually can do design. Now, I'm not sure if you remember, but in the time of dial up days, Flash was all the craze. So I created a website that had five megabytes of Flash file that was always playing music and animation on a web page. And you could not stop that music. And I was super impressed because I was 16 and that was my first website. What was crazy to me is while I was getting so little visitors, oh my gosh, this works super fast on my local machine, but when I tried to visit it from my friend's house, it turns out it takes 20 minutes to load it up. Yeah, I would like to say that I learned the lesson, but as you already know me, I did not. I just left that website because fault was my friend's computer, not his Internet connection, so it was just him. I did try to find that website several years ago, but it's gone. Probably for the best. Also, one of the good things I learned is that I have no idea how front end works because in the olden days before the Javascript alien had a debugger, all the synchronous stuff, all the craziness that was happening there. Internet explorer six, that's all I'm going to say. That was super crazy to me because I love deterministic behavior as people say. I don't hate front end, some of my best friends do front end and my younger brother, he does front end and he's super good and he writes tests for front end. I'm probably only thing I can write in front end is background red in CSS. So learn your limitations. Learn what you want to do and what you don't want to do. Because at the end of the day at this job, you're going to be working it hopefully just 8 hours per day. And spending all that time on something you do not like and do not enjoy is not worth it in the end. Also, let's see, I probably have some bunch of cool anecdotes. Oh yeah. When I had a cool idea about got having a set work time, like when I said to my team, you know, we are super organized and we were all junior developers, we can work as much as we want as long as we finish our tasks. So if you want to work 2 hours per day it's perfectly fine. If you don't want to work Monday or stuff like that, perfectly fine. What happened was utter chaos because fronted was waiting on design, back end was working on something that was obsolete and stuff like that. What happened after that is at one point I realized we were working 14 12 hours per day. I don't know if you ever done that, but that's soul crushing to say the least. So after that I went back to hang regular hours. It worked fine. Like you don't need to reinvent the wheel. I'm hoping you can get it below 40 hours because I'm going to say this on the programming conference, but personal life is more important than your programming skills. I spent last decade programming, and most of the stuff I remember happened outside of programming. You deserve to have a life. Yeah, life tip and I think that's all the wisdom I have to show for at the moment. What I would like to do is had something super crazy and super amazing happen to you. Please share with me. You can reach me on LinkedIn. There's probably going to be link in the description or somewhere else. I also love having virtual coffee with people. I met all sorts of amazing people on Internet. So unlike what most people tell you, Internet is full of nice people. Thank you very much for listening my talk. I hope you enjoy it.
...

Bojan Miletic

CEO @ Softerrific

Bojan Miletic's LinkedIn account Bojan Miletic's twitter account



Awesome tech events for

Priority access to all content

Video hallway track

Community chat

Exclusive promotions and giveaways