While perhaps easier to get into than it should be, software development is a difficult and demanding field to be successful in over a long period of time.
A lot is asked of software developers as we are often given nebulous business requirements and asked to make a functioning system.
In our experience, here are six traits all successful developers seem to poses.
1. Pupil
For a developer to be successful over any period of time a continued commitment to learning is absolutely vital. The field is too large, too quickly changing, and too in depth for any developer to ever “know it all.”
Luckily there are a lot of resources a developer can use to learn; books, co-workers, classes, blogs, online courses, among many others.
We have found one of the best resources for learning has been your co-workers.
Books, classes, and most online resources are largely impersonal and geared toward large audiences, they simply cannot provide the help that a co-worker familiar with your issue or habits can provide. Which leads us to the next important trait…
2. Mentor
As a software developer understands he does not know it all, he will also realize that this same quality exists in all developers.
It is important for every developer to act up this knowledge and be willing to help other developers learn.
It is particularly important when dealing with junior developers, those fresh out of school.
Often these developers know just enough to be dangerous and do not realize this yet, so it is important to teach junior developers good practices, to prevent them from picking up (and potentially propagating) bad practices.
There is a responsibility in being a mentor and that is ensuring the knowledge being passed on is good.
Mentors who take this responsibility seriously however end up helping themselves just as much they help others.
In order to understand why a practice is good a deep understanding is often required and understanding the fundamentals of a concept in our experience offers the most benefit.
3. Flexible
As alluded to under the pupil trait, software development is a rapidly changing discipline.
Developers must constantly be looking at and reviewing their practices to see where improvements can be made. Much of the time the improvements are small and incremental, but occasionally entire upheavals must take place.
A developer must be willing to accept that one day practices and technologies once relied upon have become obsolete and entirely new technologies and practices must be learned.
Clearly this isn’t an endorsement to blindly jump on every new trend, but to be aware of how the industry is evolving, familiar with the emerging technologies and practices, and willing to learn them should your job or the industry demand it.
4. Tester
Testing isn’t simply a responsibility of the QA team. It is a core responsibility of a software developer.
Testing isn’t just part of the development process, but even the design process, from both a business and system perspective.
The system perspective is somewhat obvious, but testing can also play a role in change business requirements as well; scenarios could be discovered that were not previously accounted for, or a technology may be found to be inadequate to meet business needs.

Testing, specifically unit testing, is also an important part of writing quality and maintainable code.
In the same way a structural engineer writes mathematical models to test his design and eventually creates scale models, a software developer writes unit tests to test his code.
Unit tests give a developer instant feedback on rather the changes made broke the system, or fixed an issue. Just like it is a responsibility of a mentor to pass on good knowledge it is the responsibility of developers to write good tests.
Good unit tests replicate real world scenarios as well as hit fringe scenarios and negative scenarios. Obviously such a task would be extremely laborious to write for an entire system, so it is important for developers to recognize when this practice must be applied.
5. Farmer
Just as a crop is a farmer’s livelihood code is a developer’s.
A lot goes into growing crops, a farmer must; pick good seeds, ensure the fields are fertile, and be ever vigilant against pests.
Similarly it is every developer’s responsibility to; ensure the code he adds to is of good quality, ensure there are ways of monitoring it’s continued quality, and remove bad code when found.
6. Reporter
Every so once in a while a picture comes along to perfectly describe a point.

Few things are more infuriating to a developer than to be told there is a problem and given no additional information. It considerably increases the time turnaround time to fixing an issue (if one actually exists) as a developer must track down what he thinks is the problem.
This issue isn’t just relegated to when a problem arises or just non-developers (which is why this trait is included).
As a company grows its developers become increasingly specialized and responsible for individual systems within a collective whole.
Before asking a question a developer should read up on a system’s documentation (a lot of times a question need not be asked), good questions lead to good answers and ultimately a lot less frustration on both sides.
Conversely a developer should also provide good documentation on the system(s) he is responsible for.
So there are six traits every successful software developer should have.