> Don’t believe the one-size-fits-all interview process with whiteboarding problems. These serve to grind away your individuality and make you feel like an assembly line worker.
In my experience, the interview process with whiteboarding problem can go one of two ways. One of them is the "find what we think is the textbook solution to this toy problem" way. The other is the "communicate to us as you attack this toy problem so that we can understand your thought processes, problem-solving approaches, and your experience with these topics" way. Only one of these is really objectionable.
I think both of them are, because none of the problems are really good for explaining your thought process. In fact, it is a contradiction to try and think about a solution to a problem and to give a dissertation on how you're thinking about the problem. You can do one or the other, and in the latter case you have to have solved the problem previously.
What I do is ask people about a problem they have solved and get them to teach me about it. If I learn something then it's a good result.
Asking people to solve a trivial problem AND let you into the inner workings of their brain-- normally a non-verbal activity- isn't testing their abilities.
It's not about giving a dissertation. It's about collaborative problem solving. Granted, the interview is rather artificial and considerably more stressful, but you use the same skills when talking about how to solve a tough problem in front of a whiteboard.
So you nest the toy problem inside a toy system. For instance, instead of just asking people to tell you if someone has won tic-tac-toe (a trivial program-yourself-out-of-a-paper-bag exercise to establish confidence) ask them to design the server side of a client-server tic-tac-toe game. Start with the trivial problem, then move on to all the system design questions that you'll want a software engineer to ask in your system and which require serious communication on a team. (API design for the tic-tac-toe server? Application lifecycle? Scalability? Latency? Take your pick.)
Please don't let things like "Apple makes $1.8MM per employee" get to you. It leads to stupid decision-making. Yes, the company is making more money on your efforts than it is paying you. It's called business, you take inputs and add value to them and sell them to other people who will turn around and do the same thing. If you had capital to throw into a business venture then you'd do it too.
I met a guy a few weeks ago who'd moved over from California. He wanted to learn how to code, and told me his story. He was a business sort who went into business with a software developer. The dev did good work, and the business guy managed to get it funded. Just when things started picking up, the dev decided he wasn't getting enough of the pie and bailed, destroying the entire enterprise. He wanted to learn how to code so that this wouldn't happen to him again.
So I'm giving him an hour or so a week to show him how web development works so that he can code a prototype himself. Then he can get funded and hire employees rather than deal with the emotional vagaries of software developers. I don't blame him at all.
Business guys are typically going to make more money than the coders are, it's pointless to fight this. The better route is to go into business yourself and capture the value yourself. The reason is that the business side is the human side, and humans are harder to deal with, ultimately, than computers are. Also, humans have money and computers do not.
Just as much as the business guy wants to avoid the vagaries of a software dev bailing, he's going to have a hard time understanding how good software is created at one hour a week.
It was worth it for the business guy to give up a bigger piece of the pie in order to ensure that the business survives. That he is unable to see that, is either because he is unreasonably greedy or short sighted. Now he is delayed for X months or years because he let his greed get the better of him.
Once a business is well into money making machine territory, the impact that a single good engineer is going to make is dramatically reduced. At that point, the leverage is much lower and the business person can make decisions like you described.
> and humans are harder to deal with, ultimately, than computers are
I cannot imagine this to be true. Take for example the Paxos algorithm. There are few people who can fully understand it. Yet you are saying that some businessperson is doing work that is more difficult than dealing with the intricacies of distributed computing?
The only reason the businessperson is making more money is because he has maneuvered himself into a better position.
The "business guy's" job is exactly to manuver things into positions. He specializes in making more money! You hire him to do that for the company, but the good ones have side projects.
>Take for example the Paxos algorithm. There are few people who can fully understand it. Yet you are saying that some businessperson is doing work that is more difficult than dealing with the intricacies of distributed computing?
Coincidentally, I just went through the Paxos and Raft algorithms last week. Yes, they are complicated but a lot of the complexity is the proof that covers every possible edge case for conflicts and failures. I'm also currently working on populating a multi-threaded Merkle hash tree and the complexity is hitting the limits of what my brain can manage. Nevertheless, I'll eventually make it all work.
Humans, on the other hand are much more difficult. When I was fresh out of school, I definitely thought of the business guys as "the useless suits" and the programmers as the real value-added employees. But since I've tried running my own business and not made much money at it, I've come to appreciate that a few business people out there really have talent for juggling the incentives and motivations of team members.
Whereas moving computer code around in Paxos and multi-threaded hash trees will have an eventual solution, dealing with humans to solve a business problem seems like the social version of trying to prove P=NP.
I think you are biased because you are currently putting (for the sake of the argument) 100% of brain power into your programming work, and 0% of brainpower into business decisions. If you are like me, you think about your Paxos implementation even when in the shower, and while commuting.
Now imagine that you didn't have to do that programming. You would have 100% of your time to make business decisions, talk to people, etcetera. Suddenly, what the businessperson does is not so hugely impressive anymore. Or at least, that is how I look at it.
Even if the businessperson would be 5x as effective as I am on "soft" problems, I would still be 10x more effective than this businessperson on "hard" problems :)
So, to return to the original argument: should I simply accept that business-people make more money than I do? ...
>100% of brain power into your programming work, and 0% of brainpower into business decisions.
>Suddenly, what the businessperson does is not so hugely impressive anymore.
I took a 10 year hiatus from programming and spent 100% brainpower on the business. At the time, I thought I had progressed into being a "businessman" and stopped programming (like Bill Gates).
With that experience, I'd emphasize again that executing business activities such as interfacing with clients, managing employees, and reading the signs of a fickle market to prioritize what software to build and make money is harder than any computing algorithm I have ever worked on including Paxos.
I suspect you're elevating software programming above business tasks because of caricatures like Dilbert PHB (Pointy Hair Bosses) and shows like The Office. Well those stereotypes are true because most "businesspeople" are clueless idiots. But that's just Sturgeon's Law[1] at work: the majority of every profession (programmers included) is less than mediocre.
Creating a business and running it such that it doesn't devolve into bankruptcy is as every bit as creative and as difficult as computer programming. With software engineering, you deal with bits and bytes and defined tradeoffs (this network as X latency, that disk array as Y response time, etc). Yeah, juggling all that is complicated but at least it's mostly deterministic. You add 5 to an integer and you don't worry if a stray cosmic ray is going to randomly flip a bunch of bits around such that the integer now says 48390. The cpu doesn't conspire against you to debug the code.
On the contrary, the following business factors are non-deterministic:
-- humans, such as a fickle marketplace and customers that you can't the minds of
-- humans, such as employees with their own needs & wants that don't necessarily align with the business. Hiring good people is hard, etc
Each human is a like a bundle of bytes in a RAM that have their bits being randomly flipped by cosmic rays. There is no deterministic wetware "debugger" to run on a bunch of people so that everyone works together to make the business successful.
Running a business is as hard (or harder) than computer programming. So is managing a hedge fund to return +10% instead of losing investors' principal. Those activities are "hard" in a different way from algorithms. I don't see why programming is elevated above them as being harder.
>should I simply accept that business-people make more money than I do? No
I'm trying another business venture and I'd be perfectly fine with stepping back to just being a CTO and hiring a CEO that has a higher salary than me. The higher salary is what it will take to attract somebody competent. (Of course, I'd have more equity but that part is worth $0 if I'm the CEO.)
Typically for a business person, everything is a financial decision and calculation. They will out negotiate the typical engineer. Getting 'into business' might just mean properly valuing ones own contribution. That said I do see a lot of expressions of engineer entitlement on this site(I assume normative reasons).
I have seen an astounding amount of "biz guy" entitlement in this industry.
It can't tell you how many times I've talked to potential co-founders who were a pair of frat boy types who had business school degrees. They pitch their idea as if it were a company, but all they have are some powerpoint and a few phone calls under their belt. They wanted to be CEO and "VP Sales" and would be happy to let me be CTO, they just want the to build the product and engineering team and for that-- because they liked me so much-- they'd let me have %5 of the company! (Vesting of course, one year cliff.)
They don't understand when I laugh at them... and I think its because there are too many suckers out there and they soon find one.
The flip side of this is the incompetent developer who produces hunks of irretrievably flawed spaghetti code which works just well enough to get paid, but is a technical dead end that will never work well enough for the company to derive long-term value.
Granted, it's easier to be a useless biz guy than it is to be a useless developer since there's no litmus test for the former, but it's absolutely true that both exist. Your goal is to steer far clear of them.
While I agree with you, I want to note that long-term value is often not what these businesses want or need: the work required to get LTV is often perceived as delaying time to market, and sometimes the right choice is to optimize time to market over correctness or soundness.
In my experience this is frequently an unstated source of contention and unaligned expectations between engineering and business sides of the organization and one that is very useful (and liberating!) to get aligned on from the outset of a venture. And frequently, compensation structure is a useful part of that alignment: if you will also benefit from the time to market, that tradeoff feels less like someone asking you to make more work for yourself or others down the road (in the form of ops or rewriting)
See this, in my opinion is a perfect example of the engineer entitlement the parent mentioned. These guys probably have a decent idea and the ability to execute on it. Their background probably enables them to get the required capital, sell/market the product and hire engineers to build it. The majority of engineers probably don't have that entrepreneurial/business ability. Those guys obviously don't have the knowledge required to build the product but they do have the skills required to get the resources to hire people who can. You don't make it clear in your comment if that equity doesn't come with a salary (that changes things obviously) but if they're paying you a salary to do a job and you expect lots of equity because you think you are so important you can't be replaced, you're probably very wrong.
It's not entitlement, it's gauging what's your bargaining position versus what the other side tries to convince you it is.
Obviously both a business person and an engineer will have value in a venture. There's nothing wrong with both types negotiating and asking for their fair share.
I completely agree regarding negotiation. But it's hard not to see these points from the parent as seeming entitled or as looking down on business types because they're not as good as, or important as, you.
"a pair of frat boy types who had business school degrees."
"They pitch their idea as if it were a company, but all they have are some powerpoint and a few phone calls under their belt."
With due respect, ideas are a dime a dozen; and if this people had the "ability to execute on it", they would not need the engineers to do just that, would they?
I do not want to disregard anyone's skills, technical of business. Even if the GP is right that those guys where frat boys, they probably had valuable connections to bring into the table. But it is not fair that biz types hide behing the "salary" argument to shortchange engineers.
They are not just bringing early employees, they were looking for their CTO, for goodness sake! I am ok with not offering an "equal partners" deal, but it has to be partners. IF they are so wonderful business types, they why they do not get a Series A round without a product and then hire an employee CTO with a matching salary?
I will answer you why, and it is the same reason why engineers should not demand millionaire salaries. It is because your contribution's worth zero if it is not leveraged by the contribution of the other partner.
I think those people need to be broken down proper before there's any chance of salvaging them. Living with one of those, this is the mental tape that plays in my head whenever they mention anything "startup".
"Hrm, great, but what have you been smoking. Your business idea sounds like something a 5 year old drew in Crayola after watching an episode of shark tank. Your equity won't buy you a roll of single-ply toilet paper if you had a coupon. You're starting a startup, which is the most blunt force trauma way of getting paid market rate, and your (business) degree...well, it's worth less than your equity . That network you built whilst doing case studies on Apple is going to help you as much as a lifeboat in the Sahara. Only thing you have is a bit of hustle, and there's people running fruit-stands in shenzhen that have more of it than you. Sit down, shut up and do things, and maybe in 5 years you'll make a decent founder."
I mean you'd hope that it'd stick, but it doesn't. Nothing more infuriating than people talking the talk whilst you're walking the walk. My reading list is longer than your business plan, so fermez la porte and do stuff instead of distracting me whilst I'm trying to work.
It's really weird.
/rant
I'm aware that it might be angry and off-topic, but I thought some parts fit the "straight outta b1zn3zsk00l" people.
> I mean you'd hope that it'd stick, but it doesn't. Nothing more infuriating than people talking the talk whilst you're walking the walk. My reading list is longer than your business plan, so fermez la porte and do stuff instead of distracting me whilst I'm trying to work.
Why infurating? Are you expecting them to appreciate you for how awesome you are? It's almost never going to happen, even if you are truly awesome - that's just how people are.
The solution is to not have business conversation with people you consider clueless about business. Talk to them about football or whatever if you like them and want to maintain a friendship, or simply don't talk to them at all.
Also, that Business Insider article is an inadvertent IQ test for people who want to regurgitate their figures. That $1.8 million number is revenue/#employees and not profit/#employees. Using profit calculation of $53B/98k is ~$500k. Since, a fully-loaded FTE in Silicon Valley is ~$250k, the ~$500k doesn't look that insane.
If a writer copy&pastes stuff like that into their own essay without critical thought, don't be surprised if it taints the rest of his essay. For example, the "you are not a commodity" is not fully reasoned out. In the essay, it's just an empty platitude/affirmation instead of explaining why some programmers are treated as commodities and how to differentiate themselves to avoid that categorization.
If you use profit/#employees, then you're double-counting. The employees' salaries are already taken out of profit. That's why it's not fully disingenuous to consider revenue instead.
$500k of profit generated per employee sounds excellent, but it's also omitting other capital costs made by the business. Essentially, none of these benchmarks can give you the complete picture.
Business guys make more money, only because they convince developers to take less than they are worth. Your friend hired a developer who, by your account, was doing all the work, and then the business failed because your friend was too greedy.
Now he thinks he's going to learn to be a developer and then not need any developers. Good luck with that.
By the way "getting it funded" is not success. Making it profitable is success.
PS- the word "coders" is like the n word. Use it and we know you don't respect us.
Not that I am comparing software development to entertainment but in my perception, software developers today are in a similar position as Elvis was with his fake-Colonel "business guy" throughout his career: exploited and treated like a replaceable widget. The one person I credit with providing me this insight is patio11 whose articles on negotiation are gold.
>Just when things started picking up, the dev decided he wasn't getting enough of the pie and bailed, destroying the entire enterprise.
>rather than deal with the emotional vagaries of software developers.
Negotiating compensation you're comfortable with isn't an "emotional vagary". Sounds like the programmer was working for a measly amount equity in something that will most likely be worth nothing in a couple of years.
He should have realized it before he made the deal and negotiated a better one for him. Also, he almost certainly bailed on this deal without having an alternative lined up, so all he did was destroy momentum.
I've been in this situation before, and bailed before any real work got done. That's when you need to realize these things, not after you get funding.
Sometimes the right solution is to walk away, regardless if it destroys something. Maybe the businessman was unwilling to renegotiate or was a prick. I have no obligation to stick with a job that isn't doing it for me. Maybe it's the businessman's fault for not finding a replacement?
As an aside, you seem awfully defensive of the businessman despite not having the full story.
It's not. He made an agreement, and bailed on it later, for no other reason than that he didn't like the agreement he had made. Doesn't matter what the numbers are.
Your analysis is too rigid and could use the nuance numbers might provide.
If the developer executing the idea was paid a low sum in exchange for low equity (say, 75K + 0.1%) and market analysis revealed a much smaller market than anticipated, the developer may have rationally understood the situation to be exploitative.
In such a case, the numbers might reveal that higher equity (say, 75K + 20%) might make the situation would not only be equitable but potentially profitable.
You're right to say that the developer breached the contract, sure.
However, having numbers might contextualize that breach of contract so that it could be read as a poorly-considered evasion of responsibility or a rational decision to leave a financially abusive and career-limiting contract.
EDIT: Readability. Add conjunctive adverb to last paragraph.
It's his life. People change, and he probably found something better elsewhere. Why would someone who's paid less than 0.1%(assuming the worst case) be forever loyal to a business? Loyalty has a price and it's much higher than most people seem to think.
I think it is a bit unfair to just listen to one side of the argument. Did you have a chance to talk to the developer to see if this is indeed what happened?
> ... the dev decided he wasn't getting enough of the pie and bailed, destroying the entire enterprise ... Business guys are typically going to make more money than the coders are, it's pointless to fight this.
The dev apparently fought this and won ;-)
> ... humans are harder to deal with, ultimately, than computers are.
> Business guys are typically going to make more money than the coders are, it's pointless to fight this.
Negotiating a better deal is pointless? What? I thought you were in favor of business.
> The reason is that the business side is the human side, and humans are harder to deal with, ultimately, than computers are.
I will not get into an argument about whether humans are harder or easier to deal with. I also will not get into an argument about whether software development is fraught with the same types of issues with dealing with people.
Instead I will just point out that pay is not directly related to the difficulty of the work. It is a function of the value derived from the work, the availability of labor, the negotiating skill of the various parties involved, and many other factors (all to varying degrees).
I agree with everything else that you said, especially the part about $$$/employee figures and their misleading nature. In general whenever you see $/(some arbitrary unit) in the financial press, be wary. It is sometimes a useful way to look at things, but it is incredibly easy to manipulate so that it ends up being a completely useless figure. I see it happen all the time, and these are often the most quotable lines as well (sadly).
sounds like the 'business guy' wasn't so good at business. if you choose a partner and he bails, that's your problem. one of the key tenets of business is keeping people properly incentivized, and he clearly failed at that.
and that software guy was also a business guy, by definition. sounds like he did some intense businessing and got the hell out of that business after realizing he was making a terrible business decision.
part of being a 'business' person is dealing with reality as it exists, not making up narratives that suit your ego.
I agree with the idea that you shouldnt care companies making more money of you than you cost. That's because capital, marketing and teams are multipliers. They use you plus these things to make more money than you could by yourself.
Completely disagree with the rest of it though. You should neogiate the best deal possible, you should walk away if deal isn't good for you, you should treat it as business. You need to be an engineer and a business person and make sure your getting the best deal.
It would be interesting to hear that story from the developer side of things. I'm sure there's more to it.
I also got a few stories. Maybe a bit of a rant but bear with me ;)
I have the technical know-how and the idea and I bring in a business person to help try and make a business from it. Before I know it the business person is putting me in a position where I lose control over the product and the business and essentially have to work for free on faith and lose all my intellectual property. I quit, sooner rather than later. Just to be clear very little effort was invested at this point and I was clear about my expectations from the beginning.
I go work for a startup and take stock options as part of my compensation. The company IPOs. All business types including fairly recent hires make a ton of money. Most technical types made almost nothing. The shares keep declining, the company gets bought out, more money for business types. End of story? I did get an OK salary as well but I invested a lot of heart in this so it left me with a bad taste.
What's at the core of this? No one is looking for win-win situations. We have too much competition and too little cooperation. When you have a CEO who is solely motivated by how much money he is going to make this is bad for employees, shareholders, the company and everyone else. Just because the way this CEO will make money is making the company look good doesn't mean he actually cares about anything beyond how it looks. Not all companies are like that but too many are. What we have is lose-lose, companies and shareholders lose from high churn, lack of loyalty, lack of motivation, lack of investment, bad CEOs. Employees for the most part lose as well. Tragedy of the commons. Specifically with Apple they're hoarding cash, not investing it, not paying it out to employees or shareholders. They're buying back their shares at inflated prices. How is that something that benefits the company or anyone else? They're sucking money out of the economy. I'm sure there are worse examples...
As with others, the morality of this situation depends on details we don't know. What always trips me out is the double standards in posts like yours. People are fine with the capitalist notion of starting a business, giving most people in it almost nothing, often collecting any I.P. produced rather than a license, and having goal of selling out in a way that will likely cost the employees their jobs. Almost all value goes to investors or a few founders while almost all work is done by employees. The process is often supported by false promises or emotional manipulation to keep workers loyal & with a tiny part of the pie. This is default in Silicon Valley from what I read here and in other media.
Then, an employee decides to do what's best for him or her in a way that negatively impacts the founding business person or investor. This is seen as unethical: such employees, upon some agreement or context, cannot possess the ability to make other choices that damage founder or VC goals. They don't possess the trait that founders and investors wield with nary a thought over employees like we're starting to see with more layoffs. The employees are, instead of rationally selfish, being Evil and called out for it.
A double standard that serves captains of industry and startup founders very well at everyone else's expense. In reality, capitalism says that everyone, including employees, should act in their own self interest externalizing all costs of such actions. So, per capitalism, the founder did the right thing by trying to screw the employee out of lots of net worth and the employee did the right thing screwing the founder by taking another path. Naturally, being utilitarian, I oppose such capitalism in favor of stakeholder-focused models with rules reducing opportunities for each party to screw the other. The market goes the other way, though, so everyone continues to help or screw everyone to heart's content.
And I get to read nonsense like this where people cry "But that's not right and fair!" while simultaneously...
"Business guys are typically going to make more money than the coders are, it's pointless to fight this. The better route is to go into business yourself and capture the value yourself. "
...supporting amoral, selfish practices of capitalists on founder or VC side. It's just also what the developers were following: do whatever provides most perceived value for themselves. It is really good advice, though. Keep preaching it while system works as it does given that's where money is at. It's just that making an exception for one party but not others seems unfair and irrational. Thanks for the entertainment though. :)
As an old guy, let me share with you which of these I think was the biggest lesson for me:
-- We do not need to be lead by business people.
MY new rule for startups - the big engineer should be the CEO. You can have a CTO and other engineers. You can have a VP of bizdev or sales. But the big fish needs to be an engineer if you are a tech company. If you are making biotech the big fish needs to have biotech engineering. If you are manufacturing, then the big fish needs to be a manufacturing engineer.
The number one mistake I see startups make (especially when they are started by younger people) is taking some type-A business school graduate and making him the CEO.
This is the cause, ultimately, of most of the failures of startups I've experienced (and I've worked for, founded or worked with a couple dozen.)
Or, as a second order function, type-A business school graduates who have never started a company or worked a real job but do instead work for a VC firm, forcing bad decisions on your company.
Most of the fights between founders are because business guys are forcing bad decisions on the company.
The problem is, business school doesn't teach YOUR business. It teaches general business concepts. These are not difficult for engineers to master.
IT's impossible for these business guys to master engineering. (Yes, 30 years, still haven't seen that- the best ones just find an engineer they trust and get out of the way.)
As an angel investor, if your CEO isn't a geek, I'm not putting my money in. And if you look at the "successes" where this is the case, it's usually an arbitrage opportunity (Eg: somewhere just piling a bunch of money behind a halfway competent business model with half way competent employees is going to make money because the situation is the result of a structural inefficiency, usually caused by government: uber for example.)
Agreed. The main problem is you can lie and game the VC's. "It's called future-selling and everyone does it", a biz-guy once told me. It's not a lie, we are "hacking the interview". Coders like hacking, right ? You see, just rebrand "lies", muddle the context and now your type-A biz co-founder can say anything while his engineer co-founder sits their quietly wondering if this really is normal. I've also heard "I'll stop doing that if it makes you uncomfortable" but once it is part of a person's personality, it can become pathological. They don't even know when they are acting this way.
The disconnect comes from engineering environments where there is no Alpha and Beta mindset, only varying degrees of competence. Trust your instincts and conscience. The VC only has a limited time for due-diligence.
I still agree with MCRed's points. Just, as you said, have to watch out for the games people are playing that seem to be working for whatever reason.
Note: There was another link I had about one company getting crazy valuations where author showed they're basically telling investors what they want to hear. It broke down the tactics then showed they work too often. Can't find the link.
If I may ask, what have been your successful ventures? How successful? What would you say your net worth is? In other words, to make your argument resonate with me, I'm more interested in how well your belief system has worked for you, as opposed to "number of years experience."
I'm a programmer. Written 4 programming books - all Amazon best sellers. Just happened to also start running a company. After enough growth, bringing in a business partner to focus on non-engineering tasks was an important step. Having been on both sides, I value both as different skills. One is not inherently better than the other, but I've found that a person who is either and respects the other is often successful. A few million dollars later, I'd say I've been right.
I totally agree with you my friend. Same applies to companies literally hoarding lawyers and economists.
I don't understand that they do not realize these people bring no benefit to a company other than laying off key people and filling their sentences with "big" buzz-words.
I know companies where more people analyze the company's work rather than people actually working.
If you think lawyers aren't useful, then you've never run a business of ANY size. You've also probably haven't completed a significant deal or transaction before. You'd benefit a lot from pairing up with a "business rat" (your words in another comment).
Typical hippie non-sense from a programmer with an over-inflated ego. Every company is rife with them.
1. You do not have to prove yourself.
>> Um, yes, you do. Because you're getting paid to work and work well by people who are risking capital to have you there. You're not entitled to your job. If you feel you should be then move to France and make half the money for the safety of not being able to be fired, or join a sweepers union.
2. You are not a commodity.
>> Once again, yes, you are. You are paid to generate profit for the company. If you don't like that then you are free and encouraged to risk your own money on the business of your choosing. Create some jobs yourself.
8. Software engineering is full of lies and people who will try to take advantage of you.
>> This is just too easy. Author Jeff just has no real-life experience whatsoever, it seems.
9. You are not your credentials nor your past.
>> Then you should go ahead an hire some repeat offenders. Put your money where your mouth is and give a convicted murderer a chance and risk your own money to hire him. You won't.
> Software is a new field and nobody knows how to do it. If someone says you are unqualified and therefore you must do maintenance work, you should question that person. We have an upside down system where the people who are paid the least do the crappiest work. They tend to be young and naive.
Software development has been meticulously studied for over 40 years. From Dejurka, 'Goto's considered harmful' to Parnas, 'On the Criteria To Be Used in Decomposing Systems into Modules', Design patterns, academic studies, Pair Programming etc.
> 2. You are not a commodity.
Your HR department has a list of 'potential hires' to replace any position in your company at a moments notice. The quickest way to build a bad reputation is to think you are not replaceable and act accordingly.
> 3. Software engineering is an art and a science but rarely both at once.
> The planning and design process is an art, but once the requirements are in place you can proceed more deterministically.
No matter how brilliant you architecture and plan is there will inevitably be new requirement or changing requirements that cause you to continuously revise re-architect and re-write large part of your code base. Both design and Implementation are a messy evolving process.
> 4. You are not your job.
If you do not love this then its not for you. Thats true in many professions and Programming is no different.
> 5. The world is a distributed system.
I could not parse any overall point to this passage.
> 6. You are not a lottery ticket.
???
> 7. Choose action over planning.
Talk is cheap and execution is scarce.
> This is why nobody cares about your ideas, they care about seeing your prototype. John Mayer said that all he had to do to become successful is finish his songs.
Writing a plate of spaghetti code that does some neat thing is not what makes you an employable dependable developer. Writing clean well documented well though out efficient code that meets the specifications is what does that. That take planning and discipline.
> 8. Software engineering is full of lies and people who will try to take advantage of you.
This is a bit psychotic.
> 9. You are not your credentials nor your past.
You very much are. You do not necessarily have to be an Academic golden boy but you will be judged by your previous experience and projects.
> 10. As a software engineer, you can take career risks aggressively because your downside is fundamentally capped.
That works out great unless you have to pay 2500$ rent each month or buy food and clothing for your children etc. Not everyone that writes software is a 19 year old trust fund baby...
> Your HR department has a list of 'potential hires' to replace any position in your company at a moments notice. The quickest way to build a bad reputation is to think you are not replaceable and act accordingly.
Things are probably the other way around. Don't take the job if you think that you will be easily replaceable. In that case, take another job.
> you will be judged by your previous experience and projects ...
Never apply for a "job". Always apply for a project, or rather, do your own project, if you can.
What matters, is what the project at hand is all about, and if you have the ability to do it. Discussing unrelated issues about credentials or unrelated previous experience, is a sign that the person in front of you has time to waste; his own time, but also yours. That is a red flag.
> Things are probably the other way around. Don't take the job if you think that you will be easily replaceable. In that case, take another job.
So if you apply for a position at Google and they offer you a job that suits your skill set and background you should not take the job because Google potentially has a list of thousands of people they could replace you with? wat?
> Never apply for a "job". Always apply for a project, or rather, do your own project, if you can.
What matters, is what the project at hand is all about, and if you have the ability to do it. Discussing unrelated issues about credentials or unrelated previous experience, is a sign that the person in front of you has time to waste; his own time, but also yours. That is a red flag.
If you apply for a position and the company is not interested in your experience or previous projects then I'm fairly confident of two things. a) The company is a sweatshop and burns through junior developers like tissue paper to flame. b) The work you will be doing will be the worst sort of low skill crap work that no one with a half way decent resume and experience wants to do.
> So if you apply for a position at Google and they offer you a job that suits your skill set and background you should not take the job because Google potentially has a list of thousands of people they could replace you with? wat?
Yes, exactly. If it is trivially easy to find thousands of people with your skill set and background, there is something wrong with that skill set and background. You will need to work on it, because these things are an accident waiting to happen.
> a) The company is a sweatshop and burns through junior developers like tissue paper to flame.
Not really. They have a real problem and they cannot readily find someone to solve it. And then you come along. Now the problem may finally get solved. This is how it best works. If not, there is something wrong with the entire situation.
> b) The work you will be doing will be the worst sort of low skill crap work that no one with a half way decent resume and experience wants to do.
If you do not have a pretty much unique selling proposition, you will indeed compete at the bottom of the market. You need the ability to solve a particular type of non-trivial problems and you must preferably have been specializing for years in doing that. People in your field understand what the value proposition is, and there is no need to endlessly debate this with them first.
Google do not use the technology in which I specialize. One day they may, but at the moment, they don't. So, I would never run into them, when occasionally looking for a project (once every 3 - 5 years). The day that Google starts using this technology, they could indeed try to ask me for an interview, but why would I prefer them to the established players? Am I replaceable? Yes, but Google are even more replaceable. I will have done fine for years, before they decided to enter the field too. Who exactly is the one that is replaceable here?
"If we aren’t in control, it doesn’t change anything whether or not we assume that we are in control. But if we are in control, it would be very hazardous to our well being to assume that we are not in control"
I love the logic of this argument - it has so many applications - think about applying it to the climate change debate.
The fallacy here is that there is no downside to belief and that finite losses spread over infinite scenarios are still finite.
Applied to controlling one's own destiny, the issue is that there is a middle ground between having no control and having complete control. Obviously it is a waste to believe you have no control and to do nothing. It is also a waste to believe you have control of everything: I'm not going to control the weather or other people's moods, so it is a waste of effort to even attempt to do so.
The question, then, isn't if we can control our destinies, but how much we can control. Identifying the areas in which your effort would produce a desired effect is paramount. Though of course, due to our population size, you'll always find people who bet it all on black day after day and made that moonshot due to their unfounded yet devoted belief that the universe would unfold the way they wanted it to.
> After you have spent enough time in the first tier of the intellectual strip mine, we will make you an SDE 2, where you can do slightly higher level refactoring for $150k a year, which will make the giant company $5 million. This is what is called an arbitrage.
I've been a programmer my entire career, and so my interests align with this ideology, but quite frankly it is offensive to call junior software dev work an "intellectual strip mine", and to assume a priori that your salary will return 10-20x multiples in value to the company.
The reality is that it is highly non-trivial to derive economic value from programming. You have to be able to sell something in significant volumes. That is the value the company is bringing to the software engineer. How much value any particular employee brings to the organization is impossible to calculate. Certainly the engineers will bring efficiencies that are impossible to get any other way, and perhaps they enable the entire business. But you can say the same about the sales people, the biz people, the product people; even the much-maligned marketing people may be essential to keep the revenue flowing.
There's a huge bias in any industry to overvalue your own work over that of other disciplines, simply because by definition you know more about it than what those other departments do. There's something I find really off-putting about a lot of abstract whining about how underpaid developers are. Sure, some are underpaid, also some are overpaid NNPPs, but as a whole we are doing way better than the vast majority of careers in the world right now.
All this is not by way of saying you should be satisfied with what you're given, but rather that you should pull your head out of the sand and recognize how the world works: you don't get paid what you deserve, you get paid what you negotiate. And negotiation is a skill you have to learn. If you don't want to learn anything about business and you just want to write code, then you should expect to be taken advantage of. If you want to capture more value you create, the first step is defining that value, and you can't do that unless you understand the business. From there you can have honest conversations with your employer on more equal footing, and decide to either stay or leave. This business knowledge will also enable you to start your own company with a much greater chance of success than the majority of startups with purely technical founders who start with a build-it-and-they-will-come mentality.
It probably works like that in the corporate world. But then again, most corporations today are pretty much like taxi companies waiting for their own Uber to put them out of business. The company of the future is rather a platform running on the internet. Any company that looks more like a collection of politicking corporate offices instead of an internet platform, is just a dinosaur waiting to get wiped from the face of the earth. The logic and rationale in things like Uber is totally different than what you have described. Uber does not "overvalue" the work of its devs. The essence of what it does, is created by its devs. Furthermore, there are pretty much no other departments in the business. These other departments are all just automated or outsourced distractions. They are not supposed to disturb the core business.
Any sufficiently large 'internet platform' is going to be a corporation. Complete with politicking corporate offices, lawyers, human resources departments, accounting, support staff, etc, etc.
While there are some differences in culture the basic model is not much different then any other industry that relies on skilled labour or engineers to produce a product.
Small startups can do things differently but once you become a 'platform' with millions of dollars changing hands investors and public stock there is an entirely different set of logistical and legal components that have to be taken care of.
What an interesting dichotomy you have painted: internet platform versus politicking corporate office. This is exactly the kind of myopia I was referring to where a software engineer thinks everything that is not tech is bullshit. In fact there is a huge range of ways to succeed in business, and while all are helped by efficient technology to varying degrees, technology is not the primary driver of value most of the time. You can bet your career that Uber leadership is spending every waking minute figuring out how to gain structural advantages to solidify their position—the tech is easily replicable and becomes more so every day.
In any case though, you seem to be putting some words in my mouth since I never said anything about Uber's valuation of its engineering. My point was much more universal than that and had absolutely nothing to do with the corporate world or anything else. Employers pay their employees what they feel they have to. Uber pays them more because they need the best and the market is very competitive, but there is absolutely no link to the bottom line.
> technology is not the primary driver of value most of the time
Most probably. My advice is just that it is a bad idea for a software engineer to work in an environment where technology is clearly not the primary driver of value.
> Uber pays them more because they need the best and the market is very competitive, but there is absolutely no link to the bottom line.
Without internet platform, there would be no Uber at all.
It would be like saying: "Their warships are not the essence of the Navy. The Navy wants the best ships, but there is absolutely no link to winning naval battles."
> It would be like saying: "Their warships are not the essence of the Navy. The Navy wants the best ships, but there is absolutely no link to winning naval battles."
No, it wouldn't be like saying that at all. We are talking about the link between profits and salaries, not assets and objectives. If you can't understand that there's nothing more I can really say.
I think the big problem with this is that 'Philosophies' or advice should be given out by people who have extensive experience and a long careerer that stands as some proof that there advice is good advice and not the ramblings of self absorbed disgruntled junior developer.
11. Make Tests, really. Make automated tests, even if they are slow, make them. trust me. make them regardless what anybody says or regardless the project size. the extra time it takes will outweight the time you would need later.
Outright rejection of the fact that life, including your career path, is in part chance-based is dangerous. A sizeable chunk of the part that isn't isn't in your control either, it's controlled by your environment and the people who populate it. If an asteroid struck, and we were all made redundant, you would not have 'lost' - a large example to illustrate a subtle point.
Believing otherwise is the kind of self delusion that leads to mid-life crises: when the religion of You crumbles and a desperate scramble for a new faith begins.
Life is, in part, a lottery. Failure is fine. Failure is to be expected. Don't read in to it in the context of your self worth, but look at it objectively and see if anything is to be learned. Take risks and accept reality, and never reject the truth, especially when it's staring you right in the face.
89 comments
[ 3.4 ms ] story [ 162 ms ] threadIn my experience, the interview process with whiteboarding problem can go one of two ways. One of them is the "find what we think is the textbook solution to this toy problem" way. The other is the "communicate to us as you attack this toy problem so that we can understand your thought processes, problem-solving approaches, and your experience with these topics" way. Only one of these is really objectionable.
What I do is ask people about a problem they have solved and get them to teach me about it. If I learn something then it's a good result.
Asking people to solve a trivial problem AND let you into the inner workings of their brain-- normally a non-verbal activity- isn't testing their abilities.
I met a guy a few weeks ago who'd moved over from California. He wanted to learn how to code, and told me his story. He was a business sort who went into business with a software developer. The dev did good work, and the business guy managed to get it funded. Just when things started picking up, the dev decided he wasn't getting enough of the pie and bailed, destroying the entire enterprise. He wanted to learn how to code so that this wouldn't happen to him again.
So I'm giving him an hour or so a week to show him how web development works so that he can code a prototype himself. Then he can get funded and hire employees rather than deal with the emotional vagaries of software developers. I don't blame him at all.
Business guys are typically going to make more money than the coders are, it's pointless to fight this. The better route is to go into business yourself and capture the value yourself. The reason is that the business side is the human side, and humans are harder to deal with, ultimately, than computers are. Also, humans have money and computers do not.
It was worth it for the business guy to give up a bigger piece of the pie in order to ensure that the business survives. That he is unable to see that, is either because he is unreasonably greedy or short sighted. Now he is delayed for X months or years because he let his greed get the better of him.
Once a business is well into money making machine territory, the impact that a single good engineer is going to make is dramatically reduced. At that point, the leverage is much lower and the business person can make decisions like you described.
This story probably has two sides.
I cannot imagine this to be true. Take for example the Paxos algorithm. There are few people who can fully understand it. Yet you are saying that some businessperson is doing work that is more difficult than dealing with the intricacies of distributed computing?
The only reason the businessperson is making more money is because he has maneuvered himself into a better position.
Coincidentally, I just went through the Paxos and Raft algorithms last week. Yes, they are complicated but a lot of the complexity is the proof that covers every possible edge case for conflicts and failures. I'm also currently working on populating a multi-threaded Merkle hash tree and the complexity is hitting the limits of what my brain can manage. Nevertheless, I'll eventually make it all work.
Humans, on the other hand are much more difficult. When I was fresh out of school, I definitely thought of the business guys as "the useless suits" and the programmers as the real value-added employees. But since I've tried running my own business and not made much money at it, I've come to appreciate that a few business people out there really have talent for juggling the incentives and motivations of team members.
Whereas moving computer code around in Paxos and multi-threaded hash trees will have an eventual solution, dealing with humans to solve a business problem seems like the social version of trying to prove P=NP.
Now imagine that you didn't have to do that programming. You would have 100% of your time to make business decisions, talk to people, etcetera. Suddenly, what the businessperson does is not so hugely impressive anymore. Or at least, that is how I look at it.
Were you just as successful as your archetype businessperson?
If you haven't then how you look at it is just a construction of your imagination created to fellate your own ego.
So, to return to the original argument: should I simply accept that business-people make more money than I do? ...
>Suddenly, what the businessperson does is not so hugely impressive anymore.
I took a 10 year hiatus from programming and spent 100% brainpower on the business. At the time, I thought I had progressed into being a "businessman" and stopped programming (like Bill Gates).
With that experience, I'd emphasize again that executing business activities such as interfacing with clients, managing employees, and reading the signs of a fickle market to prioritize what software to build and make money is harder than any computing algorithm I have ever worked on including Paxos.
I suspect you're elevating software programming above business tasks because of caricatures like Dilbert PHB (Pointy Hair Bosses) and shows like The Office. Well those stereotypes are true because most "businesspeople" are clueless idiots. But that's just Sturgeon's Law[1] at work: the majority of every profession (programmers included) is less than mediocre.
Creating a business and running it such that it doesn't devolve into bankruptcy is as every bit as creative and as difficult as computer programming. With software engineering, you deal with bits and bytes and defined tradeoffs (this network as X latency, that disk array as Y response time, etc). Yeah, juggling all that is complicated but at least it's mostly deterministic. You add 5 to an integer and you don't worry if a stray cosmic ray is going to randomly flip a bunch of bits around such that the integer now says 48390. The cpu doesn't conspire against you to debug the code.
On the contrary, the following business factors are non-deterministic:
-- humans, such as a fickle marketplace and customers that you can't the minds of
-- humans, such as employees with their own needs & wants that don't necessarily align with the business. Hiring good people is hard, etc
Each human is a like a bundle of bytes in a RAM that have their bits being randomly flipped by cosmic rays. There is no deterministic wetware "debugger" to run on a bunch of people so that everyone works together to make the business successful.
Running a business is as hard (or harder) than computer programming. So is managing a hedge fund to return +10% instead of losing investors' principal. Those activities are "hard" in a different way from algorithms. I don't see why programming is elevated above them as being harder.
>should I simply accept that business-people make more money than I do? No
I'm trying another business venture and I'd be perfectly fine with stepping back to just being a CTO and hiring a CEO that has a higher salary than me. The higher salary is what it will take to attract somebody competent. (Of course, I'd have more equity but that part is worth $0 if I'm the CEO.)
[1]https://en.wikipedia.org/wiki/Sturgeon%27s_law
Do not hire CEO. Instead find a co-founder that would work as CEO for equity.
You are unlikely to make a good CEO hire, because you do not have enough expertise and CEO motivation in case of high salary would be misaligned.
It can't tell you how many times I've talked to potential co-founders who were a pair of frat boy types who had business school degrees. They pitch their idea as if it were a company, but all they have are some powerpoint and a few phone calls under their belt. They wanted to be CEO and "VP Sales" and would be happy to let me be CTO, they just want the to build the product and engineering team and for that-- because they liked me so much-- they'd let me have %5 of the company! (Vesting of course, one year cliff.)
They don't understand when I laugh at them... and I think its because there are too many suckers out there and they soon find one.
Granted, it's easier to be a useless biz guy than it is to be a useless developer since there's no litmus test for the former, but it's absolutely true that both exist. Your goal is to steer far clear of them.
In my experience this is frequently an unstated source of contention and unaligned expectations between engineering and business sides of the organization and one that is very useful (and liberating!) to get aligned on from the outset of a venture. And frequently, compensation structure is a useful part of that alignment: if you will also benefit from the time to market, that tradeoff feels less like someone asking you to make more work for yourself or others down the road (in the form of ops or rewriting)
Obviously both a business person and an engineer will have value in a venture. There's nothing wrong with both types negotiating and asking for their fair share.
"a pair of frat boy types who had business school degrees."
"They pitch their idea as if it were a company, but all they have are some powerpoint and a few phone calls under their belt."
"They don't understand when I laugh at them..."
I do not want to disregard anyone's skills, technical of business. Even if the GP is right that those guys where frat boys, they probably had valuable connections to bring into the table. But it is not fair that biz types hide behing the "salary" argument to shortchange engineers.
They are not just bringing early employees, they were looking for their CTO, for goodness sake! I am ok with not offering an "equal partners" deal, but it has to be partners. IF they are so wonderful business types, they why they do not get a Series A round without a product and then hire an employee CTO with a matching salary?
I will answer you why, and it is the same reason why engineers should not demand millionaire salaries. It is because your contribution's worth zero if it is not leveraged by the contribution of the other partner.
"Hrm, great, but what have you been smoking. Your business idea sounds like something a 5 year old drew in Crayola after watching an episode of shark tank. Your equity won't buy you a roll of single-ply toilet paper if you had a coupon. You're starting a startup, which is the most blunt force trauma way of getting paid market rate, and your (business) degree...well, it's worth less than your equity . That network you built whilst doing case studies on Apple is going to help you as much as a lifeboat in the Sahara. Only thing you have is a bit of hustle, and there's people running fruit-stands in shenzhen that have more of it than you. Sit down, shut up and do things, and maybe in 5 years you'll make a decent founder."
I mean you'd hope that it'd stick, but it doesn't. Nothing more infuriating than people talking the talk whilst you're walking the walk. My reading list is longer than your business plan, so fermez la porte and do stuff instead of distracting me whilst I'm trying to work.
It's really weird. /rant
I'm aware that it might be angry and off-topic, but I thought some parts fit the "straight outta b1zn3zsk00l" people.
Why infurating? Are you expecting them to appreciate you for how awesome you are? It's almost never going to happen, even if you are truly awesome - that's just how people are.
The solution is to not have business conversation with people you consider clueless about business. Talk to them about football or whatever if you like them and want to maintain a friendship, or simply don't talk to them at all.
But I do think that people like that are harmful, and that they need a good blunt reality check.
Also, that Business Insider article is an inadvertent IQ test for people who want to regurgitate their figures. That $1.8 million number is revenue/#employees and not profit/#employees. Using profit calculation of $53B/98k is ~$500k. Since, a fully-loaded FTE in Silicon Valley is ~$250k, the ~$500k doesn't look that insane.
If a writer copy&pastes stuff like that into their own essay without critical thought, don't be surprised if it taints the rest of his essay. For example, the "you are not a commodity" is not fully reasoned out. In the essay, it's just an empty platitude/affirmation instead of explaining why some programmers are treated as commodities and how to differentiate themselves to avoid that categorization.
I don't know the source of Curtis's data.
$500k of profit generated per employee sounds excellent, but it's also omitting other capital costs made by the business. Essentially, none of these benchmarks can give you the complete picture.
Now he thinks he's going to learn to be a developer and then not need any developers. Good luck with that.
By the way "getting it funded" is not success. Making it profitable is success.
PS- the word "coders" is like the n word. Use it and we know you don't respect us.
Still missin' my /home/boy, they got him up in Redmond after an IPO gone bad, heard he's vestin' for another 3 years up in there.
>rather than deal with the emotional vagaries of software developers.
Negotiating compensation you're comfortable with isn't an "emotional vagary". Sounds like the programmer was working for a measly amount equity in something that will most likely be worth nothing in a couple of years.
I've been in this situation before, and bailed before any real work got done. That's when you need to realize these things, not after you get funding.
As an aside, you seem awfully defensive of the businessman despite not having the full story.
This story is meaningless without some numbers attached. The developer was obviously a crucial part of the company - did he own 50% or 0.1%?
If the developer executing the idea was paid a low sum in exchange for low equity (say, 75K + 0.1%) and market analysis revealed a much smaller market than anticipated, the developer may have rationally understood the situation to be exploitative.
In such a case, the numbers might reveal that higher equity (say, 75K + 20%) might make the situation would not only be equitable but potentially profitable.
You're right to say that the developer breached the contract, sure.
However, having numbers might contextualize that breach of contract so that it could be read as a poorly-considered evasion of responsibility or a rational decision to leave a financially abusive and career-limiting contract.
EDIT: Readability. Add conjunctive adverb to last paragraph.
>deal with the emotional vagaries of software developers
This is a human trait, not a software developer trait:
https://www.psychologicalscience.org/index.php/news/releases...
He would do better to learn to temper his greed rather than to learn programming.
The dev apparently fought this and won ;-)
> ... humans are harder to deal with, ultimately, than computers are.
Especially devs are ;-)
Such is business.
So he burned a bridge.
Negotiating a better deal is pointless? What? I thought you were in favor of business.
> The reason is that the business side is the human side, and humans are harder to deal with, ultimately, than computers are.
I will not get into an argument about whether humans are harder or easier to deal with. I also will not get into an argument about whether software development is fraught with the same types of issues with dealing with people.
Instead I will just point out that pay is not directly related to the difficulty of the work. It is a function of the value derived from the work, the availability of labor, the negotiating skill of the various parties involved, and many other factors (all to varying degrees).
I agree with everything else that you said, especially the part about $$$/employee figures and their misleading nature. In general whenever you see $/(some arbitrary unit) in the financial press, be wary. It is sometimes a useful way to look at things, but it is incredibly easy to manipulate so that it ends up being a completely useless figure. I see it happen all the time, and these are often the most quotable lines as well (sadly).
sounds like the 'business guy' wasn't so good at business. if you choose a partner and he bails, that's your problem. one of the key tenets of business is keeping people properly incentivized, and he clearly failed at that.
and that software guy was also a business guy, by definition. sounds like he did some intense businessing and got the hell out of that business after realizing he was making a terrible business decision.
part of being a 'business' person is dealing with reality as it exists, not making up narratives that suit your ego.
Completely disagree with the rest of it though. You should neogiate the best deal possible, you should walk away if deal isn't good for you, you should treat it as business. You need to be an engineer and a business person and make sure your getting the best deal.
I also got a few stories. Maybe a bit of a rant but bear with me ;)
I have the technical know-how and the idea and I bring in a business person to help try and make a business from it. Before I know it the business person is putting me in a position where I lose control over the product and the business and essentially have to work for free on faith and lose all my intellectual property. I quit, sooner rather than later. Just to be clear very little effort was invested at this point and I was clear about my expectations from the beginning.
I go work for a startup and take stock options as part of my compensation. The company IPOs. All business types including fairly recent hires make a ton of money. Most technical types made almost nothing. The shares keep declining, the company gets bought out, more money for business types. End of story? I did get an OK salary as well but I invested a lot of heart in this so it left me with a bad taste.
What's at the core of this? No one is looking for win-win situations. We have too much competition and too little cooperation. When you have a CEO who is solely motivated by how much money he is going to make this is bad for employees, shareholders, the company and everyone else. Just because the way this CEO will make money is making the company look good doesn't mean he actually cares about anything beyond how it looks. Not all companies are like that but too many are. What we have is lose-lose, companies and shareholders lose from high churn, lack of loyalty, lack of motivation, lack of investment, bad CEOs. Employees for the most part lose as well. Tragedy of the commons. Specifically with Apple they're hoarding cash, not investing it, not paying it out to employees or shareholders. They're buying back their shares at inflated prices. How is that something that benefits the company or anyone else? They're sucking money out of the economy. I'm sure there are worse examples...
https://news.ycombinator.com/item?id=11095689
Then, an employee decides to do what's best for him or her in a way that negatively impacts the founding business person or investor. This is seen as unethical: such employees, upon some agreement or context, cannot possess the ability to make other choices that damage founder or VC goals. They don't possess the trait that founders and investors wield with nary a thought over employees like we're starting to see with more layoffs. The employees are, instead of rationally selfish, being Evil and called out for it.
A double standard that serves captains of industry and startup founders very well at everyone else's expense. In reality, capitalism says that everyone, including employees, should act in their own self interest externalizing all costs of such actions. So, per capitalism, the founder did the right thing by trying to screw the employee out of lots of net worth and the employee did the right thing screwing the founder by taking another path. Naturally, being utilitarian, I oppose such capitalism in favor of stakeholder-focused models with rules reducing opportunities for each party to screw the other. The market goes the other way, though, so everyone continues to help or screw everyone to heart's content.
And I get to read nonsense like this where people cry "But that's not right and fair!" while simultaneously...
"Business guys are typically going to make more money than the coders are, it's pointless to fight this. The better route is to go into business yourself and capture the value yourself. "
...supporting amoral, selfish practices of capitalists on founder or VC side. It's just also what the developers were following: do whatever provides most perceived value for themselves. It is really good advice, though. Keep preaching it while system works as it does given that's where money is at. It's just that making an exception for one party but not others seems unfair and irrational. Thanks for the entertainment though. :)
-- We do not need to be lead by business people.
MY new rule for startups - the big engineer should be the CEO. You can have a CTO and other engineers. You can have a VP of bizdev or sales. But the big fish needs to be an engineer if you are a tech company. If you are making biotech the big fish needs to have biotech engineering. If you are manufacturing, then the big fish needs to be a manufacturing engineer.
The number one mistake I see startups make (especially when they are started by younger people) is taking some type-A business school graduate and making him the CEO.
This is the cause, ultimately, of most of the failures of startups I've experienced (and I've worked for, founded or worked with a couple dozen.)
Or, as a second order function, type-A business school graduates who have never started a company or worked a real job but do instead work for a VC firm, forcing bad decisions on your company.
Most of the fights between founders are because business guys are forcing bad decisions on the company.
The problem is, business school doesn't teach YOUR business. It teaches general business concepts. These are not difficult for engineers to master.
IT's impossible for these business guys to master engineering. (Yes, 30 years, still haven't seen that- the best ones just find an engineer they trust and get out of the way.)
As an angel investor, if your CEO isn't a geek, I'm not putting my money in. And if you look at the "successes" where this is the case, it's usually an arbitrage opportunity (Eg: somewhere just piling a bunch of money behind a halfway competent business model with half way competent employees is going to make money because the situation is the result of a structural inefficiency, usually caused by government: uber for example.)
The disconnect comes from engineering environments where there is no Alpha and Beta mindset, only varying degrees of competence. Trust your instincts and conscience. The VC only has a limited time for due-diligence.
http://www.theatlantic.com/technology/archive/2014/08/advert...
I still agree with MCRed's points. Just, as you said, have to watch out for the games people are playing that seem to be working for whatever reason.
Note: There was another link I had about one company getting crazy valuations where author showed they're basically telling investors what they want to hear. It broke down the tactics then showed they work too often. Can't find the link.
All those business school people ruined the corporate sector to a degree that I find it truly despicable.
I don't understand that they do not realize these people bring no benefit to a company other than laying off key people and filling their sentences with "big" buzz-words.
I know companies where more people analyze the company's work rather than people actually working.
1. You do not have to prove yourself. >> Um, yes, you do. Because you're getting paid to work and work well by people who are risking capital to have you there. You're not entitled to your job. If you feel you should be then move to France and make half the money for the safety of not being able to be fired, or join a sweepers union.
2. You are not a commodity. >> Once again, yes, you are. You are paid to generate profit for the company. If you don't like that then you are free and encouraged to risk your own money on the business of your choosing. Create some jobs yourself.
8. Software engineering is full of lies and people who will try to take advantage of you. >> This is just too easy. Author Jeff just has no real-life experience whatsoever, it seems.
9. You are not your credentials nor your past. >> Then you should go ahead an hire some repeat offenders. Put your money where your mouth is and give a convicted murderer a chance and risk your own money to hire him. You won't.
Tl;dr, Author thinks he's special; he's not.
> Software is a new field and nobody knows how to do it. If someone says you are unqualified and therefore you must do maintenance work, you should question that person. We have an upside down system where the people who are paid the least do the crappiest work. They tend to be young and naive.
Software development has been meticulously studied for over 40 years. From Dejurka, 'Goto's considered harmful' to Parnas, 'On the Criteria To Be Used in Decomposing Systems into Modules', Design patterns, academic studies, Pair Programming etc.
> 2. You are not a commodity.
Your HR department has a list of 'potential hires' to replace any position in your company at a moments notice. The quickest way to build a bad reputation is to think you are not replaceable and act accordingly.
> 3. Software engineering is an art and a science but rarely both at once.
> The planning and design process is an art, but once the requirements are in place you can proceed more deterministically.
No matter how brilliant you architecture and plan is there will inevitably be new requirement or changing requirements that cause you to continuously revise re-architect and re-write large part of your code base. Both design and Implementation are a messy evolving process.
> 4. You are not your job.
If you do not love this then its not for you. Thats true in many professions and Programming is no different.
> 5. The world is a distributed system.
I could not parse any overall point to this passage.
> 6. You are not a lottery ticket.
???
> 7. Choose action over planning. Talk is cheap and execution is scarce.
> This is why nobody cares about your ideas, they care about seeing your prototype. John Mayer said that all he had to do to become successful is finish his songs.
Writing a plate of spaghetti code that does some neat thing is not what makes you an employable dependable developer. Writing clean well documented well though out efficient code that meets the specifications is what does that. That take planning and discipline.
> 8. Software engineering is full of lies and people who will try to take advantage of you.
This is a bit psychotic.
> 9. You are not your credentials nor your past.
You very much are. You do not necessarily have to be an Academic golden boy but you will be judged by your previous experience and projects.
> 10. As a software engineer, you can take career risks aggressively because your downside is fundamentally capped.
That works out great unless you have to pay 2500$ rent each month or buy food and clothing for your children etc. Not everyone that writes software is a 19 year old trust fund baby...
Things are probably the other way around. Don't take the job if you think that you will be easily replaceable. In that case, take another job.
> you will be judged by your previous experience and projects ...
Never apply for a "job". Always apply for a project, or rather, do your own project, if you can.
What matters, is what the project at hand is all about, and if you have the ability to do it. Discussing unrelated issues about credentials or unrelated previous experience, is a sign that the person in front of you has time to waste; his own time, but also yours. That is a red flag.
So if you apply for a position at Google and they offer you a job that suits your skill set and background you should not take the job because Google potentially has a list of thousands of people they could replace you with? wat?
> Never apply for a "job". Always apply for a project, or rather, do your own project, if you can. What matters, is what the project at hand is all about, and if you have the ability to do it. Discussing unrelated issues about credentials or unrelated previous experience, is a sign that the person in front of you has time to waste; his own time, but also yours. That is a red flag.
If you apply for a position and the company is not interested in your experience or previous projects then I'm fairly confident of two things. a) The company is a sweatshop and burns through junior developers like tissue paper to flame. b) The work you will be doing will be the worst sort of low skill crap work that no one with a half way decent resume and experience wants to do.
Yes, exactly. If it is trivially easy to find thousands of people with your skill set and background, there is something wrong with that skill set and background. You will need to work on it, because these things are an accident waiting to happen.
> a) The company is a sweatshop and burns through junior developers like tissue paper to flame.
Not really. They have a real problem and they cannot readily find someone to solve it. And then you come along. Now the problem may finally get solved. This is how it best works. If not, there is something wrong with the entire situation.
> b) The work you will be doing will be the worst sort of low skill crap work that no one with a half way decent resume and experience wants to do.
If you do not have a pretty much unique selling proposition, you will indeed compete at the bottom of the market. You need the ability to solve a particular type of non-trivial problems and you must preferably have been specializing for years in doing that. People in your field understand what the value proposition is, and there is no need to endlessly debate this with them first.
Google do not use the technology in which I specialize. One day they may, but at the moment, they don't. So, I would never run into them, when occasionally looking for a project (once every 3 - 5 years). The day that Google starts using this technology, they could indeed try to ask me for an interview, but why would I prefer them to the established players? Am I replaceable? Yes, but Google are even more replaceable. I will have done fine for years, before they decided to enter the field too. Who exactly is the one that is replaceable here?
I love the logic of this argument - it has so many applications - think about applying it to the climate change debate.
The fallacy here is that there is no downside to belief and that finite losses spread over infinite scenarios are still finite.
Applied to controlling one's own destiny, the issue is that there is a middle ground between having no control and having complete control. Obviously it is a waste to believe you have no control and to do nothing. It is also a waste to believe you have control of everything: I'm not going to control the weather or other people's moods, so it is a waste of effort to even attempt to do so.
The question, then, isn't if we can control our destinies, but how much we can control. Identifying the areas in which your effort would produce a desired effect is paramount. Though of course, due to our population size, you'll always find people who bet it all on black day after day and made that moonshot due to their unfounded yet devoted belief that the universe would unfold the way they wanted it to.
I've been a programmer my entire career, and so my interests align with this ideology, but quite frankly it is offensive to call junior software dev work an "intellectual strip mine", and to assume a priori that your salary will return 10-20x multiples in value to the company.
The reality is that it is highly non-trivial to derive economic value from programming. You have to be able to sell something in significant volumes. That is the value the company is bringing to the software engineer. How much value any particular employee brings to the organization is impossible to calculate. Certainly the engineers will bring efficiencies that are impossible to get any other way, and perhaps they enable the entire business. But you can say the same about the sales people, the biz people, the product people; even the much-maligned marketing people may be essential to keep the revenue flowing.
There's a huge bias in any industry to overvalue your own work over that of other disciplines, simply because by definition you know more about it than what those other departments do. There's something I find really off-putting about a lot of abstract whining about how underpaid developers are. Sure, some are underpaid, also some are overpaid NNPPs, but as a whole we are doing way better than the vast majority of careers in the world right now.
All this is not by way of saying you should be satisfied with what you're given, but rather that you should pull your head out of the sand and recognize how the world works: you don't get paid what you deserve, you get paid what you negotiate. And negotiation is a skill you have to learn. If you don't want to learn anything about business and you just want to write code, then you should expect to be taken advantage of. If you want to capture more value you create, the first step is defining that value, and you can't do that unless you understand the business. From there you can have honest conversations with your employer on more equal footing, and decide to either stay or leave. This business knowledge will also enable you to start your own company with a much greater chance of success than the majority of startups with purely technical founders who start with a build-it-and-they-will-come mentality.
While there are some differences in culture the basic model is not much different then any other industry that relies on skilled labour or engineers to produce a product.
Small startups can do things differently but once you become a 'platform' with millions of dollars changing hands investors and public stock there is an entirely different set of logistical and legal components that have to be taken care of.
In any case though, you seem to be putting some words in my mouth since I never said anything about Uber's valuation of its engineering. My point was much more universal than that and had absolutely nothing to do with the corporate world or anything else. Employers pay their employees what they feel they have to. Uber pays them more because they need the best and the market is very competitive, but there is absolutely no link to the bottom line.
Most probably. My advice is just that it is a bad idea for a software engineer to work in an environment where technology is clearly not the primary driver of value.
> Uber pays them more because they need the best and the market is very competitive, but there is absolutely no link to the bottom line.
Without internet platform, there would be no Uber at all.
It would be like saying: "Their warships are not the essence of the Navy. The Navy wants the best ships, but there is absolutely no link to winning naval battles."
No, it wouldn't be like saying that at all. We are talking about the link between profits and salaries, not assets and objectives. If you can't understand that there's nothing more I can really say.
Believing otherwise is the kind of self delusion that leads to mid-life crises: when the religion of You crumbles and a desperate scramble for a new faith begins.
Life is, in part, a lottery. Failure is fine. Failure is to be expected. Don't read in to it in the context of your self worth, but look at it objectively and see if anything is to be learned. Take risks and accept reality, and never reject the truth, especially when it's staring you right in the face.