I really don't know where else to ask. So here it goes.
I'm working at a very tiny company that makes ERP software and websites.
1 developer with + 10 years experience.
2 developers with + 3years experience.
3 developers with + 1 year experience.
No team, no DBA, no system admin.
There is no one around here who has expertise in web development, so I happened to be in charge of web development. But I've only got 3 years experience ! as a developer !.
I know in a small company, you are asked to do lots of different things but is it too much, if I have to do sysadmin, database architecture, software design and development ? Oh plus I'm asked to do all that across different platforms.
I am currently working with JSP, ASP, MSSQL, MySQL, Oracle, Windows Server, and Linux.
In database, I do from writing queries to backup & recovery.
Server setup, system crash recovery, DB & Server migration also.
Number of projects that I'm in charge of : 5
I'm not an expert at all of them !
I have to search the Internet, read tutorials and ask questions in StackOverflow to get all that done !
So I ask you, is this normal ?
Is this a normal practice ?
Will I face the same situation whichever small company I go ?
I'm working in South Korea.
How is it in your country ?
P.S Thank you all for your opinion. I was going to upvote all of you because all of you helped me see it in a different way, but apparently you need 15 reputation to upvote :(
In my experience, yes, it is perfectly normal for developers in small companies to be expected to cover a broad range of roles. It is certainly normal for a company so small that it only has three developers to not have a specialized DBA or sysadmin.
However, I would find it unusual for such a small company to use such a broad range of technologies. JSP and ASP? Windows and Linux? SQL Server, MySQL and Oracle?? Usually, small companies will focus on one technology platform to avoid spreading themselves too thin.
If your work involved full-stack development on one platform - e.g. ASP.NET + SQL Server + Windows, or Java + Oracle + Linux - would you still feel overwhelmed?
Anyway, if you want to specialize to a greater extent, yes, you should look to larger companies. The bigger the team, the more plausible and beneficial it is to have specialists.
From experience I can tell that live as a software developer varies widely based on the size of the company you're working in.
Smaller shops tend to require more multi-tasking and taking on multiple roles, while large companies usually have very strictly described role for each person.
One extreme being a one-man-show, where you (obviously) have to do all the work, whether it fits into your strong areas or not.
The other is the big, multi-national company with several locations in your city alone: here you tend to have a precise position description which tells you exactly what you're working on.
Similarly, I assume, it also varies based on your exact area of business and geographical/cultural location.
In your enumeration of the tasks a developer has to do, you may also put:
- Interaction design,
- Visual design,
- Requirements gathering,
- Testing and QA,
- Project management,
- Team management,
In essence, this is the difference between a programmer and a developer.
- The job of a programmer, no matter how skillful, is to write code, eventually thinking a bit about the different approaches (i.e. preliminary design).
- The job of a developer is to be able to run a small or a medium-scale project, which requires a much broader (and so at the same time shallower) knowledge.
In order to overcome the fact that a single developer wouldn't be able to know as much as a single person who spent years learning only one thing, projects are done by a team. This is how projects are (or at least should be) organized. Most of the time, a small project doesn't require too much skills in any domain, while larger ones do.
- If I screw up, as a developer, with security of an e-commerce website of a tiny company, well, it's bad, because the company may lose a few hundreds or, rarely, thousands of dollars, but not critical. If I screw up with security or a system which controls air traffic, that's really bad.
- If the interaction design of the internal accounting software product done for a small company and used by only two accountants who work there is bad, again, this is not too harmful. If the interaction design of a new Apple product is poor, this may have important consequences on the sales and the reputation of the company.
This means that by working in small companies on small-scale projects, you'll often find yourself doing lots of things. Those companies just can't afford specialists in all of the hundreds of sectors related to IT, so they look for a jack of all trades instead.
Start working on large projects, and you'll see that your role will be narrower, while being deeper at the same time. Your whole work may be to write CSS code, but you'll be required to know any CSS quirk and be able to style a web application very fast, based on the work of a visual designer. You would have no excuse if you can't explain the benefits of Sass compared to LESS or if you don't know what CSS sprites are.
It's up to you to pick what you prefer.
- There is nothing bad in being jack of all trades, especially since it allows you to be flexible enough: if there is a demand for system administrators, you have the skills. If, a few years later, nobody needs sysadmins, but now, web developers are paid well, you can apply as well.
- There is nothing bad in focusing on a narrow field neither. If you have a deep knowledge of a field, large companies with lots of money can be interested in hiring you, because there would be few specialists of your level of skills.