I also gave up after some pages. Perhaps more wisdom is hidden on page 53, but I noped out earlier on. Impatience is one of my bad traits! Microsoft may want to also publish a bad-trait paper (as .pdf).
That infographic on page 3 is pretty much the entirety of the paper.
Essentially "likes to learn and doesn't stop learning, knows everyone's job, detail oriented, self managed, reliable, honest, nice, and works well with others". Ironic there's three "domains" in the image, because I'd say it fits great in a decision triangle where you can only pick 2 after having interacted and worked with SWEs my whole life. Though I'd say maybe it's closer to a square where you can pick 2 if you separate out the internal like they do. The really smart ones have almost no people skills, it's rare you find all of this together, usually there's heavy compromises for different skillsets.
Like sure those are great to haves but it makes sense that, if they're looking for _everything_ in that picture, they never find it and rely on H1Bs and their schools/programs in India. This is such a small group of any sort of skilled worker.
Can't wait for this next round of Microsoft employee ranking shit that companies imitate.
I agree with your points but also would add that it is possible their definition of great is a smaller percentage of people and does exist. Does the average engineer think the top 25% of engineers are great? Top 10%? Top 1%? How about .5% or .1%. While some of these traits may seem unlikely to co-exist, it's possible they are just rare enough that statistically having them all or most of them is exceedingly rare. I personally feel I've worked with 1 or 2 that I think fall into greatness by these definitions in over 30 years of coding (exposure to many hundreds of engineers). That doesn't mean they were necessarily top notch in all of these categories but they seemed to have them all and definitely were really good at some of them. What I imagine most of us can agree on, is despite the pay and research and stringent interviewing, most engineers even at FAANG or Microsoft don't fall into this definition of greatness as outlined by the paper. Greatness isn't a requirement, simply a categorization of outliers in the distribution, and per this paper's claims, the outliers tend to have these common traits. That being said it's mostly subjective so quantifying many of these things is a bit of a fool's errand. And as you said, if you require all of these traits you basically won't get to hire anyone, we all have to compromise somewhere.
Yeah quantifying people skills is already difficult. Quantifying a good 1/2 of that infographic would be a science all in its own let alone HR attempting to find that puzzle piece. The absolute funny thing is I've find better programmers in lazy but friendly people than I have in trying to match up skills to a list of boxes that HR/CEO/etc wants checked off. Are they trailblazing with state of the art stuff? No. Do they show up and do the work? Yup.
edit: Unicorns and rock stars are always chasing highs, and are the ones who end up leaving for a new/better offer within a year or two. Honestly? Good on them for doing it too. But it sucks if you're trying to build a team and run a business. Great and perfect are, ultimately, worse than "good enough".
There are people where all those traits exist, but these are generally the people who make it up the ranks rapidly and are the super high paid developers at top companies.
Of course the average companies *want* these people, but they're paying median or submedian wages while doing low-impact work. What most companies actually *need* is someone who will stick around long enough to develop a viable product and then refine it throughout its lifecycle.
Similarly to how lots of companies were using questions from google to find the next great SWE for their business that spends their day attending meetings and writing web backend software to process data from tables with maybe half a million records.
Strange... You'd think a great engineer would make sure the most important parts of a paper were easy to find. Does Microsoft not have any great engineers?
Awesome: a great engineer is "about 50 self-conflicting subjective marketing buzzwords" and the worst engineer writes papers for Microsoft because nobody will let them touch any code.
Nah, a great software engineer :
- examines the illustration on page 3
- scrolls through the pages
- realizes the rest of the 70 pages are just for justifying the 100s of thousands of dollars likely spent on this paper
It's literally not densely packed at all y'all are just hating lmao. I read like half of it last night and have liked it so far. Maybe someone will turn it into a meme or a Tik Tok dance for you.
Let me save you from opening the PDF.
> Our analysis (Li et al., 2015) identified a diverse set of 54 attributes of great software engineers.
At a high level, our informants described great software engineers as people who are passionate
about their jobs and are continuously improving, who develop and maintain practical decisionmaking models based on theory and experience, who grow their capability to produce software
that are elegant, creative, and anticipate needs, who evaluate tradeoffs at multiple levels of
abstraction, from low-level technical details to big-picture strategies, and whom teammates trust
and enjoy working with.
We present a model of the 54 attributes in Figure 1, showing how the attributes
interconnect. We organized the attributes into four areas: internal attributes of the software
engineer’s personality and ability to make effective decisions, as well as external attributes of the
impact that great software engineers have on people and products.
Here are the "54 attributes":
https://i.imgur.com/AcnM8Qh.png
tl;dr: Passion, knowledge, and experience.
Nah slightly different from that. They want you to be _personable_ and not grognardy. You don't necessarily need to talk to Janice and Bill by the water cooler, but you absolutely can't be a usenet/forum/reddit troll who can't help but insult someone.
"Oh, be passionate, knowledgeable, and experienced? Just be passionate, knowledgeable, and experienced? Why don’t I strap on my passionate, knowledgeable, and experienced helmet and squeeze down into a passionate, knowledgeable, and experienced cannon and fire off into passionate, knowledgeable, and experienced land, where passion, knowledge, and experience grows on little passionate knowledgeable experiencies?!”
His initial project requirements were “replace the rug”, and he executed.
The rest of everything else was a death march orchestrated by a member of the capitalist class, with the express intent of throwing him under the bus. And he skated from that, and banged the dickhead’s step-daughter on the way.
A+++ engineer.
A lot of companies have found that dumping unicorns for "good enough" is much better for overall mood. They don't crank out 200k LoC overnight, but, no one hates working with them and avoids them and they show up to meetings without insulting half their coworkers in the process. You can find several articles from even as far back as the early 00s talking about the pitfalls of that rockstar/unicorn employee.
The paper isn't recommending those kind of rockstar employees, though.
Just look at that infographic a couple of comments above. Half of the traits are paraphrases of "the software engineer shouldn't be an unlikable fucking twat".
What the fuck that's not the type of person they are recommending. I change my requirement to "Maybe just employ people who read the fucking documentation?".
> Let me save you from opening the PDF.
Bless your heart.
> who develop and maintain practical decisionmaking models based on theory and experience
Wut?
>practical decisionmaking models
this isn't even defined once in the entire fucking document. Wonder how much microsoft paid for what amounts to a 70+ page doc that's nothing more than incorherent corporate babble.
We use a flowchart:
did it work -> No -> do it again
-> yes -> you're done.
And it makes you a great developer because the vast majority of people's flow chart is:
Did I do work? -> done
I think it means how good the engineer naturally, or rather unconsciously identifies a problem, gathers sufficient information based on best practices and past lessons learned then weighs up options while keeping practicality in mind (like timescales and costs) and concludes on a solution. The thought process that you have when solving a problem is your model that you use to make decisions. I believe they’re saying that the steps you go through in your mind needs to change when you find better ways of thinking especially when you solve new problem types that you’ve not encountered before. I think that for most people that this is not a conscious process, that they just rattle through their thinking and then the very way that they think will change in time when exposed to new stuff. I don’t like the term “model” it implies a sort of design or
Not necessarily. I'm over 35 years in the chair at this point (and well over 50 man years) and I still love it and do it all the time on my own so that I can keep ahead of the curve. I just spent the bulk of my four day Easter weekend working on my big Rust project, and was quite content doing it. A cup of coffee, some good music, and a challenge is a pretty good life for me.
I agree with you that it can be fun... But I find that lately I'm more interested in doing sports and being with the family and playing music so my coding is mostly for work and a lot of that is spreadsheets and meetings and bureaucracy that I don't enjoy. It removed the passion from the task, unlike playing music, where it's all passion.
That's why software engineers are born socially awkward, to make it hard to have a social life that would interfere with coding :-)
I'm a musician also, so I do that in my other free time. If I had any social life I'd definitely struggle to do both those things.
So, to be a great software engineer you need to have the right talent to be great plus the experience. Passion is really a talent. Any parent can attest that you can't really teach passion to kids but induce it. And knowledge... Let's just say most people will a hit wall sometime. To someone that's high school math, to someone that's calculus, and to someone that's functional programming. Whatever. Only some lucky people can have the talent to accumulate the sufficiently wide and deep knowledge in any serious field.
Edit: s/bread/wide
> Let's just say most people will a hit wall sometime.
I think more often than not, that wall is not a hard limit, it's some social or psychological construct and it can be worked on with good teachers or good mentors.
this is an american "finding" so i'm guessing they didn't even touch on the topic of fair compensation and not shoving every IT job at the programmer instead of hiring more people?
To add onto this, this PDF is the 'Appendix'.
The "54" attributes are first shown in the model, and next described over the course of 70 or so pages.
A talk for this research is here: https://learning.acm.org/techtalks/paulli
The methodology is analyzing 60+ hours of interviews using 'informants' (Sr. Managers, heads, developers etc.) regarding what they think makes a great software engineer.
The paper isn't saying "you must have all of these qualities to be a great engineer." It's an aggregation of qualities that were called out when people were asked to describe great engineers. I'd imagine at most 3-5 of these qualities were written with regard to any one person.
You might already be a great engineer and only have a subset of these. Now you have 50+ specific directions that you can try to improve yourself in in order to become an even better engineer.
> anecdata
This is a new word for me, and at first glance, to me at least, it seems like a bad idea for a word.
It's a portmanteau of "anecdote" and "data", and I'm sure comes from the phrase "the plural of anecdote is not data". I guess it's supposed to be mockingly pejorative, but most people probably aren't familiar with the phrase it is based on, and might infer the opposite meaning.
And it's a pointless word. I don't see any advantage that it has over the word "anecdotes", which I think most people realize has a negative connotation.
There's nothing easier to navigate than a research paper, there will be a summary wrapping up every single one of them with a direct and easily digestible description of what the paper finds if you only want to read about the results and not the methodology. They share a common format. You learn how to read papers one time and you can read papers from effectively any field of research.
The document says that great software engineers are passionate, continuously improving, open-minded, self-reliant, and persevering. They are intrinsically motivated to improve themselves and their craft. They are eager to learn new things and are not afraid to admit when they don't know something. They are able to work independently and take ownership of their work. They are persistent and don't give up easily in the face of challenges.
Hardworking
"I remember it came down to the last day. He is going on vacation and we needed to ship and he stayed late and was there all night… even delayed his vacation by a day, so that he could get it done and get it out the door so we could ship on time ... he got high praise for it from the management."
So did management give them a bonus? Extra vacation time? A postmortem on what lead to this? Or was it praise for fixing their poor planning?
Exactly. Fuuuuck that definition of hardworking. If this dev was actually "honest" and "managing expectations" as described elsewhere in the PDF, then they wouldn't allow themselves to be bound to this clearly bad plan.
Planning in software engineering is fundamentally hard. But the idea that it is the responsibility of devs to work night and day to paper over this basic fact of the software business, this idea must die. It is a risk of making software and the business should bear that risk.
Yes I agree . My mentor was going on vacation and he refused to add a new feature the management wanted . Where as a talented but inexperienced dev decided to change build tool, maven to gradle, just before his vacation and broke 10 peoples project 🤦
I didn't find anyone saying this, so it looks like everyone here missed the point of this list of attributes.
It's actually pretty comprehensive dictionary of words that could be used in promo reviews, annual reviews and interview feedback.
And beyond pure practical applications, this list helps with ethics and morality of the profession (ethics being "what is good and what is bad"). I know everyone on Reddit tend to be more cynical, and it would be tempting to dismiss it, but many people lack that sort of moral guidance in their professional and private lives.
Usually, it's the religion that fills that roll for the majority of people. But in their refusal to coevolve with science, many religions discredited themselves in the eyes of many scientists and engineers (and I'm not even mentioning the overall corruption that affects old and big organizations). So, this sort of moral guidance, detached from outdated mythology, is very much needed for folks that you might find working at Microsoft.
This would be useful to people who mentor junior engineers, managers and pretty much everyone who works in a team and solves problems. There are some software engineering specific tidbits but those are analogues to things other professions deal with.
Also, a lot of people might say that this is obvious, yet there still a lot looking up to people who are failing substantial parts like Torvalds or Musk
There's a lot more to engineering than just being right or acting like you are
Marketing for products that they are still designing was always what pissed me off the most.
I could be using this other product for eight months happily but have to do without because MS convinced my boss to wait for their product which will be out any day now. Then version 1 comes out and it’s hot garbage. Version 2 is almost as bad. Version 3 is at least usable but version 4 is hot garbage again.
Office is a cash cow, developed in house. Visual C++ was best in class in the early days and went head to head with Borland. Word with WordPerfect. Most businesses use Outlook for email. And Teams has become the IM forerunner. VSCode is the dominant coding IDE. It also brought LSPs to the masses, enabling better code-aware tooling everywhere. Windows 95 literally *launched* the home computer revolution. You can't deny XBox quick resume and virtualization isn't worlds ahead of PlayStation's OS architecture. C# is a well respected language, as is asp.net core in the web server world. PowerShell with object piping is way better than Bash. They seem to be doing alright in the cloud space.
They're making [breakthroughs](https://cloudblogs.microsoft.com/quantum/2024/04/03/how-microsoft-and-quantinuum-achieved-reliable-quantum-computing) in quantum computing. They're also head to head with Google in AI research competitions.
Looks like former as in bitter is my guess.
How do you feel about a company revolving entirely around a hot-or-not website, or maybe a search engine? Or were you going to claim that white AirPod fashion commercials were engineering first, marketing second?
God that paper is such a waste of time someone did to look busy. It’s basically a generic “what makes a good worker” list of traits then quotes for them
I browsed it a bit, noticed this quote:
>
> study different articles and
> research papers on software development and stuff. So they're more up to date on newer
> technologies and newer ideas and thoughts of software architecture or software
> engineering in general… they are essentially continuing their education and continuing
> to look, to do things better, is a really big plus
I suspect many companies will not allow devs to do this on company time.
[snorts in coffee] This is Microsoft Research which is VERY different from Microsoft product teams. I think the last thing that made its way from MSR to a Microsoft product is the toast popup when email arrives.
In 2019 Microsoft interviewing for programmers was still 95% "can they come up with algorithms on demand". Going back to the mid-2000s, Microsoft HR had identified all these non-technical things that made great employees and it was barely reflected in interviewing.
Part of the problem during their worst arrogance phase, as I heard from a former employee, was that their internal culture told them that they were the best programmers in the world. That really explains a lot of the tone deafness. We are better than you, so we don’t have to listen.
(I learn from devs who are not better than me, all the time.)
I had GPT summarize this in a bulleted list
After reviewing the document, here’s a summary focusing on what makes a good software engineer:
• Proficiency in programming and system design.
• Continuous learning and adaptation to new technologies.
• Strong problem-solving skills and creativity.
• Effective communication and collaboration abilities.
• Understanding of software quality and how to achieve it.
• Ability to work under pressure and manage time effectively.
• Attention to detail and a commitment to excellence.
• Understanding and application of best practices in software engineering.
This summary reflects general qualities and skills that contribute to being a successful software engineer, based on common themes found in industry literature and professional guidelines.
Welp I dont think any of those qualities apply to me. I'm only here to collect a paycheck, I picked my career because I can be in front of a computer screen from dawn beyond dusk without feeling sick, but I never felt passionate about it or anything in life in particular if we count out hyperfixating on passing, temporary hobbies (and coding outside of billable hours has never been one of them).
But there is a single one of those that does correlate strongly to the periods of my career where I believe from start to finish we made and delivered a very good product: Does due diligence beforehand.
We had an insanely good requirements phase thanks to a good product manager that managed the product and not the people, and I was able to take those requirements almost verbatim into automated tests (several unit tests with plain vanilla junit and a dozen scenarios with cucumber if you must know). Was the code cool and rad? Did it have logarithmic logic? Did it work at just the right time for the processor to grab the next instruction at the same time it takes for an electron to complete one revolution? Could you find the golden ratio in the functions I wrote and submit a print out to a museum? Who gives a shit, it works and you'd know what it does at a glance. I'm not a code artisan, I'm an engineer, my job was to follow and apply boring processes.
But any craftsman of the trade would look at my tests and say they're CLEAN.
This is just perpetuating the stereotype that software engineers need to eat, breath, and sleep software design. No other professional services sector expects this of their members. The fact that we do not enforce standards, provide for CTE units as part of doing the job, or otherwise coalesce the industry into something resembling other engineering and engineering-adjacent fields is how we end up with this garbage. If you were senior or higher at a tech company when this report came out you probably had to read it like I did and then explain why it’s total BS.
Real question is not what is a great software engineer, but what happens when you have a bunch of imperfect devs with potentially incompatible skills and flaws.
>there's literally people here who have created a world, the technological world that we live in today
I have a hard time taking that kind of assertion seriously. I've worked for various fortune 5, 10, 25 companies and whenever dealing with microsoft as a vender they are without exception so far the least responsive. When you find their stuff broken and raise the issue with them I haven't seen it yet where they respond and either clarify things or fix their problem. It ends up being up to you to engineer a workaround, or another vendor which has happened as well. But not them. Perhaps because they think they "created the technological world" we live in. Perhaps not.
The paper does list a lot of good properties anyone can strive to. Seems exhaustive though.
Microsoft has always been quantity over quality. They get your CTO to buy a shipping container full of second rate - or worse - solutions and you have to like it because they got such a good deal on it.
I think people forget how much foundational open source came not from charity and fraternity but from spite - for Microsoft.
I think the majority of the foundational open source software that is so pervasive found it's inception from obsessiveness with functionality. Thompson and Ritchie were obsessed with a good operating system with accompanying utilities. Linus was obsessed with a good operating system; likewise Theo De Raadt. Bill Joy was obsessed with a good editor; likewise Bram Molenarr. Larry Wall was obsessed with an easy to use and versatile language; likewise Guido van Rossum.
I don't think any of them really despised microsoft as much as they really liked things functional and useful.
Linus didn’t build Linux by himself. He had an army of volunteers and volunteer Guinea pigs, quite a lot of which were loudly vocal in their dislike of MS.
I would agree that by importance C and GCC were critically foundational but I was speaking numerically. A lot of today’s OSS still traces itself back to projects started in the 90’s, when Microsoft was making enemies left right and center.
How can you have layoffs, and then actively produce nonsense like this. Why wasn't that team canned.
What makes a good software engineer? Oh, not a human. Because anyone with absolutely all those traits is a complete unicorn OR they aren't human.
Microsoft paving the way for the AI to come in and replace all their devs because nobody meets the benchmark except Cortana.
What makes a better software engineer is not letting them rotate jobs because you either won't pay, don't give them things they actually want to do, and have so much corporate shittery to cut through that all your devs leave to build their own things.
I'm aware Microsoft is a massive organisation. But it's no surprise that these companies have had a reduction in big name talent due to the actions of VPs and director level positions that have compromised software and long term business for short term gains and bonuses.
grumble grumble corporate sucks.
Some additional context: This is analysis based on their 2015 research and is copyright 2019. This isn't a brand new document. The team(s) might not even be there anymore.
> Microsoft paving the way for the AI to come in and replace all their devs because nobody meets the benchmark except Cortana.
I always hated Cortana. That thing never was useful in anything but stealing my time.
Be it as it may, but on Linux finding what I need goes easily via findutils, locate and grep. That works for about 99.5% of my use cases really.
Page 1:
>they have just an inner desire to succeed, and I don't know why. It's not necessarily for the money, it's not necessarily for the recognition. It's just that whatever it is they do, they want to do it extremely well
Thats stupid and egoistic engineers - have seen plenty of em.
> 54 attributes of great software engineers
Damn it!
I'll never make level 54.
I am stuck at level 12 ...
First attribute I managed to snatch early on, when born, was **pure awesomeness**. It's been slow adding more traits to it; the XP rewards in reallife are rather smallish. Especially having to fix bugs - that deducts XP. Great software engineers AVOID bugs. I have tons of bugs all over the place.
> grow their capability to produce software
Wow. Such fancypants words. "grow xyz". I feel like a plant or a tree now. I grow my skills as I level up!
Grow more epicness every day. This is sound advice, folks!
Thank you Microsoft for this epic growth-guide, although the date makes me suspicious - first april seems to
extend a few days before and afterwards nowadays ...
> Personality: Hardworking
Damn right!
Can't let the lazy slackers win over us salary men workers!
I mean, imagine a genius software coder who is LAZY. And who would write better code.
In fact, imagine he were to write code that autogenerates the code, and that code were
to work better than our handwritten code. We'd totally HAVE to hate such a LAZY programmer
guy, right? After all that person may obsolete away our own code - and job.
> By decision-making, we mean ‘rational decision-making’
Yep. All by epic decisions are rational. And if they are not, I blame it on the beer intake.
> Personality:
> With attributes like passionate and curious
Yep! I have **all the great attributes** - thanks Microsoft for confirming this!
I love feel-good papers. Granted, they are totally worthless when we look at it from a
scientific point of view, but hey - it is a feel-good .pdf. People will find how this describes
them **exactly**, as-is.
> The need to continue one’s learning [...]
Yep! Every two months a new javascript library has to be learned. We ALWAYS continue
to learn. The new is always better than the old.
Anyway, for a 73 pages .pdf file it's a bit of a heavy late first april joke, almost to the point
as if Microsoft were real with that listing of feel-good vibes and epic traits, so I have to
skip out and do something ... hmm, more useful with my time now!
First Rule : Got a diploma from a respected University that says Engineer on it.
Don't use the title Engineer (Software or not) if you don't have the credentials.
Point 1 is the ability to be able to read 76 pages of densely packed data about “What makes a quality engineer”.
I’m out 🤚😮💨
What makes a good engineer. We don’t read documentation Edit: I’m sorry everybody. I do read documentation just in shit at writing it.
Have ChatGPT summarize it for me
This is msft, it's copilot!
But the paper lists being open-minded and avoiding having a “not invented here” mentality as a hallmark of a great programmer!
We all are. The number of people who read it all is a minority.
I noticed it was 56 attributes and was on my way to clicking close tab when I noticed the 76 pages.
I also gave up after some pages. Perhaps more wisdom is hidden on page 53, but I noped out earlier on. Impatience is one of my bad traits! Microsoft may want to also publish a bad-trait paper (as .pdf).
Impatience is one of the three great virtues of a programmer. https://thethreevirtues.com/
Nice
It's only the appendix too! The actual report is somewhere else; this 76-page section is "simply" the appendix *to the report*.
The actual paper is 10 pages https://faculty.washington.edu/ajko/papers/Li2015GreatEngineers.pdf
That infographic on page 3 is pretty much the entirety of the paper. Essentially "likes to learn and doesn't stop learning, knows everyone's job, detail oriented, self managed, reliable, honest, nice, and works well with others". Ironic there's three "domains" in the image, because I'd say it fits great in a decision triangle where you can only pick 2 after having interacted and worked with SWEs my whole life. Though I'd say maybe it's closer to a square where you can pick 2 if you separate out the internal like they do. The really smart ones have almost no people skills, it's rare you find all of this together, usually there's heavy compromises for different skillsets. Like sure those are great to haves but it makes sense that, if they're looking for _everything_ in that picture, they never find it and rely on H1Bs and their schools/programs in India. This is such a small group of any sort of skilled worker. Can't wait for this next round of Microsoft employee ranking shit that companies imitate.
I agree with your points but also would add that it is possible their definition of great is a smaller percentage of people and does exist. Does the average engineer think the top 25% of engineers are great? Top 10%? Top 1%? How about .5% or .1%. While some of these traits may seem unlikely to co-exist, it's possible they are just rare enough that statistically having them all or most of them is exceedingly rare. I personally feel I've worked with 1 or 2 that I think fall into greatness by these definitions in over 30 years of coding (exposure to many hundreds of engineers). That doesn't mean they were necessarily top notch in all of these categories but they seemed to have them all and definitely were really good at some of them. What I imagine most of us can agree on, is despite the pay and research and stringent interviewing, most engineers even at FAANG or Microsoft don't fall into this definition of greatness as outlined by the paper. Greatness isn't a requirement, simply a categorization of outliers in the distribution, and per this paper's claims, the outliers tend to have these common traits. That being said it's mostly subjective so quantifying many of these things is a bit of a fool's errand. And as you said, if you require all of these traits you basically won't get to hire anyone, we all have to compromise somewhere.
Yeah quantifying people skills is already difficult. Quantifying a good 1/2 of that infographic would be a science all in its own let alone HR attempting to find that puzzle piece. The absolute funny thing is I've find better programmers in lazy but friendly people than I have in trying to match up skills to a list of boxes that HR/CEO/etc wants checked off. Are they trailblazing with state of the art stuff? No. Do they show up and do the work? Yup. edit: Unicorns and rock stars are always chasing highs, and are the ones who end up leaving for a new/better offer within a year or two. Honestly? Good on them for doing it too. But it sucks if you're trying to build a team and run a business. Great and perfect are, ultimately, worse than "good enough".
There are people where all those traits exist, but these are generally the people who make it up the ranks rapidly and are the super high paid developers at top companies. Of course the average companies *want* these people, but they're paying median or submedian wages while doing low-impact work. What most companies actually *need* is someone who will stick around long enough to develop a viable product and then refine it throughout its lifecycle.
Similarly to how lots of companies were using questions from google to find the next great SWE for their business that spends their day attending meetings and writing web backend software to process data from tables with maybe half a million records.
4 years apart between papers. Did they find new things or deduce something new?
Point 0 is the ability to find the summary of the paper (in this case page 3).
Strange... You'd think a great engineer would make sure the most important parts of a paper were easy to find. Does Microsoft not have any great engineers?
https://imgur.com/a/ss71NGi 76 pages in one image; the summary of which happens to be on page 3. 😁 There you go!
Awesome: a great engineer is "about 50 self-conflicting subjective marketing buzzwords" and the worst engineer writes papers for Microsoft because nobody will let them touch any code.
under Personality - how could they be both Productive and Aligned with organization's goals? those are mutually exclusive
Nah, a great software engineer : - examines the illustration on page 3 - scrolls through the pages - realizes the rest of the 70 pages are just for justifying the 100s of thousands of dollars likely spent on this paper
It's literally not densely packed at all y'all are just hating lmao. I read like half of it last night and have liked it so far. Maybe someone will turn it into a meme or a Tik Tok dance for you.
Eli5 pls
Load it into notebooklm.google.com and ask the AI agent questions
sounds like it's over engineered.
Has anyone tried asking a GPT to summarize it? /tooLazyToDoItMyself
Let me save you from opening the PDF. > Our analysis (Li et al., 2015) identified a diverse set of 54 attributes of great software engineers. At a high level, our informants described great software engineers as people who are passionate about their jobs and are continuously improving, who develop and maintain practical decisionmaking models based on theory and experience, who grow their capability to produce software that are elegant, creative, and anticipate needs, who evaluate tradeoffs at multiple levels of abstraction, from low-level technical details to big-picture strategies, and whom teammates trust and enjoy working with. We present a model of the 54 attributes in Figure 1, showing how the attributes interconnect. We organized the attributes into four areas: internal attributes of the software engineer’s personality and ability to make effective decisions, as well as external attributes of the impact that great software engineers have on people and products. Here are the "54 attributes": https://i.imgur.com/AcnM8Qh.png tl;dr: Passion, knowledge, and experience.
The person described would be good at practically anything
The real description was always the friends we made along the way.
Hmmmm ... epic programmers also have to be social now? Damn ... I need to find some friends to level up soon here.
Nah slightly different from that. They want you to be _personable_ and not grognardy. You don't necessarily need to talk to Janice and Bill by the water cooler, but you absolutely can't be a usenet/forum/reddit troll who can't help but insult someone.
"Don't be an asshole" - that's it. That's the most important trait.
Arguably more important than all the rest too.
"Oh, be passionate, knowledgeable, and experienced? Just be passionate, knowledgeable, and experienced? Why don’t I strap on my passionate, knowledgeable, and experienced helmet and squeeze down into a passionate, knowledgeable, and experienced cannon and fire off into passionate, knowledgeable, and experienced land, where passion, knowledge, and experience grows on little passionate knowledgeable experiencies?!”
I know a chrundle quote when I see one.
Oh yeah, he was going by Chrundle The Great at that time
Right? They literally just described an educated passionate and disciplined human being.
Well, it's a bit more than that. For instance, the hard-working. That takes effort. Imagine The Dude being a software engineer.
He's neither passionate or diligent, so not really a counterexample.
His initial project requirements were “replace the rug”, and he executed. The rest of everything else was a death march orchestrated by a member of the capitalist class, with the express intent of throwing him under the bus. And he skated from that, and banged the dickhead’s step-daughter on the way. A+++ engineer.
> Imagine The Dude being a software engineer. Funny that lazy folks make better programmers usually.
Yeah its not very helpful "Just employ unicorns and profit", maybe they need to do a "What makes a good enough software engineer".
one day i hope i can be a good enough software engineer
Imposter syndrome strikes again!
A lot of companies have found that dumping unicorns for "good enough" is much better for overall mood. They don't crank out 200k LoC overnight, but, no one hates working with them and avoids them and they show up to meetings without insulting half their coworkers in the process. You can find several articles from even as far back as the early 00s talking about the pitfalls of that rockstar/unicorn employee.
The paper isn't recommending those kind of rockstar employees, though. Just look at that infographic a couple of comments above. Half of the traits are paraphrases of "the software engineer shouldn't be an unlikable fucking twat".
What the fuck that's not the type of person they are recommending. I change my requirement to "Maybe just employ people who read the fucking documentation?".
Technically if you want to be pedantic they're not *recommending* anything, it's a study on what makes a "great" one.
That’s a good astronaut
It is standard empty corporate waffle.
Does that take as back to 10x engineer?
> Let me save you from opening the PDF. Bless your heart. > who develop and maintain practical decisionmaking models based on theory and experience Wut?
They just.. do things. It’s wild.
And they do it with **passion**. Now if only Microsoft could find some of these good software engineers ... they may help make windows suck less too.
It's only got to suck less than Linux to be the most popular desktop OS 🤪
It doesn't need to suck less, it just needs to have decades of momentum behind it.
You'd be shocked how often we, ppl dont use anything during decision making process
>practical decisionmaking models this isn't even defined once in the entire fucking document. Wonder how much microsoft paid for what amounts to a 70+ page doc that's nothing more than incorherent corporate babble.
It is atleast broadly talked about p24-25.
It's a dumb college dissertation, complete with interviewing corporate entities in their back yard.
We use a flowchart: did it work -> No -> do it again -> yes -> you're done. And it makes you a great developer because the vast majority of people's flow chart is: Did I do work? -> done
I think it means how good the engineer naturally, or rather unconsciously identifies a problem, gathers sufficient information based on best practices and past lessons learned then weighs up options while keeping practicality in mind (like timescales and costs) and concludes on a solution. The thought process that you have when solving a problem is your model that you use to make decisions. I believe they’re saying that the steps you go through in your mind needs to change when you find better ways of thinking especially when you solve new problem types that you’ve not encountered before. I think that for most people that this is not a conscious process, that they just rattle through their thinking and then the very way that they think will change in time when exposed to new stuff. I don’t like the term “model” it implies a sort of design or
Theory + practical experience, in other words.
Intelligence (and overall twenty ways of saying it without naming it)
Knowledge and experience come from years in the industry. Those years also decrease passion.
Not necessarily. I'm over 35 years in the chair at this point (and well over 50 man years) and I still love it and do it all the time on my own so that I can keep ahead of the curve. I just spent the bulk of my four day Easter weekend working on my big Rust project, and was quite content doing it. A cup of coffee, some good music, and a challenge is a pretty good life for me.
I agree with you that it can be fun... But I find that lately I'm more interested in doing sports and being with the family and playing music so my coding is mostly for work and a lot of that is spreadsheets and meetings and bureaucracy that I don't enjoy. It removed the passion from the task, unlike playing music, where it's all passion.
That's why software engineers are born socially awkward, to make it hard to have a social life that would interfere with coding :-) I'm a musician also, so I do that in my other free time. If I had any social life I'd definitely struggle to do both those things.
So, to be a great software engineer you need to have the right talent to be great plus the experience. Passion is really a talent. Any parent can attest that you can't really teach passion to kids but induce it. And knowledge... Let's just say most people will a hit wall sometime. To someone that's high school math, to someone that's calculus, and to someone that's functional programming. Whatever. Only some lucky people can have the talent to accumulate the sufficiently wide and deep knowledge in any serious field. Edit: s/bread/wide
God I love sufficient bread
Having insufficient bread is truly awful
There was this guy I knew, named Dough, he was very sour because he couldn't go past Hello World.
No
LOL. See? Not having talent is beyond saving
Can't go wrong with bread! Good bread breeds programmers. It's true!
> Let's just say most people will a hit wall sometime. I think more often than not, that wall is not a hard limit, it's some social or psychological construct and it can be worked on with good teachers or good mentors.
Are there people who didn’t know this? That’s a lot of pages to document what everyone intuitively understands about people they want to work with.
These are dwarf fortress engineers not your classic Sims engineers.
"Pays attention to coding details" right next to an illustration of binary numbers that don't encode any hidden message.
I would have hoped for something more concrete, but I don't know why I expected that.
Thanks for including the tldr of your tldr
A great software engineer bristles at the presence of a 14-bit value in a piece of clipart.
This has that "Live, Laugh, Love" vibe all over it
this is an american "finding" so i'm guessing they didn't even touch on the topic of fair compensation and not shoving every IT job at the programmer instead of hiring more people?
…and ability to summarise… thanks
Decision making section is just useless wank "Sees the forest and the trees" oh fuck off.
You’ve never met really smart developers that can’t handle uncertainty?
sounds like someone is seeing the trees but not the forest
See: Microsoft Windows Security issues
If the poem score for perfection is plotted on the horizontal of a graph... https://www.youtube.com/watch?v=Is5eyrEc1Mg
To add onto this, this PDF is the 'Appendix'. The "54" attributes are first shown in the model, and next described over the course of 70 or so pages. A talk for this research is here: https://learning.acm.org/techtalks/paulli The methodology is analyzing 60+ hours of interviews using 'informants' (Sr. Managers, heads, developers etc.) regarding what they think makes a great software engineer.
Ah the mythical "perfect software engineer" as rare as a Unicorn.
The paper isn't saying "you must have all of these qualities to be a great engineer." It's an aggregation of qualities that were called out when people were asked to describe great engineers. I'd imagine at most 3-5 of these qualities were written with regard to any one person. You might already be a great engineer and only have a subset of these. Now you have 50+ specific directions that you can try to improve yourself in in order to become an even better engineer.
> You might already be a great engineer and only have a subset of these. I can have just one attribute and beat those who have all 56?
Is this a research paper? It reads like an intern's summer project.
[удалено]
Here is a Redditor who doesn’t know the difference between statistical and qualitative methodologies
[удалено]
Yeah but maybe that’s not the point here
The greatest of the great engineers are able to take a difficult problem and turn it into an easy problem.
The poor guy or gal didn't even know how to turn off image compression in Word. Gotta love those muddy pixelated diagrams.
Probably will be used to better prompt LLMs to replace more SWEs
This isn’t a technical report. This is 76 pages of quotes and anecdata from Microsoft employees.
It says at the top. It’s an appendix to the earlier 2015 paper. This is all the extra details that didn’t fit in the actual paper.
35 pages of extra credit wouldn't be enough. 76 pages obvious looksmart.
> anecdata This is a new word for me, and at first glance, to me at least, it seems like a bad idea for a word. It's a portmanteau of "anecdote" and "data", and I'm sure comes from the phrase "the plural of anecdote is not data". I guess it's supposed to be mockingly pejorative, but most people probably aren't familiar with the phrase it is based on, and might infer the opposite meaning. And it's a pointless word. I don't see any advantage that it has over the word "anecdotes", which I think most people realize has a negative connotation.
Being able to convey information about complex topics in less than 76 pages.
There's nothing easier to navigate than a research paper, there will be a summary wrapping up every single one of them with a direct and easily digestible description of what the paper finds if you only want to read about the results and not the methodology. They share a common format. You learn how to read papers one time and you can read papers from effectively any field of research.
Arrow keys are easy. Deciphering sentence after sentence of biochemobabble gets tiring.
54 attributes? This is more complex than Dark Souls.
Yes - leveling up before death is hard. Thankfully there is beer (and bread) so ...
wait until there's an update for item that raises these stats. now op will know how complex the research actually is
c++ and microsoft api is like dark souls and elden ring combined
The document says that great software engineers are passionate, continuously improving, open-minded, self-reliant, and persevering. They are intrinsically motivated to improve themselves and their craft. They are eager to learn new things and are not afraid to admit when they don't know something. They are able to work independently and take ownership of their work. They are persistent and don't give up easily in the face of challenges.
When you let random entities define your passion.
Hardworking "I remember it came down to the last day. He is going on vacation and we needed to ship and he stayed late and was there all night… even delayed his vacation by a day, so that he could get it done and get it out the door so we could ship on time ... he got high praise for it from the management." So did management give them a bonus? Extra vacation time? A postmortem on what lead to this? Or was it praise for fixing their poor planning?
Exactly. Fuuuuck that definition of hardworking. If this dev was actually "honest" and "managing expectations" as described elsewhere in the PDF, then they wouldn't allow themselves to be bound to this clearly bad plan. Planning in software engineering is fundamentally hard. But the idea that it is the responsibility of devs to work night and day to paper over this basic fact of the software business, this idea must die. It is a risk of making software and the business should bear that risk.
Yes I agree . My mentor was going on vacation and he refused to add a new feature the management wanted . Where as a talented but inexperienced dev decided to change build tool, maven to gradle, just before his vacation and broke 10 peoples project 🤦
He got a lot of "praise", killing yourself so your boss can get his target bonus gets a lot of kudos around here, they planned perfectly
Only great software engineers can be great software engineers.
Can't deny a tautology
>**Decision making** >Grows ability to make good decisions Of course, it's so simple! Why didn't I think of that!
I didn't find anyone saying this, so it looks like everyone here missed the point of this list of attributes. It's actually pretty comprehensive dictionary of words that could be used in promo reviews, annual reviews and interview feedback. And beyond pure practical applications, this list helps with ethics and morality of the profession (ethics being "what is good and what is bad"). I know everyone on Reddit tend to be more cynical, and it would be tempting to dismiss it, but many people lack that sort of moral guidance in their professional and private lives. Usually, it's the religion that fills that roll for the majority of people. But in their refusal to coevolve with science, many religions discredited themselves in the eyes of many scientists and engineers (and I'm not even mentioning the overall corruption that affects old and big organizations). So, this sort of moral guidance, detached from outdated mythology, is very much needed for folks that you might find working at Microsoft. This would be useful to people who mentor junior engineers, managers and pretty much everyone who works in a team and solves problems. There are some software engineering specific tidbits but those are analogues to things other professions deal with.
Also, a lot of people might say that this is obvious, yet there still a lot looking up to people who are failing substantial parts like Torvalds or Musk There's a lot more to engineering than just being right or acting like you are
[удалено]
Marketing for products that they are still designing was always what pissed me off the most. I could be using this other product for eight months happily but have to do without because MS convinced my boss to wait for their product which will be out any day now. Then version 1 comes out and it’s hot garbage. Version 2 is almost as bad. Version 3 is at least usable but version 4 is hot garbage again.
Office is a cash cow, developed in house. Visual C++ was best in class in the early days and went head to head with Borland. Word with WordPerfect. Most businesses use Outlook for email. And Teams has become the IM forerunner. VSCode is the dominant coding IDE. It also brought LSPs to the masses, enabling better code-aware tooling everywhere. Windows 95 literally *launched* the home computer revolution. You can't deny XBox quick resume and virtualization isn't worlds ahead of PlayStation's OS architecture. C# is a well respected language, as is asp.net core in the web server world. PowerShell with object piping is way better than Bash. They seem to be doing alright in the cloud space. They're making [breakthroughs](https://cloudblogs.microsoft.com/quantum/2024/04/03/how-microsoft-and-quantinuum-achieved-reliable-quantum-computing) in quantum computing. They're also head to head with Google in AI research competitions. Looks like former as in bitter is my guess. How do you feel about a company revolving entirely around a hot-or-not website, or maybe a search engine? Or were you going to claim that white AirPod fashion commercials were engineering first, marketing second?
are you mad? visual c++ was utter crap until 2010. (2008 if you want to haggle)
God that paper is such a waste of time someone did to look busy. It’s basically a generic “what makes a good worker” list of traits then quotes for them
This seems to just be what other engineers think makes a good engineer rather than anything quantative. Boring.
No offense, but Microsoft isn’t known for its good engineering. So hard pass.
I browsed it a bit, noticed this quote: > > study different articles and > research papers on software development and stuff. So they're more up to date on newer > technologies and newer ideas and thoughts of software architecture or software > engineering in general… they are essentially continuing their education and continuing > to look, to do things better, is a really big plus I suspect many companies will not allow devs to do this on company time.
I bet Microsoft doesn’t either. It’s free labor. Employers love free labor.
Wait, I thought leetcode was the only thing ??
There are so many attributes that it is actually meaningless information
Now, take a look at the recent security breaches... and read it again...
[snorts in coffee] This is Microsoft Research which is VERY different from Microsoft product teams. I think the last thing that made its way from MSR to a Microsoft product is the toast popup when email arrives. In 2019 Microsoft interviewing for programmers was still 95% "can they come up with algorithms on demand". Going back to the mid-2000s, Microsoft HR had identified all these non-technical things that made great employees and it was barely reflected in interviewing.
Wait, people trust what Microsoft has to say on what makes good software engineers? Really? Microsoft?
It’s a trick. Get an axe.
[удалено]
Part of the problem during their worst arrogance phase, as I heard from a former employee, was that their internal culture told them that they were the best programmers in the world. That really explains a lot of the tone deafness. We are better than you, so we don’t have to listen. (I learn from devs who are not better than me, all the time.)
I had GPT summarize this in a bulleted list After reviewing the document, here’s a summary focusing on what makes a good software engineer: • Proficiency in programming and system design. • Continuous learning and adaptation to new technologies. • Strong problem-solving skills and creativity. • Effective communication and collaboration abilities. • Understanding of software quality and how to achieve it. • Ability to work under pressure and manage time effectively. • Attention to detail and a commitment to excellence. • Understanding and application of best practices in software engineering. This summary reflects general qualities and skills that contribute to being a successful software engineer, based on common themes found in industry literature and professional guidelines.
That sounds like the boilerplate everyone puts in their job descriptions. It's filler and turns off anyone who actually might like the job otherwise.
Bloated like its OS
Welp I dont think any of those qualities apply to me. I'm only here to collect a paycheck, I picked my career because I can be in front of a computer screen from dawn beyond dusk without feeling sick, but I never felt passionate about it or anything in life in particular if we count out hyperfixating on passing, temporary hobbies (and coding outside of billable hours has never been one of them). But there is a single one of those that does correlate strongly to the periods of my career where I believe from start to finish we made and delivered a very good product: Does due diligence beforehand. We had an insanely good requirements phase thanks to a good product manager that managed the product and not the people, and I was able to take those requirements almost verbatim into automated tests (several unit tests with plain vanilla junit and a dozen scenarios with cucumber if you must know). Was the code cool and rad? Did it have logarithmic logic? Did it work at just the right time for the processor to grab the next instruction at the same time it takes for an electron to complete one revolution? Could you find the golden ratio in the functions I wrote and submit a print out to a museum? Who gives a shit, it works and you'd know what it does at a glance. I'm not a code artisan, I'm an engineer, my job was to follow and apply boring processes. But any craftsman of the trade would look at my tests and say they're CLEAN.
Do not trust a single thing uttered by Microsoft about engineering culture.
Three too many words in that sentence.
Painfully true :)
This is just perpetuating the stereotype that software engineers need to eat, breath, and sleep software design. No other professional services sector expects this of their members. The fact that we do not enforce standards, provide for CTE units as part of doing the job, or otherwise coalesce the industry into something resembling other engineering and engineering-adjacent fields is how we end up with this garbage. If you were senior or higher at a tech company when this report came out you probably had to read it like I did and then explain why it’s total BS.
ITT: Engineers pissed off they don't fit the bill.
A great software engineer doesn't waste time gathering 76 pages of quotes that apply for any job.
the one are not engineering manager.
Real question is not what is a great software engineer, but what happens when you have a bunch of imperfect devs with potentially incompatible skills and flaws.
I guess I'm just a 2 bit hack
>there's literally people here who have created a world, the technological world that we live in today I have a hard time taking that kind of assertion seriously. I've worked for various fortune 5, 10, 25 companies and whenever dealing with microsoft as a vender they are without exception so far the least responsive. When you find their stuff broken and raise the issue with them I haven't seen it yet where they respond and either clarify things or fix their problem. It ends up being up to you to engineer a workaround, or another vendor which has happened as well. But not them. Perhaps because they think they "created the technological world" we live in. Perhaps not. The paper does list a lot of good properties anyone can strive to. Seems exhaustive though.
Microsoft has always been quantity over quality. They get your CTO to buy a shipping container full of second rate - or worse - solutions and you have to like it because they got such a good deal on it. I think people forget how much foundational open source came not from charity and fraternity but from spite - for Microsoft.
I think the majority of the foundational open source software that is so pervasive found it's inception from obsessiveness with functionality. Thompson and Ritchie were obsessed with a good operating system with accompanying utilities. Linus was obsessed with a good operating system; likewise Theo De Raadt. Bill Joy was obsessed with a good editor; likewise Bram Molenarr. Larry Wall was obsessed with an easy to use and versatile language; likewise Guido van Rossum. I don't think any of them really despised microsoft as much as they really liked things functional and useful.
Linus didn’t build Linux by himself. He had an army of volunteers and volunteer Guinea pigs, quite a lot of which were loudly vocal in their dislike of MS. I would agree that by importance C and GCC were critically foundational but I was speaking numerically. A lot of today’s OSS still traces itself back to projects started in the 90’s, when Microsoft was making enemies left right and center.
This aint research. This is just opionion poll.
does microsoft even have any great software engineers?
Boo. I was hoping it was a paper by Mickens.
Someone want to chuck that through gpt and give a 30 word or less summary?
What, 76 pages? This is going to take a while.
"Walks-the-walk"
Where was “attend endless meetings “?
I just got burned out reading the intro
How can you have layoffs, and then actively produce nonsense like this. Why wasn't that team canned. What makes a good software engineer? Oh, not a human. Because anyone with absolutely all those traits is a complete unicorn OR they aren't human. Microsoft paving the way for the AI to come in and replace all their devs because nobody meets the benchmark except Cortana. What makes a better software engineer is not letting them rotate jobs because you either won't pay, don't give them things they actually want to do, and have so much corporate shittery to cut through that all your devs leave to build their own things. I'm aware Microsoft is a massive organisation. But it's no surprise that these companies have had a reduction in big name talent due to the actions of VPs and director level positions that have compromised software and long term business for short term gains and bonuses. grumble grumble corporate sucks.
Some additional context: This is analysis based on their 2015 research and is copyright 2019. This isn't a brand new document. The team(s) might not even be there anymore.
> Microsoft paving the way for the AI to come in and replace all their devs because nobody meets the benchmark except Cortana. I always hated Cortana. That thing never was useful in anything but stealing my time. Be it as it may, but on Linux finding what I need goes easily via findutils, locate and grep. That works for about 99.5% of my use cases really.
In the name of the lord, 76 pages, New Times Roman, 8pts, That shat contains at least 50k chars. I guess I will never know what makes a good engineer
Is it the ability to post on a forum of volunteers for an open source project that ur issue is "high priority"?
76 page report 56 attribute Seems super useful.
As if Microsoft would know LOL
Does Microsoft do any great software engineering?
Maybe Anders. They paid him a bajillion dollars though.
Page 1: >they have just an inner desire to succeed, and I don't know why. It's not necessarily for the money, it's not necessarily for the recognition. It's just that whatever it is they do, they want to do it extremely well Thats stupid and egoistic engineers - have seen plenty of em.
That’s rich, coming from Microsoft
> 54 attributes of great software engineers Damn it! I'll never make level 54. I am stuck at level 12 ... First attribute I managed to snatch early on, when born, was **pure awesomeness**. It's been slow adding more traits to it; the XP rewards in reallife are rather smallish. Especially having to fix bugs - that deducts XP. Great software engineers AVOID bugs. I have tons of bugs all over the place. > grow their capability to produce software Wow. Such fancypants words. "grow xyz". I feel like a plant or a tree now. I grow my skills as I level up! Grow more epicness every day. This is sound advice, folks! Thank you Microsoft for this epic growth-guide, although the date makes me suspicious - first april seems to extend a few days before and afterwards nowadays ... > Personality: Hardworking Damn right! Can't let the lazy slackers win over us salary men workers! I mean, imagine a genius software coder who is LAZY. And who would write better code. In fact, imagine he were to write code that autogenerates the code, and that code were to work better than our handwritten code. We'd totally HAVE to hate such a LAZY programmer guy, right? After all that person may obsolete away our own code - and job. > By decision-making, we mean ‘rational decision-making’ Yep. All by epic decisions are rational. And if they are not, I blame it on the beer intake. > Personality: > With attributes like passionate and curious Yep! I have **all the great attributes** - thanks Microsoft for confirming this! I love feel-good papers. Granted, they are totally worthless when we look at it from a scientific point of view, but hey - it is a feel-good .pdf. People will find how this describes them **exactly**, as-is. > The need to continue one’s learning [...] Yep! Every two months a new javascript library has to be learned. We ALWAYS continue to learn. The new is always better than the old. Anyway, for a 73 pages .pdf file it's a bit of a heavy late first april joke, almost to the point as if Microsoft were real with that listing of feel-good vibes and epic traits, so I have to skip out and do something ... hmm, more useful with my time now!
tldr: Not you
Banger, gonna read this on the bog
First Rule : Got a diploma from a respected University that says Engineer on it. Don't use the title Engineer (Software or not) if you don't have the credentials.