Live data from Hacker News

Things they didn’t teach you about software engineering

vadimkravcenko.com

111–120 of 285 posts

Re: Things they didn’t teach you about software engineering

#111

>> Managers like numbers, estimates, and asking for estimates with an idea written on a napkin. It's just how the real world works — a business has some monetary goal, but before committing to it, it needs to understand how much it will cost. I think everyone squirms when asked to make a prediction with too little information. If you want to see a developer squirm. ask for an estimate for how long it will take to bui…

Ironically, the question for the PO is the better question.

Product/feature value usually spans a larger range of values than time to build it, so you don't need to estimate value as accurately for it to be a useful guide. It's also often easier to estimate because you wouldn't consider building it unless you have potential customers lined up.

And then if the PO says "building this feature would earn us back 2 developer-months in the first year alone" it's usually very easy for a developer to judge if building it fits into that profit window or not.

----

Of course, nobody does this in practise because people suck at decision-making. The next time someone asks you "how much will it cost?" try asking them "how much is it worth our organisation? What are we willing to pay?" and it will be clear they have done zero analysis on cost/benefit.

People don't know how to analyse -- or are uncomfortable with analysing -- these things so they are looking to be guided by their emotional response to information.

Re: Things they didn’t teach you about software engineering

#112
> You’ll need to work around incompetence

This one I am truly struggling with, and probably will the rest of my life. Sadly it hinders the success of all of us as software developers. I'm currently reading "How to Win Friends and Influence People" by Dale Carnegie and loving it, but can't help but thinking in the back of my mind that somehow all these rules and guidance he has for being a decent human with other humans are extremely challenging when (in some cases) you are FORCED to work with said incompetant collegue. I agree entirely with the authors wording around this point, including "frustrating", "exhausting", and "toxic". Call me an asshole but I'm an engineer, by definition I like doing things efficiently and to the point. Working with someone who can't be either is incredibly challenging. Would love to hear more strategies people have developed to deal with this.

Reading comments here, I want to be clear: I'm not talking about some ego-based notion of "incompetance" like "I can write code better than you". I'm talking about the bigwig guy on your team with a big wallet who tells you the product should be implemented in XYZ because he read an artical about XYZ in a magazine and thought it was cool.

> Dealing with people is hard. Dealing with uncertainty is hard. Dealing with uncertain people is harder. And that's what you're going to do as a software developer.

Also this, haha. This post is gold. Nice work!

Re: Things they didn’t teach you about software engineering

#113

Earlier quoted context omitted.

Not at all. Software engineering is very much a thing and requires a different skillset than programming.

I suspect this may be a 'cultural' issue: For instance in Germany with its strong engineering tradition, nobody in their right mind would call somebody who builds software an 'engineer' (there are some google hits for "Softwareingeneur" but I bet this has a fairly recent thing and has been leaking back from English). A person who builds software is simply called a 'programmer' or 'developer' here. And I really have m…

> Out of interest what are the different skillset requirements between 'software engineering' and 'programming'? Because I really can't think of any.

You can look up "software engineer vs programmer".

Re: Things they didn’t teach you about software engineering

#114

> Domain knowledge is more important than your coding skills In the short run. In the long run the lack of coding skills will start to show and bog things down. You need both domain and design in equal amounts for the long term success of a project.

Agreed. If you have a sharp grasp of most parts of the coding you'll need to do, the domain stuff is trivial (after reading a few articles and such). There is probably one small exception, and that is the horible esoteric world of SAP - esentially a bunch of made up production flows on top of more made up production flows, filled with alphabet soup that ultimately piles up to mean a whole bunch of nothing.

Re: Things they didn’t teach you about software engineering

#115
Good write-up. But to me this reads more like “Everything I dislike about ‘software engineering’”, and this question pops up in my mind: isn’t there some way around all this?

I know this is kind of an unpopular opinion, but I think an important reason we end up with this kind of work environment is that we have no formal division of labor into separate professions.

Compare e.g. with healthcare: I sometimes jokingly explain the situation to friends by saying imagine if there was only a single profession called “Healthcare Worker”, and every hospital had to self organize “Hunger Games”-style. Everybody is hired as a “[Junior/Medior/Senior] Healthcare Worker” and then they battle it out to decide who gets to sit in the corner office, who gets to be a doctor and who gets to clean the toilets. Often it turns out everybody does a bit of everything, otherwise it’s perceived as “unfair”.

When there is no rigid formal power structure people make up for it with “politics”. I think that’s to a large extent what’s happening, and it’s sort of consuming our lives…

Re: Things they didn’t teach you about software engineering

#116

Earlier quoted context omitted.

Most non-trivial programming homework assignments in college require debugging and a good school will provide guidance of how to do this. One thing I do in job interviews is to have the candidate debug an issue (that they usually caused themselves and that I let them purposefully run into). Quite the eye opener of how they approach bugs.

You would need to debug but can you tell if a person just printed to the console or used advanced tooling? Can you tell how long they wasted on the debugging aspect? Nope. That's the problem. These are soft skills that are hard to teach but much harder to test.

Yes, I can tell, because in the interview situation I'm sitting next to them.

And print statements are sometimes the superior choice.

This ties into my other comment that these things can be heavily subjective. As long as it gets the job done, I prefer print statements used by somebody who uses them as a sharp knife to gain understanding of what's going on over somebody just clicking buttons in a fancy UI but has no clue. (And vice versa, obviously.)

Re: Things they didn’t teach you about software engineering

#117

Earlier quoted context omitted.

Not at all. Software engineering is very much a thing and requires a different skillset than programming.

I suspect this may be a 'cultural' issue: For instance in Germany with its strong engineering tradition, nobody in their right mind would call somebody who builds software an 'engineer' (there are some google hits for "Softwareingeneur" but I bet this has a fairly recent thing and has been leaking back from English). A person who builds software is simply called a 'programmer' or 'developer' here. And I really have m…

I've worked with multiple german companies that declared their programmers as engineers, "Jr/Mid/Sr Software Engineer" or the more focused "Frontend/Backend/Fullstack Software Engineer". Maybe that's more of a thing in agencies? But then I think SAP calls them "Software Engineer" as well.

Re: Things they didn’t teach you about software engineering

#118

Earlier quoted context omitted.

> It produces this weird state where everyone saves up what they have to say for the meetings to avoid an awkward lack of participation or "I have nothing" in the meeting This is an odd meeting culture. Just remove the requirement that everybody has to bring up something. FWIW I've never felt like that in my teams.

I'm not sure it can be removed, fundamentally. After all, if everyone sent out their emails, so to speak, what would be left for the meeting? I mean, what are the odds of someone discovering something worthwhile to communicate to the team just seconds before the meeting starts? Any earlier and the email would have already been sent and there would be nothing left for the meeting. Maybe it happens once in a blue moon,…

> I'm not sure it can be removed, fundamentally.

I've not had this for the last 10 years, so it can definitely be removed.

Obviously everybody is welcome to bring up whatever is interesting nd worth discussing, and that's what we do in my current and previous workplaces. But there should not be a requirement that everybody has to bring up sth, which would lead to the described issues..

Re: Things they didn’t teach you about software engineering

#119
Even if you don't agree with everything, or the tone, there's a lot to be said for what is expressed in this article.

To the points about time spent and business value coming first, I would defend them by saying first that companies of different sizes operate with different requirements for their staff. You were hired to code, but in my experience the code is only important when it's serving the end goal of value. It's up to you to make sure that you're providing value, so be fluid enough to know when not to say, 'not my job'.

As for the grueling time expectations, I feel a lot of commenters are reacting to environments like those you hear about game devs; of course that's not alright. But yes, if there's systems that you work on that no one else really knows about, you'll need to keep tabs on them pretty much all the time. It doesn't mean you need to check in all the time, it means you need to write code to tell you on weekends when your things need to be checked out.

The job I have now could probably be done by some ninja coder for less, but they pay me because I know how to deal with everyone who doesn't code while I write my code.

Re: Things they didn’t teach you about software engineering

#120
Legit lessons but deep inside I feel bad because after 10 years in this industry I found that no one listens to anyone, it's sort of a culture. One thing I don't listen to anyone is "clean code". When I see a job description "something something .. clean code" I always think "by whose authority?". Of course we shouldn't write a huge terrible function, but your a-lot-of-indirect-calls looks clean but it's not. it's 4 level deep to investigate something.

> Domain knowledge is more important than your coding skills

This is where I wholeheartedly agree with. As I'm tired of cargo cult, playing tools, solving puzzles for fuck sake. I pick a domain knowledge first when I want to learn a new language to see what I could write some useful (to many people) thing in it. Tldr; you as you go help the others, not just learning sake.

Post reply on HN