If I Ran a Software Company – Part 2

Welcome to Part 2 of my article on this subject. I hope you had a chance to read Part 1 before diving into this post. If you haven’t, no worries, as this installment continues to explore my vision for running a software company or team.

Top-of-the-Line Computers and Tools

Let’s start by ensuring that all our software engineers have the necessary tools to complete their work swiftly and to the highest quality!

Computers

Every developer, including graphic artists, should receive a new computer at least every two years, if not annually. This policy would apply to everyone at the company I manage. Once we replace these computers, the older ones can be reassigned within the company.

During my tenure at Proflowers.com, I encountered a situation where two remote developers were working with computers that were five years old. Developers are a valuable resource, and we certainly don’t want them idly waiting for tasks like compilation. Each minute a developer spends waiting represents both a cost to the company and potential lost revenue, not to mention delayed feature development.

In my experience, I’ve transitioned to developing in virtual machines hosted in the cloud, specifically Azure, a practice I’ve been following since around 2005. This approach offers numerous advantages, such as creating base images to streamline developer onboarding, enabling effortless backups, and allowing for quick memory upgrades with just a few clicks. It’s a logical choice that maximizes efficiency and resource utilization.

Tools

Every developer requires a set of tools to excel in their role, which can encompass Visual Studio, source control systems, third-party utilities, and more.

Visual Studio

For optimal productivity, all of my developers would utilize Visual Studio Enterprise, as it offers a comprehensive feature set. In a recent experience at a different company, the use of only the community version for everyone, except for myself, was a sign that things weren’t aligned with best practices for a software company.

Source Control

While source control has improved over time, challenges with commits and merges persist. Opting for subpar open-source solutions to save costs is not an option. Instead, we would use GitHub as the underlying engine. It seamlessly integrates with Visual Studio and provides essential project management, continuous build, and deployment capabilities – crucial components for any software team. At a previous workplace where I encountered the infamous “hell week,” the source control system used was even worse than Visual Source Safe. Many hours were lost weekly, prompting my suggestion to switch to Visual Studio Team Systems (TFS). After surveying my colleagues, we discovered an average loss of five hours per week per developer, translating to significant financial losses for the company. These numbers finally convinced management to make the switch to TFS.

Third-Party Tools and Visual Studio Add-ins

To enhance application functionality and deliver more stable and reliable code, the adoption of third-party tools and Visual Studio add-ins is essential. Unfortunately, many companies and teams underutilize or neglect these valuable resources.

In a recent article I authored, titled “Stop Reinventing The Wheel,” I delve into the importance of these tools and the potential cost savings they can offer. Here are some key takeaways:

At a previous employer, reluctance to invest in third-party products resulted in a task taking 3.5 days to complete. By utilizing third-party components from reputable companies like GrapeCity, Telerik, or DevExpress, the same task could have been accomplished in under three hours, with the added benefit of implementing additional features, such as sorting results by column. Often, these components require minimal or no custom code (just property configuration).

At the same company with the outdated computers, implementing my preferred static code analyzer, CodeIt.Right, could have led to more stable and reliable code, potentially saving an estimated $3.5 million annually after purchasing CodeIt.Right for every developer. Regrettably, I was the sole developer utilizing this tool within the organization. It is paramount that developers have access to a comprehensive toolbox, including UI components, code analysis tools, and more. During job interviews, don’t hesitate to inquire about the tools and resources available. If the response indicates a lack of investment or a reliance solely on open-source tools, it may be worth reconsidering a position there.

If I Were in Charge

Throughout my career, I’ve had the privilege of working for some excellent companies, but more often than not, I’ve found myself in less than ideal situations. Over the years, I’ve learned valuable lessons about what it takes to run a software company or department effectively. Below are the key initiatives I would implement without fail if I were in a position of authority.

1. Get the Real Story

If I were in charge, I would make it a daily practice to engage with my team members. Depending on the size of the company or department, my goal would be to interact with everyone within a month and then repeat the process in the following month.

The primary purpose of this practice would be twofold. Firstly, it would allow me to build personal connections with every member of my team. Secondly, it would provide a platform for team members to share their honest feedback, concerns, and suggestions for improving the company or product. Every idea brought to my attention would receive due consideration. Far too often, I’ve witnessed a lack of transparency in management, where leaders shield upper management from the harsh realities of what’s happening on the ground. I refer to these types of managers as “Cheerleaders,” who only tell the CEO or department head what they want to hear. This approach is detrimental to both the product and the company’s overall health.

2. Deploying Code to Production

Having experienced the unnecessary stress associated with deploying code to production on Fridays or Mondays during my career, I would establish a clear policy against such practices if I were in charge.

On Fridays, individuals often have their minds on the upcoming weekend, potentially leading to increased errors. Furthermore, if an unexpected issue arises and deployment is delayed, it can disrupt weekend plans. On Mondays, people may be recovering from the weekend or require extra time to get back into work mode, which could again lead to more mistakes and issues.

3. Stress Relief

Recognizing that stress can have severe consequences on employees’ health and productivity, I would prioritize stress relief initiatives. As part of our employee benefits, I would offer free acupuncture and massages on a bi-weekly basis, with employees only needing to cover the tip.

Failure to address stress in a software company can result in employee attrition, lower code quality, and delays in project delivery. In some cases, stress can even lead to unhealthy coping mechanisms, such as excessive drinking, which can further impact performance and job security.

I would draw from my own experience in managing stress through holistic approaches. Personally, I turned to acupuncture, administered by a practitioner well-versed in Chinese medicine. After bi-weekly sessions for approximately four months, I successfully resolved long-standing sinus issues, eliminating the need for medication and sick days. This transformation not only improved my overall well-being but also boosted my productivity and job satisfaction. Additionally, I would provide free massages every two weeks, similar to my own stress management routine. I would hire a skilled therapist capable of blending massage with physical therapy techniques. To incentivize employees to prioritize stress relief, I would offer rewards to those who utilize these services, along with individuals committed to regular exercise.

4. Hackathon

To foster innovation and continuous learning, I would institute a bi-weekly hackathon that starts during lunchtime (with meals provided). During these hackathons, developers would have the option to either explore new technologies through online training platforms like Pluralsight.com or collaborate on new features aligned with their interests and technology preferences. I would encourage teamwork and collaboration during these sessions.

I recall a particularly memorable experience during a day-long hackathon at Microsoft, where I collaborated with members of the Xamarin team. Not only did I gain insight into their cutting-edge technology, but I also identified and reported over 11 bugs in their framework. It was a day of productive learning and collaboration, benefiting both parties involved. Implementing these initiatives would be my approach to creating a more vibrant, transparent, and innovative work environment where employees are supported in their personal and professional growth.

Odds and Ends

I could delve into this subject extensively, but for brevity’s sake, here’s a concise list of additional initiatives I would implement.

  • Competitive Compensation: Ensure employees receive market-competitive salaries that incorporate profit-sharing.
  • Comprehensive Healthcare Coverage: Provide full coverage for employee healthcare expenses.
  • Team Building Events: Organize team-building activities two or three times a year to strengthen camaraderie.
  • Mentorship Program: Assign senior developers to mentor and conduct code reviews for junior developers.
  • Training Support: Allocate a budget for training opportunities, including academic pursuits, conferences, and other skill-enhancing activities.
  • Collaborative Planning: Foster collaboration among different teams, such as developers, quality assurance, and DevOps, by involving them 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.

In Conclusion

These represent just a few of the initiatives I would introduce if I were leading a software company or team. I eagerly look forward to the opportunity to put them into practice if ever offered the position. My ultimate aim is always to develop software and services that users cherish, enhancing their work or personal lives. It all begins with fostering a content and healthy workforce.

If your company needs a team lead or development manager, please email me at dotnetdave@live.com.

So, what would you do if you ran a software company or team? I welcome your comments.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.