Where developers come to connect, share, build and be inspired.


8 Things I’ve Learned As A Web Engineer


1) Web engineering relies very little on CS academics, algorithms, big O etc

I do not have a computer science degree yet I’ve worked in 8 companies in the last 13 years holding leading software development positions. 99% of what I do I learned by doing. My lack of a proper CS degree only haunts me during bullshit interviews as many interviewers who do have a CS degree tend to focus on CS academic topics rather than things a web developer would actually do during his tenure at the company.

2) Engineers are paid way too much

When I look at the different types of jobs that exist which a person could do, I just can’t see how sitting at a desk all day hacking at code should command salaries of 100K+. It seems too easy. The world is completely unfair in this respect. For example, when I see the wait staff at a restaurant running around to serve dinner, I feel these people as working much harder than any internet engineer you’ll ever see. The bay area is home to 24 year old engineers sitting in herman miller aeron chairs taking breaks to play ping pong and check Reddit all day.

3) There are no women in technology

Of all of the tech teams on which I’ve been a member of in 13 years, I’ve only worked with 2 women. One was foreign.

4) Avoid SQL joins in your website code

One of the bigger websites I worked on relied heavily on SQL joins at runtime. Do not design sites this way. Write database access code which uses CRUD-style access on single tables at a time without transactions. It’s faster, can scale properly, and you will avoid SQL deadlocks.

5) Manager? Treat your employees like you’re lucky to have them

Of all the places I’ve worked, about 50% of them treated their engineers like shit. If you are a manager, you should be fired for not treating your engineers like solid gold. Period. Take your team out for fun events. Given them flexible hours. Publicly acknowledge their achievements and encourage professional growth. Developers are the kings of the Bay Area, yet 90% of them don’t know it. Of all of the careers that exist, engineering is one where the employee has the upper hand. Demand respect or leave. You’ll find it elsewhere.

6) Work sustainable hours

It takes so long to develop things to a high degree of quality, be careful not to work your life away. If you’re in your 20’s or 30’s, it’s easy to have the mindset that these are the hard years where you need to put the extra hours in. Don’t forget that most things don’t work. The work will always be there but your youth won’t be. Spend time with friends. Meet new people. Do as many social activities outside of work as you can. There’s more to life than your work so live it.

7) Only join growth companies

In the Bay Area, I feel like every idea still gets funded and there are tons of shitty ideas. If you’re good, don’t join a zero growth company. Join a company that’s fucking kicking ass. During your interview, be sure to ask for what the KPI’s of the company are and how they are growing. Use your spider senses to see if there’s really any growth at all. Working at a high growth company will have a hugely positive impact on the rest of your life.

8) Don’t be an asshole

It’s a lot easier to be a great engineer than a good person. When you move on to the next thing, people will remember you less for your skills and more for who you were. When I think about people I’d like to hire, I only consider the people who were the kind of people I’d want to drink a beer with or introduce to my friends.


  • 0_hokl9hnrj6ilirs0epta9wku0bmeipe0ejka9wbxh3szpcgxk48gzi1oaeab8nw1djt7j2msw6it

    I disagree completely about the "...paid way too much" thing. I believe you are suffering from a loss of memory regarding how much you had to learn in order to get so good at what you do that it's trivial. That kind of knowledge takes a long time to acquire and many people simply don't have the ability to get there. Also, It's a supply and demand thing. Universities everywhere are turning out highly capable waiters and waitresses. But coders are always in demand. Especially in the foundation arts like Java, C#, HTML, CSS, MVC server architectures, etc.. DON'T DOWNPLAY YOUR SKILLS!

  • Blank-mugshot

    Thanks for sharing your experience! I have some questions...

    1) Web engineering relies very little on CS academics, algorithms, big O etc

    I studied CS and I think it's very helpful, aquiring a solid knowledge base delivered to you in a systematic way is not only more efficient way of learning than reading books and writing amateurish code but also enables you to further learn myriads of new things when you're on your own, systemize things in your head, have a holistic approach to problem solving. I agree that to become good Web Engineer and solve real world problems just having a university degree is not enough, it takes time to learn to actually apply your knowledge in an efficient way (along with developing quality standards, aquiring methodologies, etc.). But you've gotta have that base knowledge first just so you don't get buried in the avalanche of information flowing at you at high speed.

    I'll be looking for a new job soon and I'm planning on refreshing and/or filling that gaps in my "CS academics, algorithms, big O" skills (besides updating my portfolio, of course). I'm curious to know, which IT field do you think actually requires CS skills if not Web Engineering, as you suggest?

    4) Avoid SQL joins in your website code

    That's an interesting statement! In my mind, even a small website would have multiple tables with references between them, thus the need to use JOINs at least somewhere. Do you, perhaps, mean that one should avoid doing so in runtime by employing a caching mechanism? Can you elaborate on that point?

    Otherwise, thanks again for some advice!

  • Blank-mugshot


    How productive can a waitress be? I mean the very top of waitress in the world , maybe she can be as twice productive as average waitress be, then she is already a superhero.

    However, in the software industry, very top engineers can be 10~25 times productive than average engineers be. I am not the one saying this alone, Steve Jobs said this, Peopleware said this, everybody knows this.

    And you said, hey, this guy, he can do 10 times productive than others do, but still, he only deserves the same salary as everybody does? The salary is too high?

    Think about this, hiring 10 average engineers v.s. hiring 1 top engineer. You know, software development is not like common labor works, you cannot simply improve the performance by adding more people on it. There is communication cost. You cannot team up 10 engineers and hope they can be as productive as the super one be.

    Okay, let's lower the standard and do some calculations, assume top engineers are 5 times productive than average ones. Average ones takes 60K salary, and top engineer takes 100K salary. Hiring 5 average engineers costs you 5 * 60 = 300K. Hiring 1 top engineer cost you 100K. Oh, don't forget the communication cost for those 5 engineers. Let the CommunicationPenalty(size=5) be 50%, then you have

    ((300K / 50%) / 100K) = 6 times C/P

    See? This is why high end engineers are so hot, so expensive, but still, they are super cheap from the cost/benefit perspective. Salary too high? Think again. :)

  • Blank-mugshot

    "Engineers are paid way too much": where I am (Singapore), I think engineers are paid way too little... a university graduate might start off with SGD3000/mth if lucky (I think many graduates just get like ~SGD2xxx - if I am not wrong).

    Anyways, if you think you earn too much, and the poor deserve the money more, you can always donate some away! Maybe give some as tips?

    Otherwise a good article.

  • Blank-mugshot

    Nice post!

    1) In Puerto Rico, no company will even consider you if you don't have a CS Degree and 2-4+ years of experience unless you already know someone inside. I almost finished my CS degree but I had to drop out. I was wasting too much money and wasn't getting the education I expected. Most classes were a joke. This move may not work for everyone, but it was the best decision ever for me. As an autodidact, I don't have to wait for knowledge to be poured on me. If I want to learn I read, practice and then share it with anyone interested.

    3) I've only worked with only one female developer and she kicked ass at writing code. It seems that there aren't enough women in technology, but in those small numbers are great minds. I wish there were even more!

  • N541256795_1168211_2561

    I want to have a CS. I think there are a lot things I could learn. I've worked with people with CS degrees and they've taught me a couple things. But, sometimes they bring things in that they thought was the holy world, which was most of went "WTF is wrong with you?!". Just because you spent money on something and they taught you something, doesn't mean that it's good for real life.

    "The world is completely unfair in this respect. For example, when I see the wait staff at a restaurant running around to serve dinner, I feel these people as working much harder than any internet engineer you’ll ever see."

    This example I feel is a horrible one. If you are truly an engineer, then you are using your brain to connect things that are not obvious or are creating something completely new. Taking an order from a table and delivering to the cook, getting drinks/refills and delivering food is really easy. Dealing with peoples attitudes can be a pain in the ass, but the job pretty much entails physical work and not much on thinking, only memorization. I wont say that all physical jobs are not though involved, but digging a ditch can be done by any able body.

    Of course there are lot of people that are over paid, that should be working as the assistant to the the junior web developer.

    I've worked with several females in the programming arena. It is rare to see, but I think men tend to put them down because they feel threatened by them.

    "Avoid SQL joins in your website code" There is a trade off in this. You can make a large set of columns in your database, which can replicate the same set of data hundreds of times, which equates to more disk space usage. Or you could not use relations at all an handle it in your app which mean more code. Or you could do relations and sacrifice a little performance.

    Managers are a lot a like in most areas of work. Not just in our sector.

    Ah, the memories of working from 7 to midnight....

    The Bay Area is over hyped. I was born there, I lived there. I now live in a totally different area. There are a lot of companies with shitty ideas. Usually they are small and it's run by someone that doesn't have a clue on how to really manage a company and are more about getting $$$, with out thinking about their employees.

    I tend to remember people as "They were a great engineer, They were a good person (They didn't really know what was up), They were a dick and didn't know WTF they were doing.

  • 7be2d22b0fff61c5a878650f13b34d7d

    About SQL JOINS

    I think sql JOINs can not be always avoided.

    Let's take a very basic, well known example: storing authors and blog posts in a db. If we create two tables:

    * authorid
    * full


    * postid
    * author
    * title
    * text

    When we want to show the list of posts and their authors we can do a JOIN like this:

    SELECT authors.author_id, authors.full_name, posts.title, posts.text FROM posts JOIN authors ON authors.author_id = posts.author_id

    How should we avoid the JOIN in this simple scenario?

    Can you give some concrete examples with avoiding JOINS, and how to avoid them?


  • Blank-mugshot

    Nice post for your true words! but I do agree with @frankenpc, that DON'T DOWNPLAY YOUR SKILLS. Stay hungry stay foolish and spend these time on what u really want to do or maybe people u care about in ur life. Nothing that is eternal lasts forever including animals(I mean we are all animals ).

  • Blank-mugshot

    Nice article, but all jobs are not created equal, we all care for the waiter and wish they would get paid more as well as any person working a menial job for a menial wage but the relationship you have drawn is erroneous for obvious reasons. Seriously the whole "Engineers get paid too much" rant kills me and it really goes to demonstrate that even those who work in the Engineering field aren't very rational in their thinking at times. In some sense I feel it comes off as more of a brag/ whine, it may seem insignificant but it's not, sitting on a computer all day typing code is a chore most people would rather not have. Is a plumber beneficial to society, absolutely, he/she provides a service for our most basic needs but it also doesn't take much to fulfill their position. Do many people have what it takes to be a quality Engineer? Providing numerous quality products and services for people, simplifying their lives, bringing them closer together, whether its an online mapping service that gets them from destination A to B within good times, managing a site like 'Facebook' that keeps people connected, or a site like Zoc Doc that prevents you from seeing a potentially bad doctor. Web Engineers have developed very valuable businesses and products that serve billions, I think of the time saving social apps that I use today that were inconcievable in the past and time is perhaps our most invaluable commodity.

  • 53f421eabf21e9641b354ef0c192e4cc_normal

    You are 100% wrong about JOINs. You are advocating a solution that is much worse than the problem you are trying to fix. If your queries are slow because of JOINs your database is poorly designed or your queries are badly written, it's a simple as that. You are casually dismissing 30+ years of RDBMS experience.

    The integrity of the data in your database is much more important than your concerns about speed or scalability. RDBMS optimization and scalability are problems that have already been solved. You inventing an ACID-compliant system that's better is unlikely.

    I suggest Chris Date's book "Database In Depth: Relational Theory For Practitioners." It's written for programmers.

  • Dzavatar12_normal

    3 is just sad, but I agree with the rest. Nice to meet you Jonathan. http://linkedin.com/in/dianazink

  • Blank-mugshot

    very easy. this way.


    • authorid
    • fullname



    • postid
    • authorid *authorfullname
    • title
    • text

    this way you can increase reading speed 2-3 x but decrease uprade time 0.1 x

  • 5fec3f76b8651b8e35dada9fe440f428_normal

    Awesomeness !

  • Blank-mugshot

    Nice post. A couple comments though:

    1) Don't undercut your skills, and the skills of other engineers. It takes a long time to learn the skills to be any level of decent engineer. A waitress only has to bring food around to tables and smile. Yes, it's harder physical labor, but anybody could (could being the key word) do it. An engineer has to learn all sorts of different ways to bend their brain, and solve real world problems. Workers that do skilled labor have always made a higher salary than their unskilled counterparts. That's the way the world works. Is it worth 100k+? Of course it is. The market will bear it, and therefore that is the salary. Supply and demand.

    As you get in to freelancing, this becomes even more noticeable. Depending on your notoriety and skill set, you can charge far more to clients than you can if you're an unknown quantity. That's partly how you set your hours. By setting your rates for certain times that are well above most companies acceptable limits. Sometimes they will surprise you and accept the $400/hour rate that you quote, but more often than not, they wont. Particularly when you say '$400/hour for this week, but the following week is only $90/hour.'

    2) Avoiding SQL joins. I found this highly amusing. I've been saying that for a long time. If you take it to heart, it completely throws any reason to use relational databases out the window, in favor of NoSQL ones like Mongo, Couch, Riak, Cassandra, etc. At least from my stand point. But that argument is probably worth its very own post, so I'll leave it at that.

  • 0_ium7swvdbogwfktewx0rsobebjh57c1ed0srsovveupvk6xobgw_ie3umres25-qozulcsbic004

    Nice one especially describing the fact that world pays higher for comfortable jobs and lesser for harder one :)

    But you should keep working and be honest with your work. It does not mean that SE don't work harder. They really work with their brain. So the difference between the salaries is due to difference in source of effort.

    So you can conclude this thing in this way:

    World pays higher for brain activities as you loss your health by sitting at chair all the day. That cost is also included in your salaries. :)

  • 0_ium7swvdbogwfktewx0rsobebjh57c1ed0srsovveupvk6xobgw_ie3umres25-qozulcsbic004

    Nice one especially describing the fact that world pays higher for comfortable jobs and lesser for harder one :)

    But you should keep working and be honest with your work. It does not mean that SE don't work harder. They really work with their brain. So the difference between the salaries is due to difference in source of effort.

    So you can conclude this thing in this way:

    World pays higher for brain activities as you loss your health by sitting at chair all the day. That cost is also included in your salaries. :)

  • Lplp

    They pay because you can.

  • 53f421eabf21e9641b354ef0c192e4cc_normal

    And thanks for spreading bad database/SQL ideas around. I make a good living cleaning up the mess left by programmers who do stuff like kocyigityunus advocates in the comments. If you think half-baked solutions like that scale better (including scaling over time) than proven relational techniques please refer your clients to me when you can't keep them happy.

  • Blank-mugshot

    @typicalprog: What if posts and authors reside on different shards? :) Sometimes (albeit not very often), denormalization is required in order to achieve your load requirements.

    Having said that, I much prefer JOINs if you're sitting on a single shard.

  • 53f421eabf21e9641b354ef0c192e4cc_normal

    There are always cases where denormalization is a solution. The author is advocating unnormalized data -- by eschewing JOINs from the outset the data will never be normalized (and therefore can't be denormalized). For the rare databases that scale to the point where sharding and denormalization are actually needed, great. But in my experience those cases are rare and occur in organizations that have resources to use high-end RDBMSs such as Oracle. The large majority of databases can be handled just fine with normal proven relational techniques. If those are failing you first look at your schema design, your indexes, and your queries.

    When I used to do a lot of C and C++ programming I would sometimes work with programmers who blamed every bug in their code on the compiler or the library. I've run into compiler bugs once or twice in my career. I've run into bugs introduced by other programmers tens of thousands of times. The same goes for databases: if your database is slow or crashing or not working for your application you should first look at your own code and database design and not assume relational theory and SQL sucks because you're using it wrong.

  • Blank-mugshot

    I'm totally disagree with statement what "Engineers are paid way too much"!

    To begin with: an engineer has to obtain a proper education, which may cost a lot! Further more, it's much worse for you health (hart, eyes, muscles) when you are sitting all day in front of a computer then running all day as if you had worked as a restaurant staff. Isn't it? Yes it is true that we have better salaries. But on the other hand, we always have to spend money for further education, which is do not needed for restaurant staff. Right? So, think twice :)

  • Blank-mugshot

    I know it would sound weird but make a separated select FOR EACH record. Why? JOINs are pain in the ass when you consider aggresive caching.

    JOIN make a deadlock and wastes too much of space of eg. Memcached. (common part of data of every record).

    Moreover, using join you can't scale at many machines scope. Using JOIN all joined tables MUST BE accessible for one RDBMS. Using SELECT approach you can scale it into different machines without replication on even different services. For example, user database is stored on MySQL but post data inside Redis. It will be fast as hell.

    Yes, it sounds weird but any app scaled quite larger than one machine drops the normalization and goes into the scalability.

    Two years ago I was amazed too when the CTO of the company consisting of hundreds of memcached-only machines told me so. But it HAS a point.

  • Blank-mugshot

    I also disagree on the "Engineers are paid too much" statement. We are closer to the money. Our work has direct impact on a company's ability to increase their bottom-line and/or efficiency. If one engineer's salary reduces costs by $200k per year or increases revenues by $400k, would you say $100k is paying them too much? Of course many times these metrics aren't taken into account, but just know that we can move the needle for a company much more readily than an unskilled laborer who is just a "cost center" and not a "profit center".

Add a comment