What is a Software Developer?

This article has been many months in the making, and actually stemmed from a really uncomfortable family discussion around the dinner table where we had an argument about, of all things, what a “Coder” is. A non-technical dinner guest asked me what it meant when my young niece said she is “learning code” by having completed a project in her school’s STEM club. I’m not privy to the details of what she learned, but given that she is in Middle School, I surmised that it might have had to do with creating something in HTML, JavaScript, and/or CSS and making it run in a browser.

I explained that, to learn “how to code”, my niece probably wrote some text in a language that a browser can understand, and made something interesting happen on a computer. My “older-school” more-technical relative, however, took umbrage with this loose definition of a Coder’s craft, and said that unless she was writing algorithms to reverse strings and convert types, her work could not be considered to be code at all, and thus she could not be “learning to code” to potentially become “a Coder”.

This uncomfortable conversation periodically reverberates across the internet as practitioners of this strange profession try to define what it is, exactly, that we do. Are we Coders? Software Developers? Engineers? Programmers? To find out, I posted a quick Twitter poll to see what we call ourselves as professionals. 6000 votes later, we came to no consensus at all:

While many people embrace some combination of the words “software”, “developer” and “engineer”, because there is no state-sanctioned training path for this field in the U.S., there is no universally-accepted title that one earns even after completing a degree.

The situation in the U.S. seems unique: in Canada, the term Software Engineer is protected – and anyone without such a degree plus practicum training and experience risks censure – it’s actually illegal to use this term loosely. Fun fact: there’s a Canadian “Ritual of the Calling of the Ring” designed by Rudyard Kipling during which, after being certified as a Software Engineer, a new professional is gifted an Iron Ring. Talk about being married to a career!

And what about all of us self-taught Software Developers? How do we describe what we do?

What is it that we actually do?

As “Technical People”, this field in which we are employed encompasses a wide variety of technical skills and activities. Some people test software that other people have written. Some design user interfaces. Some write documentation explaining these interfaces, tests, and programs. After 15 years of writing software that supported the creation and maintenance of various customer-facing and internal products in several different companies, I myself am now playing the auxiliary role of Developer Advocate (which might merit a separate article).

According to my non-scientific poll, some people prefer to be somewhat specific about describing their profession. Some “Software Testers”, “Consultants”, and “Technical Writers” responded, whereas others embrace the term “Analyst” or “Architect”. Other people stated that the response depends on the audience, embracing a broader description:

A common complaint returned directly to the very fluidity of both our job title and how people perceive it:

To add another wrinkle, it seems that the terminology used can directly impact your perceived value in the field, and thus your salary. Why call yourself a Web Developer for a median income of $65,000 when you can be a Software Developer for $98,000? Words matter!

I think it’s fair to say, then, that:

  • People who write computer programs for a living generally term themselves Software Developers
  • They often have to explain themselves further, depending on the audience, an activity that can be very frustrating
  • They take a broad view of the field – if they write lines of text that make things happen in a mobile app, browser, piece of hardware, wearable, or some other kind of device, then they consider themselves Software Developers (with finer gradations as secondary explanations)

Based on this broad definition of this professional activity, then, I believe that what my niece is doing is, in fact, “coding”. In the future she could style herself “a Coder” (or, preferably, “a Software Developer”) if she stays the profession. The kind of code she’s writing, in fact, doesn’t matter.

Neither do the tools she’s using, by the way. A perfect storm of fury erupted on social media when Peter-Paul Koch displayed a slide stating that “If you can’t do without tools, you aren’t a web developer”. This profession is not defined by its tools, but rather by the clever way that we use languages, syntax, and community collaboration to push web and mobile experiences ever further to benefit our users. In a rapidly-changing profession, being a true Software Developer is being a great learner, embracing the journey as you evolve your thinking and skills.

Who’s in and who’s out?

The above broad definition, actually, can raise eyebrows and create Twitter drama (to be fair…what doesn’t create Twitter drama these days?) in particular when we approach the thorny issue of UI design and behavior. Can someone who specializes in CSS be considered a Software Developer?

To misquote Heidi Klum, “If you write code, you’re in. But sometimes, you’re out”.

Let a Twitter poll get popular enough, and the naysayers come out:

Developers of a feather flock together. There’s an insidious trend of pattern-matching and exclusionary tactics that make some Software Developers consider themselves more “Developerish” than other Developers.

This sort of exclusivity makes articles like this one by Lea Verou and this talk by Elijah Manor particularly poignant. Once you enter the front-end arena, touching on design, colors, typography – or as my colleague Tara Manicsic would say, “Turning Ideas into Pixels” – you enter uncomfortable territory for many full-stack and backend developers. Are specialists in Design and CSS “really Developers”?


The skills required to write good CSS code are by and large the same skills required to write good code in general. CSS code also needs to be DRY, maintainable, flexible, etc. CSS might have a visual output, but is still code…It still requires the same kind of analytical thinking that programming does. —Lea Verou

To reiterate, you don’t have to concentrate on algorithms to be a Software Developer. You might focus on CSS, PHP, or a framework like Ember…or even be a master of some crazy app like After Effects…and if you write lines of some language that make things happen on devices, you are a Software Developer.

These Girl Scouts are learning how to hand-code a web site using HTML and CSS. From ng-conf 2017 with Tara and Jen

Do #ILookLikeAnEngineer ?

Of course you do. The above-mentioned exclusionary tendency has a lot to do with pattern matching. Check yourself! Deep down, do those people who are primarily working with CSS and SVGs and cool responsive web sites actually look the way that you think developers ought to look?

Perhaps it’s time to expand the pattern to include people who look and act a bit different than what you’d expect in this profession. The hashtag #ILookLikeAnEngineer was launched after some really unfortunate feedback from an unconventional ad in the Bay Area BART trains. Do you look like an Engineer? How about a Software Developer? Does it matter?

It’s been 70 years since ENIAC ran its first lines of code (all programmed, incidentally, by women) written in a modern paradigm. It will do us good to remember where we came from, and where we want to take this profession.

If you take an “all-encompassing” approach to defining this profession, I believe, it will make it all the stronger. We are all Developers (or Coders, if you prefer), whether we specialize on writing code for the front-end, back-end, mobile apps, wearables, or hardware. And our profession is awesome, even if nobody agrees on what it actually is that we should call ourselves!


  • Simon MacDonald

    Great write up. I’m only slightly disappointed you did not use my response as one of the examples 🙂

    • Jen Looper

      aw sorry Simon! So many responses to that crazy poll!

  • Phil

    Great article! – I challenge myself with a new creative way to say web developer, software engineer, mobile developer, etc when someone asks me what i do. I would say that engineer/architect labels are more for when we are actually architecting systems and micro services… i don’t devalue someone who just builds wordpress sites, but it is a different skillset than someone who architects api’s and spends days agonizing over saving 10% of bandwidth and caching to make an api faster and uses standardized JSON responses for backwards compatibility etc…

    • dav0id

      I just usually say I do weird s#!t with computers 🙂

  • Pingback: Dew Drop - April 21, 2017 (#2463) - Morning Dew()

  • RollingMaul

    We’re more than that – to those who are less computer literate what we do is akin to sorcery. Or is that source-ry? 😉

    • burkeholland

      Nicely done

  • Craig Sturgeon

    I been working with Iron Ring holders for 40 years–yes, from the punch card era, when I/T was another way of saying Data Processing, through to today. Anyone with years of experience, without an Iron Ring–call yourself a software specialist. Nice write-up.

    • Jen Looper

      I think this article unleashed a world of hurt here in the US that we don’t get iron rings, although I can’t imagine that they are very comfy to wear. Are you based in Canada?

      • Craig Sturgeon

        Yes. I worked in the steel industry in Canada for 18 years, working with metallurgist and other engineers–many of them were fantastic software developers/engineers. I then moved to England working with H/R applications for the US–one software developer colleague was a rocket scientist (he should have been working for NASA). I have been back in Canada for more than a decade, again working along side a few Iron Ring holders–again all excellent software developers.

      • Jim L

        I am concerned what it means when the iron ring rusts. Does it mean the same thing as the engineer’s skills. Now, I am sure that a materials engineer would have proposed a better material to use. On the other hand, you can tell how good an engineer is by the upkeep on his ring.

        Besides, here in the US, anyone can qualify as an engineer. High school drop out, domestic engineer, the guy who drives a train, etc. Then, again, it is just the free market and hiring the cheapest labor. (Although, the guy who runs a train requires a great deal of skill.)

  • Muhammad Ahmed

    awesome Article Jen, I come across this question everyday since my graduation : p

    • Jen Looper

      and how do you answer? Congrats on the degree btw 🙂

      • Muhammad Ahmed

        thanks Jen : ) well it depends on the audience really, for techies like you answer would be that i am working in the VoIP domain as an asterisk developer using c# wrappers and for others its going be to be like i handle calls on computers : p

  • coder.slynk

    I have to disagree. The reason there is a distinction is because a “software” developer can take on more responsibility than a “front end” developer. Sure a front end developer is more than welcome to call themselves a software developer to try and increase their salary, but they better be prepared to whiteboard models, help ensure the backend (whether writing or consuming) fits the needs of the front end, evaluate third party libraries for possible use in minimizing front end work, etc. I know plenty of software engineers who perform all of the above tasks while focusing mostly on front end work.

    The more broadly you label yourself the more flexibility is expected of you in your job. If you can only write CSS, then don’t lie to people, just call yourself a front end developer / designer. If you are only comfortable with LAMP, or some similar stack, call yourself a back end developer. If you are only comfortable with web site development, call yourself a web developer. If you believe you’ve learned enough through your studies or through your career that you can start finding solutions to abstract problems that your typical product manager could not technically define, then it’s probably safe to call yourself a software engineer.

    This isn’t to minimize your niece’s work. That’s awesome. It’s a start in the right direction. But she isn’t learning computer science most likely, unless her teacher is presenting javascript in a unique light. By your article’s broad definition, someone in finance writing excel functions is a software engineer… There has to be more criteria than “someone types on a computer to make it do things. ”

    • wa1gon

      I am a full stack developer. I am much better with C#, Java,C/C++,ASM and other backend tech stack, but doing a lot of JavaScript using Angular and Aurelia of late. Really poor at UI.

      Coding is taking a concept and writing code that the computer will turn into output. It doesn’t really matter if the code is ASM or HTML5. It is instructing the computer to take action based upon code.

      HTML has always had conditionals in the form of attributes, but now with frameworks they have ifs and loops.

      UI folks (which I am not one) must know a fairly complex languages, but also have a real talent for visual and usability.

      To claim that someone programs only with HTML/CSS isn’t really a program is wrong. I would like to see some of backend programmers that look down their noses at UI programs and write a professional web page.

      • coder.slynk

        I’m not looking down on HTML/CSS, it’s something I fully admit that I struggle with. But to claim a front end developer can do what I do is misleading, just like it would be misleading to say I can do front end design; I “can”, but it would look awful. I’m just saying you shouldn’t lie and misrepresent what you are comfortable doing. HTML/CSS by itself isn’t a program. Without interacting with a server side component, or scripting heavily client side with something like javascript, HTML/CSS can only be a view, not a program.

        The difference for me is that while a software developer may have domains that they are more comfortable with, they can, given enough time, move domains. I started as an Android Developer. Very focused. I then started doing OpenGL for photo filtering. I went to another company and started writing a portable C++ library to do optical character recognition (while still writing Android code.) I wrote python scripts to automate 2 months of manual labor down to 2 days. I wrote our mobile backend in Go. I completely architected and implemented a cross platform DRM solution for our library (client and server side.) I wrote various POC machine learning scripts to leverage our massive data set and now lead our machine learning initiative. Etc etc.

        I’m not suggesting that one is better than the other. Being focused has its benefits. A great specialized developer will stay ahead of their domain, always understanding the bleeding edge advancements. That front end developer will know the minute something in webkit is broken and will work around the bugs. I, being without much in specialization these days, would have to wait for a bug to come in and then research it, taking me probably 5 times longer, or more, than a specialized developer.

        But if you tell a company you’re a software engineer, and you can’t or won’t explore domains outside your current understanding, then I’d be prepared to be let go eventually. Tell your employer “I’d be more comfortable with the title and job description of Front End Designer” and then be the best damn Front End Designer that you can be.

    • Jen Looper

      So, I know where to seat you if you come to dinner :D.

      I do disagree with you on your narrow definition of what a Software Developer is. In the U.S., where we don’t have the kind of canonical, institutionalized vocational training that Canada has, we have both the freedom and the burden to define this profession for itself, as it evolves. I do try to avoid the words “just” and “only” when talking about the works of professionals in the field, because that minimizes what they do, and there’s no point in doing that IMO. From the responses to my poll, I find that most people call themselves Software Developers whether they specialize in front end or back end development, and then define in what domain they are specialized.

      What I think you are saying is that you would like to narrow the definition of what a Software ENGINEER is. I’m trying to put some parameters around what a Software DEVELOPER is.

      I don’t have the training of a Software Engineer (I have a Ph.D. in French, long story…) and had to train myself in a meandering career path that included 15 years as a Web and Mobile Developer. I couldn’t sift through an algorithm to save my life, I don’t have the training and never had the need to use them. That’s why I previously (before my current position as DevRel) called myself a Software Developer. Again, I’m avoiding using the term Software Engineer, but rather talking about Software Developers (thus the title of the article), which most people of all stripes in this field embrace as their overarching professional title.

      I do think that, if there is someone in Finance who, day after day, writes Excel functions (poor thing, I hope they have mental health coverage) then, yes, they too could call themselves a Software Developer. Maybe we should have another hashtag, #ILookLikeADeveloper

      • coder.slynk

        I’m entirely self taught myself. I started with Android application development, moved on to android libraries, portable OCR libraries in c++, backend work, DRM, massively parallel python scripts using AWS lambdas to spawn thousands of workers to explore solutions, on to machine learning now. And I’m only 5 years in to my career. I don’t think a degree or official training has anything to do with the discussion. I’m also less interested in the distinction between “developer” and “engineer”. It’s the “software” distinction that I have a problem with.

        It’s one thing to simplify the discussion of what you do for a living to your relatives, way easier to say “Software Developer” than to explain the many domains I’m responsible for, most of which my non-technical relatives wouldn’t even understand; that I have no problem with. But you also implied that it is ok to mislabel your skill set on a resume or while applying for jobs:

        “To add another wrinkle, it seems that the terminology used can directly impact your perceived value in the field, and thus your salary. Why call yourself a Web Developer for a median income of $65,000 when you can be a Software Developer for $98,000? Words matter!”

        A Web Developer, and a Software Developer get paid differently because they have different responsibilities and expectations from their employer, as well as those positions have different levels of supply and demand. I can’t call my self a Software Architect just because they get paid more, I have to perform the responsibilities of an Architect to label myself as such. Broadening the definition, in relation to employment, will make it that much harder to filter out candidates, and on the flip side make it that much harder for candidates to find jobs that match their skill set. If every position becomes “Software Engineer”, then good look finding your next job. Have fun reading every description for every engineering job to find jobs that match your skill set… It’s way easier to google “Android job” or “Front End job.”

        And good luck to that person in Finance labeling their position as “Software Developer” when looking for their next job. I just don’t think you’ve fully thought this through. As you said “Words Matter!” Diluting meaning just because the meaning is already too loose doesn’t help anyone. It doesn’t help your niece. Who cares if she’s considered a “coder” or a “front end designer” if she’s happy with what she’s doing?

  • Eo Raptor

    Just to go back to your opening couple of paragraphs, your “older-school” relative is what is known as a curmudgeon. Your niece said she was learning to code. To that end, she’s doing some stuff, maybe with JS, HTML, and CSS. Your curmudgeon says, “You’re not a coder!” Great way to foster the next generation of software developers, and impose stereotypes on impressionable minds.

    The rest of the article, and most of the comments address what we developers call ourselves… after we’ve learned how to code. Not the same thing.

    • Jen Looper

      Well, to be fair, the red wine was flowing, and my niece wasn’t present. The first part of the article inspired the second part of the article.

  • rockaUniverse

    I think you have a lot of names and loose title because the software development industry lacks standards to the core. It’s like a wild jungle where anything goes and it shouldn’t be that way. There should be clear definition of title and what exactly it means to be a software engineer vs developer vs coder vs programmer and so forth. You don’t find these things in well established professions which values the importance and responsibility when it comes on to professional conduct, competence and responsibilities. Take for example, the engineering profession, there is no way you can truly refer to yourself as an engineer unless you are certified by the relevant accrediting board. You can’t practice as a Doctor if you are not licensed to practice. I don’t see a reason why these standards can’t be employed in the software industry. Often people just learn a programming language and can perform a function or two then all of a sudden they’re developers. You can’t do no such thing in other respected professions.

    • Jen Looper

      I 100% agree with you. I would like to see a proper path for vocational training here, other than slamming through a boot camp, as a road to professionalization. You are absolutely correct. On the other hand, do you think it would stifle innovation if we required everyone to sort through titles and certifications before working professionally as a developer? I don’t know the answer to this.

      • rockaUniverse

        I think it would make the field better with people having those standards and rigors to go through before becoming formalized as a developer. When one has to make these efforts in meeting these standards, it shows a high level of seriousness in the field and establishes professional standards that not even employers can go around. Getting this formal acceptance or certification and licenses are mean’t to establish qualification and competence as a practitioner in the field. In fact, I see more innovation through the establishment of these standards since we would all have professionals working under the same body to build standards for everyone to adhere to. We would have greater consistency and makes it easier to train and groom next generation of professional software developers. Without these standards, much of our efforts are spent doing unproductive things like getting excited about the next new language or new stack instead of doing what really matters which is solving problems.

        • coder.slynk

          I’m a bit weary about this line of thinking. If it were free or fairly cheap to earn your certification and there were free or cheap resources for self study, then sure. But requiring a 4 year degree, or charging someone $1k to take a test will do some pretty severe harm to the development community, in my opinion.

          • rockaUniverse

            I agree that the cost can be ridiculous because the institution set up for professional advancement should not be about cost but about establishing professionalism so that right people can do the job. At present, John, Tom and Harry could just read a book, build something cool and all of a sudden they are engineers. It can’t be that way and that is the reason why only 30% of all software projects are ever successful. I’m not saying that everyone has to do a comp sci degree or go to school but everyone must meet some minimum requirements to be eligible for the title of engineer, developer and so forth.

          • coder.slynk

            Well even if you obtain certification, it doesn’t mean your project will be successful. I’ve met some pretty awful developers with 4.0 GPAs from stellar CS programs. And I’ve met amazing devs that are self taught. I’m self taught myself, so I suppose I’m a bit biased. But when a CS college grad interviewing for a position on my team can’t tell me what a thread is, let alone a basic application of a thread, then I have no faith in certification (this actually happened, and more than once.)

            I on the other hand, probably have studied more than your average college student, though you wouldn’t know it without talking to me. I’ve read Knuth’s “The Art of Computer Programming.” I’ve read the gang of three, the red book on algorithms, and countless other top notch books. But you think the fact that someone like me hasn’t been “evaluated” means my projects are more likely to fail? I’m not even sure the reasoning behind that thought process. In my experience projects fail because of management. Because the vision for the product sucks, because not enough time is invested in technical debt, because management cares more about delivery speed than quality. I’ve never heard of a project collapsing because the code base was developed poorly…

          • rockaUniverse

            Certification is a show of competence and does not necessarily equate to a perfect world. Professional engineers have failed, doctors have failed and they are all licensed to practice. Licensing is for the purpose of demonstrating competence and that you understand both the theory, concepts and their application as well as a show of competence of how experience the individual is. That’s the reason it requires 5 or more years before you can be professional engineer because it is considered enough time where you’ll get the exposure and the necessary experience. Certification has little to do with going to school, if any at all. It just means that you have been exposed to the right people who know the right way of doing things. Without the right way of doing things lead to failure, not necessarily management. Plenty of times we read books and are self taught but ended up making permanent bad habits because we weren’t given the exposure or the necessary training to be aware of right methods and tools. If one claims to be self taught, then he/she must be able demonstrate competence that he/she is in fact trained enough to be a practitioner.

          • coder.slynk

            I just don’t think it’s that simple. There is no all encompassing curriculum that one could test for that says whether someone is trained enough to be a “developer”. The skill set is different for every area of development. And what you need to know any given year to effectively do your job changes. Web development today is vastly different than it was even 5 years ago. New disciplines pop up every year.

            The industry isn’t stable enough to have standards. And I’d argue that such standards only matter in specific scenarios. Such as writing software that makes decisions about medical treatments. Why do we need standards about what sorting algorithm to use in order to hire someone to write some random photo sharing app? Does it really matter if it’s inefficient?
            Doctors and Mechanical engineers need standards because otherwise people can die… We usually don’t have that problem in our field.

          • rockaUniverse

            You just touched on why it is even more important to have standards when you say “The industry isn’t stable enough to have standards”. The industry is not stable and has not been stable because it started out as a jungle to begin where each and everyone can do as they like to their own accord. If standardization has existed and the the professional body had come together to address the problem in one accord, there would not be an unstable industry. Being not stable is even why there is a need for standardization.

          • coder.slynk

            I think the industry is better being unstable. We iterate really fast. Like the difference in software now as apposed to 10 years ago is incredible. You start throwing standards in to the mix, welcome to a stagnant industry. I actually work as a software engineer in the health care industry. Do you know it takes, on average, 8 years for health care companies to implement new tech? That’s insane. And I’m not talking about the stuff we should clearly be slow to adopt, like treatments. Health systems can’t get their shit together to use the vast swarms of patient generated health data. The ideas are already here for innovation, we already have some amazing ideas for how to make large leaps in health care, but getting anyone to jump on board takes an obscene amount of discussion. You keep saying it’s a jungle and we need standards, but I haven’t heard a compelling reason why standards would benefit the industry. What do we gain for slowing our progress?

  • Steve

    A blue-collar worker described themself to me as a driller-setter-operator. That level of detail would make my reply 6 A4 pages – coincidentally the length of my resume, as you would call it. It’s spread messily over 50-odd years and still going strong. I have coded in several dialects each of assembler, basic, fortran, cobol, C, java, php… and I learnt SQL when it acronymed “Simple” Query Language; Hail to thee, blithe language/”Structured” thou never wert!
    I specified, coded, debugged, tested, implemented, supported, sold, marketed, even – incredibly – documented, but never set software to music.
    I’ll just stick to “programmer”.

    • Jen Looper

      I’m sorry but if you haven’t set software to music, you can’t call yourself a programmer 😀

      • Steve

        JenLooper: NOP
        GOTO JenLooper

  • Marc Clifton

    A software developer is someone who does not create an unreadable blog post by allowing embedded tweets that results in a reading nightmare. 😉

    • burkeholland

      I love embedded tweets. Adds more context. Aside from that, the article stemmed from a Twitter Poll so it’s a tad unavoidable. Either way, sorry it didn’t work for you.

    • daf

      An elitist is someone who has to find some way to diminish the accomplishments of others to feel better about themselves. Like coders who insist others aren’t coders because they didn’t do it in the Right Language or with the Right Algorithms.
      View must be nice on top of that high horse.

  • daf

    If you write code, you’re a coder. You could be more too, just like how if you drive a car, you’re a driver, though you can be more than that label. And you know who #LooksLikeAnEngineer? Everyone who is busy making new stuff or wants to do that, across different fields and disciplines. I still don’t get why that subway ad made people lose their minds. Quite plainly, it shows an engineer who has a pleasing face to look at for an advert (unlike mine). People are strange — especially NTs.

  • Brian Preece

    Here’s a definition of a coder: if you laugh at this blog, but know it’s true, you’re a coder: http://www.stilldrinking.org/programming-sucks

  • Tessalator

    I call myself whatever it says on the job posting.