In my last article (https://csharpdeveloper.wordpress.com/2021/05/24/how-companies-can-facilitate-the-onboarding-of-entry-level-developers/) I wrote about things a company could do to improve the onboarding experience for entry-level developers. In this post I offer some questions that newly hired developers can ask to improve their own onboarding experience. Not only do I suggest that you ask these question, I think you should actively seek the answers to these questions if you have idle time. Knowing the answers to these questions will improve your understanding of how things are done at the company and impact how you write code and spend your time in development.
- What do I need to do to be considered a contributor to the company?
- One of your employer’s biggest concerns is the unknown number of weeks or months it will take before you provide more value to the company than the cost of your salary. No matter how talented you think you are, you almost certainly are costing the company more than you are worth for the first few months you work there, if not longer. And the reason for this is because a senior developer could complete all the work you did in your first two months in one-tenth of the time and with higher quality. So, if that senior developer has to spend half of their time during your first two months assisting you, then the company is going to be nervous that you will continue to cost them more than you are worth. However, take heart in understanding that your employer hired you knowing there would be an upfront cost, but in the hopes that you would soon be able to contribute more than you cost, and be able to contribute without requiring a lot of time from the other developers.
- What percentage of my time will I spend using my JS/TS skills, my server-side skills, my database skills, (the skills that you hope to spend time on improving/learning)?
- This question really should be asked before you get hired unless you really need a job soon. If you are craving to write TypeScript code but learn you will be tasked with writing database SQL for the next year, then you should definitely let your employer know your preferences because they may be able to make adjustments to improve your employment satisfaction.
- Who will be using the software I work on? Is it external customers or internal employees? Are we developing applications for other businesses?
- Most entry-level developers I hired rarely asked such questions, but I don’t think less of them for not asking. The reason I think newly hired developers should ask these questions is because it helps give the developer a better understanding of how the software works and is deployed. It helps the developer correctly assess the trade-offs between application concerns such as security and performance and the impact and risks of making mistakes.
- How is the software that I will be working on deployed? Is it “in the cloud”? It is on premise? Is it web apps or desktop apps or phone apps?
- Like my note on the previous question, this helps developers assess impact and risks of making mistakes, and also understand what technologies they may need to learn.
- What is the process for our source code to get to deployed? Do we commit to a source control? Do we manually run build and deploy tasks?
- In some companies, developers write code, check in into a repository, and then forget about it. In other companies the developer guides the code all the way into the production environment. The answers to these questions will help you understand what is expected of you and your role in the process and identify some things you need to learn.
- Are there unit tests or static code analysis or other steps in the build pipeline?
- Companies with more highly evolved software development practices often have static code analysis and unit tests. If your company does not have them, this identifies an area where they could possibly improve by adding them. If they already have these processes, then you should probably learn how to use them and gain their advantages.
- If there are tests, how do we write and manage them?
- Unit tests provide a lot of value for teams that continue to work on and evolve a software product. If your team is already using them, you should learn how you can add your own unit tests as part of the first lines of code that you will write yourself.
- Are there database changes that might accompany our code changes, and if so, how is the deployment of the two together managed?
- Many software products store data in databases, and often those are relational. If you make code changes that affected how the data is stored, then the change to the data store needs to be migrated into production along with your code changes. This can be challenging in many environments so you want to understand the impact and how it can be managed. You may decide in some cases that you will write your code in a different way to implement a feature just so that you can avoid a database change.
- Is there a QA/Test environment that we can deploy to, and is there staff to test our changes?
- This helps you understand how much responsibility you have for testing your code changes. Not that you shouldn’t always test your own code changes, but often a change you make could affect many scenarios, and a QA team can help reduce the time you need to spend testing. When a QA or Test environment exists, it tells you that the company is fairly concerned that bugs don’t get introduced to the production environment.
- Who do I work with to review my code changes and to guide me toward writing good code?
- A specific single person signals to that person that they are expected to work with you and therefore will dedicate time to do so. When there is “shared” responsibility, team members often hope that someone else on the team will help you because each team member is usually already very busy; and they each assume someone else is less busy than they are.
- How do I receive the tasks that I am going to work on, and how does the team track my status on those tasks?
- Most software development shops use a white board or some task management software. There are many free task management tools on the Internet like Trello, but most teams will have something more sophisticated. Learning how to correctly use these products is important for you in learning how to manage your work and to help your team members see that you are contributing.
- How do the users of the software know all the features we put into it and what bugs exist and what bugs have been fixed?
- Some products, especially software for internal employees, may not track this at all; but software for sale that is used by external customers probably does. As you fix bugs and add features those usually need to be shared with customers and understanding how that process works will help you contribute good explanations and information to the customers.
- Who do I contact for non-technical questions about how features in the software should work?
- Hopefully you have a mentor to help you write code, but you often need to talk to the users of the software, or a representative of those users, to better understand exactly what they would like to have done, or to collaborate with them about the costs of what they asked for and alternative ways to solve their problems.
- Is there documentation for users of the software that I can learn from?
- This is a great way for new developers to get up to speed more quickly on what is expected of them. Seeing the software from the end user perspective will help you understand what needs to be accomplished in the code you write.
- Is there documentation about the software architecture and coding guidelines?
- Internal documentation can help you make appropriate decisions, not just about formatting but also in helping you to identify that some problems have already been solved and you can, and should, re-use the existing proven solution.
- Can I install software on my computer, or do I need to ask permission first?
- Before installing software, get permission. Some companies provide a location with tools already approved for use. Many companies do not want you to download software from the Internet due to the risks that the software may contain malicious code. They will desire to first approve it. You don’t want to be the person that downloads the malware-laden software component that infects the company’s network with ransomware.
- Are there policies I should follow before adding third party dependencies or components to the software we are writing?
- Although a StackOverflow post may show how easy it is to include a third party JavaScript library in your web page to solve a problem; it might not point out that the license requires that the JavaScript library only be used in open source projects and any software that uses it should be considered open source. This can lead to lots of legal hassles. Make sure that you approve third party frameworks and tools that you use and honor their license agreements so that you don’t get your employer into expensive legal trouble.
- What are the security threats I should be aware of when writing our software?
- If you are asked to import an XML document into an application and process it, you should probably learn how concerned you should be with making sure that XML document does not contain malicious script that could do harm to the computers on which your code is installed. XML documents are just one example; many inputs and processes can introduce security risks. Learn early what the security threats are and also how your team correctly addresses those threats so that your code doesn’t open the door to malware.
- Does our software need to adhere to compliance guidelines such as SOX, PCI, or HIPAA?
- Like addressing security threats, some of the code we write, particularly some of the design and management of sensitive information like passwords and credit card numbers, has to be handled with extra care. It is likely that good practices have already been identified and you can borrow code from elsewhere in your applications to handle compliance guidelines; and it is best to learn the right way to do those things before writing code that just works.
- Will I be exposed or working with any sensitive data and how should I handle it if I will?
- Patient and customer data sometimes ends up in test databases so that developers have real data to test with. However, you should take care with the data and make sure it is not shared in printed pages, or on test web sites, or exposed to other people that have not signed the waiver that they will treat the data as confidential. Understand that some data you are dealing with should not be discussed outside of your business context.