This is part 2 of my article on this subject. I hope you read part 1 before reading this post. If you didn’t, then this continues what I would do if I ran a software company or team.
Top of the Line Computers and Tools
All developers should get a new computer at least every two years if not every year. At the company I run, developers and graphic artists would be covered by this rule. When these computers are replaced, then the old one would be assigned to someone else in the company. At Mitchell International, when I started there, the two developers that worked remote had 5-year-old computers! Developers are expensive, so do you want them waiting around for things to compile etc.? Of course not! Every minute the developer just sits there waiting costs the company money and lost revenue (lost features too).
I have gone to developing in VM in the cloud (Azure) which I have been doing one way or the other since around 2005. There are so many benefits like making base images to help developers get started, backups, adding more memory at the click of a button and more. Makes a lot of sense to do this.
All developer needs tools for their job which can include Visual Studio, source control, third party tools and more.
All of my developers would use Visual Studio Enterprise (since that is what I use) since it has every feature enabled. At a recent company, they would not purchase Visual Studio at all! Everyone (except for me) used the community version. At a software company? That was the first clue that I would not be there long.
Source control has gotten a lot better since I started programming, but are still a pain when it comes to commits and merges. So, using a crappy open source program to save money is not an option! We would use Visual Studio Online with git as the underlying engine. This is the easiest to work with when using Visual Studio. Plus it comes with project management, continuous builds and deployment! All things every software team needs.
At the company I worked at where I told the story about “hell week”, when I started there, they used the worse source control program I have ever used… yes, worse than Visual Source Safe! Every week I lost many hours. Right around that time Visual Studio Team Systems came out and I kept asking if we could change to that and they said no.
After many months of more frustration, I got an idea. I went and spoke to every developer in my department and asked how much time they lost every week and the average was 5 hours! Wow, that is a lot. The company was losing many hundreds of thousands of dollars per year. This does not include feature loss which could lead to customers dropping the program (which happened). Once I presented these numbers to management, they finally got it and switched over to TFS.
Third-Party Tools and Visual Studio Add-ins
To easily add features to your app and produce more stable reliable code, the use of third-party tools and add-ins to Visual Studio are very important. Most companies and teams I work with do not utilize these tools enough or at all. In a recent article I wrote, titled “Stop Reinventing The Wheel”, I talk in detail how important these tools are and how much money they can save using them. Here are a few highlights.
At another company I worked at, they would not purchase third-party products! I was tasked to add search capability to a web page that took me 3.5 days. If I used a third-party component from companies like GrapeCity, Telerik or DevExpress, I could have done it easily in under 3 hours and could have added more features like sorting the results by column. Most of the features of components like this are very little code or none at all (just set a property in the property window).
At the same company that had developers using 5-year-old computers, if they used my favorite static code analyzer called CodeIt.Right, they could have produced more stable, reliable code and save an estimated $3.5 million dollars a year! That is after purchasing CodeIt.Right from Submain.com for every developer. I was the only developer in the company that used CodeIt.Right.
I believe it very important for developers to have what they need in their toolbox. Whether it’s components for UI, tools for code analysis and many more. If you are on an interview, make sure you ask about what tools they use. If they say no or just open-source tools, I would re-think accepting a position there. Check out my “Stop Reinventing the Wheel” article to learn what my favorite tools are.
If I Were in Charge
During my career, I’ve work for great companies but mostly not so great. I’ve seen how to properly run a software company or department and how not to. Below are things I would do, without fail, if I were in charge.
Get the Real Story
If I were in charge, every day I would talk to one or more of the people under me. Depending on the size of the company or department, I would try to get to everyone in a single month and then start the process over the next month.
The purpose of this would be to get to know everyone who works for me but more important is to see how the team is really doing, as opposed to what management is telling me, and also give every employee the chance to ask me a question or give me a suggestion on how to make the company or product better. Every idea given to me would be looked at.
At far too many companies I worked for, the managers would never tell the truth on what is going on in an attempt to keep their jobs. I call these types of managers “Cheerleaders”. They only tell the CEO or department head what they want to hear. This never good for the product or company.
Deploying Code to Production
During my career, I have seen a lot of unnecessary stress occurring in teams trying to push code to production on a Friday or Monday. If I were in charge, we would never deploy on these two days. On Fridays, people are looking forward to the weekend and might make more mistakes. What if something happens that pushes the release out a day? Now your weekend plans are screwed. On Monday, people are usually tired from their weekend or need extra time to get going again. This again might cause more mistakes and issues.
No matter how you look at stress is never a good thing and can lead to major health issues including death. If I were in charge, I would provide free acupuncture and massages bi-weekly. The employee would just need to provide the tip.
If stress is not dealt with in a software company, it can cause the loss of employees, lower quality code and delays in pushing code to production. Often stress can lead to heavy drinking which again can affect the performance of an employee and might even lead to getting fired.
When I realized how much stress was affecting my health, I sought after ways to reduce stress in a more holistic healthy way. First, I turned to acupuncture done by someone who also trained in Chinese medicine. After going every two weeks for about 4 months, the major sinus issues I have been battling for a very long time, completely went away. COMPLETELY! No more suffering, no more calling in sick if it got bad and no more medications! This made me a happier and more productive at my job.
I would also offer free massages every two weeks since this is what I do already to lower my own stress. I would hire one, like mine, who has created his own technique that is a blend of massage and physical therapy.
For myself, getting acupuncture and massage ever two weeks has drastically reduced my stress and has also decreased how often I need to go to a medical doctor. Losing a lot of weight has helped all of this too. I would give incentives to employees that utilize these stress relievers along with anyone who wants to exercise on a regular basis too.
Every other Friday I would implement a hackathon that starts at lunch (provided). Developers could either choose learn something new from a training site like Pluralsight.com or work on a new feature that they would enjoy working on one that uses a technology they want to learn. I would encourage working in teams.
I once did a whole day hackathon at Microsoft with two people from the Xamarin team. Not only did I get to see a really new technology they were working on but I found over 11 bugs in their framework. So, I guess it worked out for them too. I really enjoyed that day.
Odds and Ends
I could write on this subject for a long time, so to make it short, I will just list out some of the other things I would do.
- Pay employees market rate that includes profit sharing.
- Pay 100% of employee healthcare.
- Hold team building events two or three times a year.
- Beginner developers would have a senior developer assigned to them for mentoring. This senior developer would also do all of their code reviews.
- Provide training money that could be used to go to school, conferences or other training that would benefit the team.
- I would make sure different teams didn’t operate like silos. All teams, such as developers, quality assurance, DevOps would be together in all planning meetings.
To me this all boils down to treating people the way I would like to be treated and trusting them. I first became a manager for a restaurant when I was only 18 years old. This even included profit sharing. I never asked any employee to do anything I wouldn’t want to do. To keep my costs down, I worked one of the shifts as a cook while also taking care of my management responsibilities. One week, I didn’t leave the restaurant for three days! I slept in the booths in the restaurant.
So, what would you do if you ran a software company or team? I welcome your comments. Maybe I’ll write a part three someday.