The first thing, which comes to mind, when someone is telling that he is working in the software development industry, is programming. Obviously, programmers have realized the same thing. However, programming is not the only job in the software development industry. It is not even the most important one. This blog entry is written to justify my opinion. So, if you are a programmer and you feel that you are the most important part of the machine, you should consider following arguments very carefully:
- Without sales, there is no need for programmers. This one is pretty obvious, but sometimes it is still forgotten. If there is no money coming in, there is no money going out either. This means that you are not getting paid. Thus, it might be wise to remember, where your paycheck is really coming from, because in the end, it is not your employer, who is paying your bills. I will give you a hint: If your product or service does not sell, you have to do something or end up filing for bankruptcy.
- Without specification, programmers have no idea what they should do. The key of making great software is to know, what you are expected to do. Thus, you should gather the requirements of the software, and create a specification, which you can use during the implementation phase. Remember that a specification does not necessarily have to be a huge Word document with 200 pages in it. The most important thing is that you know what you should provide, and the customer knows what to expect (Remember that every software project has got a customer. It can be internal or external, but it does exist!).
- Without project management, programmers cannot prioritize their actions. Without guidance programmers tend to focus on tasks, which are challenging, interesting or just plain fun. Unfortunately, since the task selection is a subjective process, the selected tasks might not be the ones, which would be most beneficial for the current project. This is where the project management steps in, and guides the programmers to the right direction by prioritizing the available tasks, which in theory should ensure that the most important features are implemented first (In reality... Well, that is an another story).
- Without testing, no one really knows, whether the software works or not. No one is going to pay for a software, which does not work. So, it is in your best interest to deliver a software that works. And yes, the only way to know, if a software really works, is to test it. A common misconception among programmers is that testing is easy and boring task, which does not require any special skills. That is why testers are not always getting the respect they deserve. Well, I have got news for all programmers out there: First, finding a good software tester is not an easy task. It is actually harder than finding a good programmer. Second, testing is not an easy or indifferent task. It is your last chance to impact to the user experience of the software. After the software has been released, you are too late. All you can do is hope that your QA department has done their job. Remember, you have got only one chance to make that crucial first impression.
- Without data migration from previous system, the new system can be useless. Sometimes having an old system replaced with a new one is justified, but that alone is not enough to make the new system useful. Users of the system are generally expecting that the information stored into the old system is available in the new version as well. Data migration can be tricky and demanding task, which is why it is usually done by integration specialists, who have got experience from transferring information between different systems and solving problems caused by different data models. Remember, if the information is not transferred, it does not really matter how brilliant the new system is. From the customer's point of view, you have failed to deliver.
When all mentioned aspects of a software development work have been taken care of, programming is rather straightforward. However, it does not mean that it would be simple or easy. It is just straightforward. Oh, one more thing: saying that something is not the most important thing, does not mean that it does not matter at all. In the end, programming is just one piece of a gigantic puzzle. Without that piece the puzzle cannot be completed, but the puzzle has other, equally important parts as well.
Without food supply programmers will starve to death.
If programmers are those who only produce the code then your points are valid but I don't think there are such companies where roles are as strict as you present them or if there is, then the world is more Huxleian than I've ever dared to imagine.
Fortunately, in most situations programmers are naturally responsible of other tasks as well as you suggested. My idea was not attack the programmers as a group, but to point out that programming is just one task among others, and that there is no reason to feel that it is more precious than the other tasks. Unfortunately, I have to admit that even I have occasionally felt that programming is somehow more valuable than for instance testing. I am also a bit worried that the outbreak of agile project models will increase / has already increased this kind of thinking. Since I wanted to do something to prevent this heresy from spreading, I decided to write this blog entry, which indeed sees world in black and white.
I must disagree. My naive and young opinion is that coding is or should be the most important thing, if the intend is to produce new software. If the company does something else the situation changes (like they sell or modify new solutions). Agile methods are right on point as they try to bring the focus back to programming. If the company's focus is too much away from programming, developers suffer and it leads to bad software and unhappy workers.
Disclaimer: I don't have much experience from real companies, but each one I have worked, the development has suffered from the same issues: The developers abilities are crippled by other departments of the company.
It was quite hard for me to answer your comment, because I could feel your pain. It is always hard to make that transition from your studies to the real world. Unfortunately, in the real world programming is only a one piece of the puzzle. Nothing more. Nothing less. This does not have to mean that working will make you unhappy, but it might have some additional restrictions you were not aware of.
However, I must slightly disagree with your opinion concerning the agile methods, because I feel that their target is not to increase the importance of the development phase. Instead I think that they are aiming to maximize the productivity of the team, and improve productivity and quality over a longer period of time. I also love the fact that continuous improvement has got a huge role in agile software development, but it also makes me sad to see, how many misconceptions can be associated with it (Unfortunately, one could write several blog entries about this).
For your fist comment
"Without sales, there is no need for programmers"
In fact, without sales, there is no need of project managers, accounting people, directors, coordinators, marketing people, designers, testers, human resources directors ... so your comment is kind of silly.
You should read this:
In response to your points
"Without specification, programmers have no idea what they should do"
"Without project management, programmers cannot prioritize their actions. "
This can apply
" We are tired of being told we're autistic idiots who need to be manipulated to work in a Forced Pair Programming chain gang without any time to be creative because none of the 10 managers on the project can do... Programming, Motherfucker. "
thanks for your comment. It is nice to see that this rather old blog entry of mine is still creating some discussion.
In fact, without sales, there is no need of project managers, accounting people, directors, coordinators, marketing people, designers, testers, human resources directors … so your comment is kind of silly.
I agree that businesses consists of people with different roles which are in a symbiotic relationship with each other. However, this a bit provocative blog entry was written to address the misconception, which claims that software developers are the most important group in a software company. It was not written to talk about project managers, accounting people, directors, marketing people, sales people, designers, testers or human resources. That is why I am having difficulties to understand, why my comment is kind of silly, especially since it seems that even you agree with me on this one. Or were you offended by the fact that I raised the stereotypic archenemy of a software developer to a pedestal?
Also, I have read the Programming, Motherfucker manifesto a long time ago and found it quite amusing.
In response to your points
“Without specification, programmers have no idea what they should do”
“Without project management, programmers cannot prioritize their actions. ”
This can apply :
”We are tired of being told we’re autistic idiots who need to be manipulated to work in a Forced Pair Programming chain gang without any time to be creative because none of the 10 managers on the project can do… Programming, Motherfucker. “
The difference between a junior and a senior developer is that the senior developer understand that he/she is not paid just to produce source code. Developers are paid because their skills are needed in order to produce something which can be used to either save money or to make it.
That is why I am having a hard time of understanding your argument. How can you do professional software development for a living if you
1) have no idea what you should do in order to help your customer to save or make money
2) do not have any idea what features are the most important to your customer
This sounds like a sure recipe for failure.
The part of the Programming, Motherfucker manifesto, which you pasted in your comment, actually discusses about the way how developers should do their job in order to produce value to the customer. I see that as a critique towards the different processes which are commonly used in software development companies.
The million dollar question is: Does this blog entry have got anything to do with software development processes?
I think programming IS the most important job. It is the one task that actually produces the goods. What start up would succeed without a programmer? Can you take a project manger out of the equation, in many cases yes, it depends on scope. Can you takes testers out? I've seen multi million dollar projects go t production on the strength of Unit and functional automated tests, agile methods and some brief user acceptance testing.
Think of it this way, if you needed to get twice the scope out in the same amount of time, who are you gonna call? It's the number of developers that drive the requirements for h other resource types.
Sales people, marketing and what not are not part of the software development industry, but even I they were they would nothing to sell without at least a prototype, written by programmers.
and thanks for your comment. I agree that software could not be build and bugs fixed without programmers. However, in my opinion it is only one role in a software development company. I like to think that each company is based on a symbiotic relationship between people who all have different roles. Of course all roles are not needed in every project, but I still prefer building true collaboration between departments instead of staying in the trenches.
This article is about the software development industry.
Who develops the software?
Is there any software at all without programmers?
No, there is not.
... do I have to spell it out, which job is the most important job?
It's kind of funny that I wrote this blog post almost eight years ago, and I still think that programming is not the most important job of the software development industry. However, during that time I have learned that it's perfectly fine to agree to disagree. Most of the time arguing on the internet just isn't worth it. In other words, I guess we have to agree to disagree ;)
The elements you mention can improve the income, (mostly sales), but only programming is actually required.
Summary: From these, only specification is actually required and only a tiny amount of it, and some consider it is part of the programmers work anyway. And as said earlier, without programmers, there would be no industry. I'm not saying this because I wouldn't value rest of the crew. I'm saying this, because programmers are not really valued as much as they should in this system.
There are also other important roles, like software architect, user experience expert, graph/sound/music artist, technical writer etc. A project with UX expert would win 100-0 a project where such would be replaced with a project manager. The fact that you forgot UX expert or even usability expert from your list makes me suggest you to read "The Design of Everyday Things" by Donald A. Norman.
The idea behind this blog entry was to demonstrate that programming is not the only task that needs to be done. Also, it is important to separate the role of a person from the “official” title of this person (The thing that you put on your business card). I probably did a bad job on the original post since it seems that this separation was not clear to you.
Anyway, it is of course possible that a person whose official title is programmer (or software developer, software engineer and so on) can have different roles at the same time. However, this means that the person is also doing other things than just programming. This means that the programming is one of his responsibilities but not necessary the most important one. If this person would not take of his other responsibilities, what would happen? Exactly. Bad things would happen.
My experience has taught to me that programming is not the hardest part of the software development. The hardest is to find out find what should be programmed. This determines whether a software project (or a product) is successful or a total failure. In order to provide superior value for your customers, you have to know what their real problem is and solve this problem in a superior way. Also, if you are working in a startup, you have to find your customers before you can solve their problem. Programming is a crucial part of this puzzle but it should be started after you know what should be implemented. Otherwise you have no idea whether you are adding waste or value.
The last thing what I want to point out is that you always need to have a specification that describes what needs to be done. This specification does not necessary have to be a formal requirement specification. I think that it is perfectly fine to use post-it notes on a whiteboard as your specification. Actually, you can use whatever method that works for you. However, starting an implementation based on unproved idea is a recipe for failure. Sure, you might up end up being the next Facebook but 99,99% of the companies that works in this way end up in bankruptcy.
please remove bold tag for the subjects like "programmers are dumb'' and highlight last paragraph alone...
I am sorry but I will not do that. Even though programming is an essential task in a software development project, it is not the most important task. On the other hand, the other tasks which I mentioned on this blog post are not more important than programming. All tasks are equally important.
Understand this... I can also say some blah blah points like without programming software industry sucks..
Programmers don't suck, but they are not more important than the other members of the project team. All members are equally important.
that reminds me of the seemingly meaningless phrase "all men are equal but some are more equal than others" at some point some things begin selling themselves but can not create themselves....
In my opinion, All points are true but without the programer, a real good programer, No company can deliver the end product. Programer are not only those you just convert write the code like a story. A Good programer have to think about the algorithm, app performance etc.
Most companies are ignorant about programers, mostly medium ones. they just think, anyone can write code. :@
All areas are importante, but the most important job without doubt is The programming phase, in fact it requires 70% or more in the development process. You are able to replace/put away everything to make a product, but never the coding phase.
I'm gonna point a quote in the book "Code Complete":
"The irony of the shift in focus away from construction is that construction is the only activity that's guaranteed to be done. Requirements can be assumed rather than developed; architecture can be shortchanged rather than designed; and testing can be abbreviated or skipped rather than fully planned and executed. But if there's going to be a program, there has to be construction, and that makes construction a uniquely fruitful area in which to improve development practices"