Agafonov Slava Digest about software

Senior developer

What is a "Senior software Developer"? It is a person or organization concerned with facets of the software development process. They can be involved in aspects wider than design and coding, a somewhat broader scope of computer programming or a specialty of project managing including some aspects of computer software product management. I hear that term quite a lot recently, but the meaning is not always the same in different companies. For me, a senior developer is someone who has more responsibility compared to other developers. As it turns out, for employers it has a completely different meaning.

In big organizations (such as banks or trading corporations) there are two types of developers: "regular" developers, allowed only to code, and senior developers, doing also designs and architecture. Working on design as a part of the job definition may look trivial to someone who never worked in such a company, but it's not the case in those organizations. This type of work demand understanding UML tools, patterns, best practices and SOLID principles. In small companies entire development team in such company may be composed of "senior developers". If you take the second definition, I think that after you have been a developer for a while (let's say 5 years), every position you filled and every position you are looking for can be said to be "senior", depriving the term of all meaning. But it depends on type of your work, your responsibilities and your character, because some people don't like to be responsible and answerable on job that they done.

Senior Develop pyramid

What makes a developer "senior"?

Who is senior software developer, programmer,  engineer - it is a tricky question. In many industries, a senior level position is based mostly on the length of time that person has been working and maybe a standardized test or two. But  what exactly defines a “senior developer”? This is something that I have been wrestling with for the last few weeks. The more I go through the hiring process , the more I have to ask myself this question. I know some of the general characteristics and responsibilities, but the details are driving me a bit nuts. And, it makes a difference because job title drives not just salary but also future career opportunities. Someone may be doing “senior developer work, but if they want to be a computer software architect, it may hurt them not to have the title. On the flip side, if I am told that we are looking for a “senior programmer, and the person who I think is right for the job is not one, I have not made the right decision. Here are some of the basic qualifications that a “senior developer” should have: 10 years of experience in the programming field (although seven or eight may be enough depending on what they have been working on), a rock solid understanding of theory, beautiful IDE knowledge’s and excellent debugging skills. They also should be able to: work closely with the computer software architect to suggest improvements within the overall vision for the project. Questions at the architecture level and not at a low implementation level are really important. Experience on serve as a resource and mentor for less experienced developers such as junior or middle. Person should also be able to trust him or her to transform a set of class diagrams into quality code with little oversight. A “senior developer” should not require handholding. But is it better to have, for example, a “senior engineer” with four years of VB.Net-only experience and eight years of VB-only experience before that? We can imagine that 12 years of working with VB certainly has made that person a VB/VB.Net expert and he knows what the best practices. On the other hand, someone who spent those same 12 years bouncing around Java, C++, Perl, VB.Net, Ruby and C# has had a much wider range of experiences to draw upon and it is a big problem in Soviet Union countries.

That means the former route holds many advantages as well. Also, does someone who spent equal time on traditional client/server apps and Web-based apps have the same weight as someone who spent the same time working exclusively with Web-based apps or mobile applications? The client/server person has exposure to solutions to many of the problems that animal Web apps, but the Web-only person may have a unique insight into the bizarre oddities of Web development HTTP protocol (for example PHP, JSP or ASP.NET developers). Again, there is a tradeoff between a specialist and a generalist, both with equal lengths of time in the industry. I would love to be able to ignore the self taught versus formally educated aspect, and we usually do. We have been able to simply verify that candidates have an appropriate amount of theory which weeds out both the self-taught guys who learned too many bad habits and the people who slept through their degree. The last major hurdle are people who have spent enough time in the work force to be considered senior but who have never worked on anything more complicated than a simple CRUD app. This is a tough call for me. For all I know, they have been so deep in that simple CRUD app that they know their stuff inside and out, even though their project does not really express it. On the other hand, there are people with experience that is indirectly related to programming and yet very helpful. For example, I have found that my time spent as a systems administrator and doing networking has been vital to debugging many applications, particularly on the deployment end of things. How does non agile software development experience fit into the “senior developer” position? Leaving all of these other considerations aside, there is the matter of personality. Am I willing to put up with someone who has less than an agreeable personality but has amazing tech skills? Or do the leadership responsibilities of a “senior developer” allow for someone who is a “good fit” as a person to offset a technical shortcoming? I do have my own idea of what makes up a “senior developer.”

First of all, what’s the difference between a senior developer and a junior developer or senior developer and middle developer? Is it merely the number of years of experience? In previous client engagements, i’ve seen more than my share of bad developers who’ve had years and years of experience, because they so lazy. Would i trust those developers more simply because they have the experience required to be called ’seniors’? Certainly no! Trust has to be earned, i don’t care if you just graduated or if you’ve been writing code for 5 years or more. When i have to work with someone i’ve never worked before, i assess this person’s qualities and capabilities on two things: how he thinks about writing code (in general), and how easy he can pick up new concepts/practices/principles. That’s it. A junior developer with little to no experience can often be a lot more valuable than a developer who has 5 years of experience under his belt and just assumes that he knows it all. With a senior developer, you have to be lucky that he’s learned from his previous mistakes (and every developer makes mistakes, no matter how good he is or how much experience he has), that he hasn’t picked up too many bad habits and that he is open minded. If you can get a senior developer like that, consider yourself very, very lucky because there really aren’t that many of them. With a junior developer, you can easily mold them into the kind of developer you want them to be. They haven’t really had a lot of time to pick up bad habits, and they are eager to prove that they belong at your company so they will be very eager to learn and improve. All you need is a couple of people who are willing and capable of teaching these young developers. Of course, with junior developers we do have to live with the fact that they will make rookie mistakes and this is okay (mistake can learn person something new). You have to review their work a bit more, and make sure that they learn from their mistakes. If we do this from the beginning, we quickly notice that the extra reviewing tasks will soon take up less and less work.

What does "Senior Developer" mean to you?

What makes a Senior Developer? Could it really be that several years of being a manager have really allowed me to delve into the core of the human psyche, separate the hard skills from the soft skills, and know what it really means to be “that” person? A Senior Developer is more than just a developer. They encompass several traits and abilities that make them very important to small and large projects alike. They are looked at as a skill centre, teacher, standards guru, and programmer all at the same time. The catch is to ensure that a Senior Developer is anointed appropriately — bestowing a Senior designation without due diligence is just asking for trouble. Hard Skill vs. Soft Skill Ok, let’s get this elephant out of the way first. Any job, and I don’t care if it’s building video games or sewer maintenance, medical computer software, custom software development, agile software development, small business software development, requires two key skills. The first is the “hard” skill — the one needed to actually perform the task at hand. Different jobs require different levels of hard skill, and some of them (for example brain surgery) require a lot more skill than others. The other key skill — “soft” — is what allows you to interact with others, to see yourself for who and what you are, and assist you with your growth and education
(with ego removed). The former, for most people, is easy. The latter is the one that a lot of people fail at, and percentage of such is bigger. You know those people: the jerks, the guys who yell at others, the people who “don’t listen others”. Soft skills are hard to learn, and are almost always what hold people back. And no, this is not a trivial point for everybody. Hard skills are needed to be able to manage the work, and soft skills are needed to manage the people. A failure on either is a failure of the whole. Programmer needs to have near god-like understanding of their given programming environment, nice IDE or something like this. This is because the Senior Developer is often the key resource for that environment, and the one people will look towards to set precedent.

    * Know a dozen different ways to implement (and know which one is the best approach) different best practices on each solution for application development
    * Know the language’s methods, syntax, structure, parameterization, memory leaks, and looping methodologies without the need to regularly consult the documentation
    * Know the best practices for development with authority, but not just offshore computer software or outsourcing software
    * Know when a framework is required, a nice-to-have, and when to avoid, what libraries can be used, what unit tests and what environment

To some degree, I also encourage it, because that Senior Developer should know more than I do about their given language, and he want to express that knowledge. Understand External Dependencies in world, technologies and software methodologies and software management. Just because you can reproduce a complicated Photoshop design into HTML, CSS, and JavaScript means nothing if you can’t get the design to work with the equally-complicated database. The trick here is that we don’t need a Senior Front-End Developer (be they masters in Flash or HTML/CSS/JavaScript) to also juggle the backend processing tasks, really difficult and strong skills required. But you’d better expect that we need that the developer understand the process for passing requests to the backend, and how to handle the backbend’s results. Similarly, we expect the Senior Applications Developer to know what sort of information he should expect or need, the APIs or ASPs he can use to implement  the solution without having to write the entire thing by themselves, handle database requests without necessarily doing the database work themselves, and the best way to return a result to the front-end. Senior Database Developer shouldn’t care about the presentation of data, only the best way to organize it to provide optimal normalization and long-term data management, the correct methods to store and recall data via stored procedures, views, queries. This also assumes a more granular breakdown of tasks, and having the people available to handle said tasks and make good estimates. Naturally, smaller places will combine roles into a single person. Solutions Design for Senior Developer can adequately specify the pieces of the puzzle for which they are responsible. Furthermore, they should know how those pieces break down for assignment to others, if needed, the time it should take to develop those pieces, and ensure that the pieces will integrate. Good of software project management required. Review of code, planning, historical estimates, metrics on the project deliverables etc.

 

Rarely will a Senior Developer work on their own, fair communication makes huge impact. Almost always, we need to work with others on their team: junior developers, project managers, and creative staff like designer. All of these people require the same amount of respect, even though the messages will differ between them, especially geeks programmers. This is often a major failing point for people who think they are Senior Developers, but have not yet been granted the title by their company or organization. Inability to communicate properly leads not only to breakdowns in communication, but can cause personalities to clash, further muddying the waters. Technical mastery means nothing if you’re a jerk to others — it means people won’t want to work with you. People who fail at communication often believe the problem is not with themselves, but with others: “I told them what they needed, it’s not my fault if they didn’t listen.”  The real test is convincing someone else of what you want to do. The inability to convince someone else is not a fault with the other person, but yourself.

    * Junior developers need a mentor: a resource and a teacher. Someone who will help more junior staff see mistakes and learn from them, who will help people with difficult problems, all the while not talking down to a weaker skill. This mentor should be much more experienced for resolution of controversial questions.
    * Project managers require concise communication that does not involve a blizzard of jargon. Project managers rely on numbers: estimates, dates, times, milestones and metrics.
    * Creative staff think in pictures and possibilities, whereas technical minds live for logic and limitation. This people can live together very easily, designers are big community. This people keep an open mind and give each idea the respect that is due. Communication between designers and developers can be really funny sometimes.

Consistency in project deliverables

A key trait amongst Senior Developers is consistency throughout their work. Opening three or four random projects reveals the same programming style, the same general approach, the same naming conventions or architecture. A Senior Developer influences these same traits amongst those on a team, ensuring the entire team’s deliverable contains similar consistency on the best
company practices. This is not to preclude change. A good Senior Developer is also a researcher, always looking for better ways to handle a given problem or better architectural solution.

Responsibility Accept on each task

Being a Senior Developer means taking on the responsibility for part or all of a project. This person who’s being asked to deliver something, and possibly lead others in that delivery like a mentor. Ultimately, if something goes wrong, it’s you who made it that way. “It wasn’t my fault” isn’t something you get to say anymore, even if you handed that task off to a junior developer. When your project manager / lead / boss comes knocking, you’re the one who has to stand up and explain what happened, what was the real problem of delays. One key aspect of responsibility is someone’s trust in you to handle something. Shirking responsibility is the same as saying: “you can’t trust me”. Open-Mindedness Finally. Earlier up, I said I want a Senior Developer to be egotistic (to a degree) and tell me what they know. I still want that, but I also want to eat my cake, too. I won’t expect a Senior Developer to be immediately open to other ideas, but I do expect recognition. As the Senior Developer progresses to higher roles, open-mindedness becomes a significantly more important factor. This also helps prepare the Senior Developer for one inevitability in life: even if you have all the chops, it doesn’t necessarily mean you’ll get the meat. Senior developers are always think how to spend less time on meetings, but always say "I spend half my days in meetings" about how to get more work done, but they can make this work done without this meetings at all.

Summary

What do you think about term "Senior software Engineer"? What is make developer senior? How middle programmer can promote himself to senior?

Advanced techniques take time to learn they are harder to understand for those who haven’t mastered the topic yet, nonetheless, they save time and overall make the code better, thus, complex code is worth it, even if it has a “learning curve” or looks “nasty” to the uninformed.

  1. Promote SOLID principles with your team members
  2. Produce code that you would like to maintain, code is extensible for changes and for growing
  3. Write Testable code (functional, unit tests)
  4. Apply design patterns when they fit the problem (best practices of pattern usage)
  5. Don’t fear teaching moments (conferences, meetings with your team)
  6. Participation in software release and post-release  activities, including support for product launch evangelism (e.g. developing demonstrations and/or samples) and competitive analysis for subsequent product build/release cycles.
  7. Software research and development on new technologies with new tools
  8. Developer need to be self-motivated for growing.

Comments (5) -

  • Supra TK Society

    9/4/2010 6:55:18 AM | Reply

    You know that they say "practice makes perfect". Pretend that you are rich and you will become rich. Do you think so?

  • kos

    9/4/2010 10:16:16 AM | Reply

    Self motivation is really important. You can always achieve cool results if you know what to do. In software development nothing depends on your money or your luck, much more depends on your character, hard work and your personality.

  • Mozoot

    2/4/2011 11:24:04 AM | Reply

    Very interesting post! Thanks for sharing an informative post.
    I really enjoy read this.. Thanks.

  • Flooding Austin

    10/20/2011 8:30:41 AM | Reply

    Hi,

    I personally ambition to be a developer and work for big company like Microsoft. I admire you for being one of the best developer and make you as my inspiration to reach my dream. Smile

Add comment

Loading

Copyright © 2018 - Design by FS