To all the people who think that software development is similar to manufacturing, my sincere condolences ... not only to these so called thought leaders but also to those who work for/with them.
Software development is not a job a machine can do, you need humans to do that not "Resources!"
Perhaps things like automated code generation tools -- to an extent -- speed up the process, cut the boilerplate and ease up things for you. But to carve out an efficient, maintainable, extensible and bug-free software (in my opinion), you need a beautiful mind!
So, if your company is mainly teeming with machines that follow commands, please don't read this. But, in case you work with a bunch of people who are "only human," this might just interest you.
For a successful software firm, you need people to think, to experiment, to explore, and to play around with stuff. And for that, you need a congenial environment for the human minds to flourish! Of course, when you give people liberty to think and try out new things, you give them power, and with power, yes, comes great responsibilities.
So, how would you achieve this perfect blend of power, liberty and responsibility? And how can you prevent the entry of 'unwanted' elements into your system? How do you make sure that the policies and processes don't get so strict so that they suffocate the employees -- yet prevent them from being too lenient? Well, the answer is, "You can't!" Whatever you do, it's likely you'll never be able to make such perfect policies or processes.
So, what do we do now?
This is where culture comes into the picture. Yes, that's correct, you don't need the right policies -- you need the right culture. So, what is this "culture" and how do we make sure we get it right?
Obviously, there are many definitions of culture -- in fact, here's a great resource that lists several on one page.
So, what are the steps to cultivating the right company culture? Here's what I think the process should look like:
1.) Take a top-down approach: The most important factor that can bring change in a society is its leaders. As such, culture in a company can only be propagated from the top down: If the top management, the CEOs and CTOs do not follow the rules, it’s unlikely the employees will do so. An agile team with a non-agile mindset of management will prove to be completely useless.
People get motivated from seeing their colleagues speak in conferences, commit in open source, give sessions, learn new technologies, follow software craftsmanship principles, write better code. If the senior team members write awesome code, test cases, and encourage innovation and strive for optimizations, it’s highly likely the team members will feel compelled to do the same.
2.) Hire people who fit the culture and company mission:
This step pretty much speaks for itself.
3.) Establish and promote mentor programs: Mentorship programs help in various ways. Usually, it’s easy to identify the people in a company who make good mentors. You can pair small groups of mentees with these mentors. I believe that people learn from examples, so when these groups interact, they can learn from the mentors and each other. They’ll learn how the mentors write code, what blogs or technologies they follow, what they do when they’re not coding and, most importantly, how much they’ve achieved through hard work and software craftsmanship. It’s all about setting examples and making them visible.
4.) Schedule regular knowledge exchange and collaboration: At least once a month, provide a platform to your employees where they can collaborate and exchange their ideas. You could recognize and highlight people who have recently contributed to an open-source project, spoken at a conference, filed a patent or simply learned something new that they’re excited to share.
5.) Offer rewards, recognition and incentives in a positive way: People who follow the principles of the company culture, who write better code, and who encourage their colleagues to write better code, and meet established goals should be recognized and rewarded for their hard work.
Some final points I’d like to add are to: (1) avoid destructive practices, such as hiring in desperation and falling victim to favoritism and to (2) encourage positive practices, such as working dilligently, fostering a positive work environment, promoting thought leadership and setting good examples for fellow employees.
The employees are the biggest assets of a software company and if there’s no established positive culture, the people will just come and go. The right culture not only keeps the right people in the company, but also keeps them around for a longer duration.
Of course, this is all debatable as these are just my views.
In the end, I would like to quote: "Right is right, even if no one is doing it; wrong is wrong, even if everyone is doing it.”
Getting a sense of doing the right thing is what I perceive culture is.