Navigating Software Engineering Best Practices in Non-Standard Companies
When joining a company that doesn’t follow established software engineering best practices, such as unit testing or code quality tools, it’s a challenging situation. As a new employee, your primary goal should be to focus on the output and deliverables.
Adapting to the existing processes is crucial, as you may be misunderstanding something or the company may misunderstand you. It’s important to assess your role and responsibilities to ensure alignment with the company's expectations.
Individual vs. Project Level Involvement
If your job is simply to write code, you can take matters into your own hands by writing test cases for your own code before it’s committed. This proactive approach ensures that your code is not only functional but also robust and maintainable.
At a project level, you should attempt to understand where testing is being performed. In some organizations, there are designated QA teams responsible for debugging and testing. Understanding this will help you integrate your efforts more effectively.
Leveraging Existing Standards
The language and style guidance within your organization can significantly impact the quality of your work. If the company is using a weakly typed language without any standardization or testing, the risk of bugs and poor maintainability increases drastically. Such situations often lead to extended periods of work (often drastically close to the release date) to address issues.
It’s important to define the acceptable risk based on the project's requirements and the consequences of potential errors. Certain basic principles and techniques can be beneficial, regardless of the level of professionalism in the company.
Striking a Balance
Your goal is to improve the existing techniques without causing significant disruption. If you face too much opposition, it might be wise to look for a more professionally run company. Many highly professional organizations have established best practices that significantly enhance the quality of the final product.
However, it's important to recognize that certain projects or products do not require the same level of reliability and maintainability. For instance, video games on smartphones or many websites can tolerate a higher frequency of bugs or maintenance issues. The focus in these cases may be on user experience and timely release rather than long-term stability.
The Journey Towards Professional Quality Software
The current state of software development in the US reflects a need for improvement. Many companies lack the knowledge to recognize the importance of professional software engineering practices, and many developers are unaware of what truly professional software engineering entails.
This trend will gradually change over the next few decades, as the industry becomes more refined and standards become the norm. The evolution of automotive safety standards is a historical example; it took decades for safety and reliability to become top priorities in most automobiles.
In summary, navigating a company that doesn’t follow established software engineering best practices requires a strategic approach. Focus on the output, improve where possible, and be prepared to seek out a more professional environment if necessary. The journey to professional quality software is a long one, but it’s well worth the effort.