When I took on the role of Chief Technology Officer at Works, I had the opportunity to formally introduce myself and introduce the criteria for evaluating the technological output of the department. I outlined the objectives and expectations I had for all individuals in the technology department, from engineering to product management to design. During this introduction, I stated:
As a technology company, we place a premium on providing our clients with attractive capabilities that swiftly address their business challenges.
That’s Why We Need
- If you make a promise, you must keep it.
- Slim down (i.e. build, learn, iterate)
- Accept the possibility of failure.
- Get your dispersed team talking to one other regularly.
- Pay attention to the business value you bring
My Core Values
- Providing Value to the Customer Comes First
- Responsibilization and Taking Charge
- Minimal Waste Distribution Strategy
- Sensitive Understanding of the Customer’s Perspective
- Scalable High-Quality Systems
- Use of Design to Set Apart Products; Creating Emotional User Interfaces
- Trust (and Respect) (and Respect)
- Teamwork is more important than individual achievement
- Putting In Major Efforts (to be great at your craft)
- Enhancing Your Abilities (and Kaizen)
As we approach the end of 2022 and transition into a new year, it is essential for me to assess my expectations for software developers. It is my desire to be more explicit and comprehensive in my expectations for software developers in this upcoming year.
Based on my extensive experience in software development, I present the following requirements as a checklist of essential good practices for creating high-quality software. Adopting these practices will ensure that the software produced meets the highest standards and is of the utmost quality.
A Software Engineer’s Obligations
Making an Effort
Come to the office prepared and ready to take the initiative.The company’s success is heavily dependent on our team fulfilling their expectations. To ensure productivity, it is beneficial to have time constraints in place. While there is some controversy surrounding the effectiveness of agile programming, I personally prefer SCRUM over Kanban due to the hard deadline at the end of each sprint. Additionally, to maximise our individual outcomes, it is best to take initiative and actively search for tickets, stories, and bugs to address, rather than waiting to be assigned tasks.
Related Article: Defining Agile, Scrum, and Kanban: What Do They Mean?
Responsibility for fixing issues, familiarity with target audience and expertise in offering solutionIn order to make a meaningful contribution to the proposed solutions, it is essential to have an in-depth understanding of the issues at hand. Furthermore, it is important to be well-versed in the product you are developing, so that you can confidently demonstrate your expertise. To ensure that you are fully aware of the customer’s needs, it is advisable to schedule regular meetings with them. This will ensure that you have a comprehensive understanding of the problem.
Currently, production issues are of paramount importanceProcrastinating in hopes of resolving matters later is not a feasible plan of action. If data is being compromised or production is suspended, it is crucial to focus on the issue at hand and persist until a solution is found. Although the situation may be distressing, I can guarantee that the collective sense of accomplishment and team spirit that you and your co-workers will experience after the problem has been solved will far outweigh any temporary distress.
Take the mindset of a sluggardIt may seem counterintuitive, but being a talented engineer has nothing to do with one’s behaviour in the workplace. Rather, the most successful engineers are the ones who are constantly striving to make their surroundings as efficient as possible by automating processes, from their environment to their testing setup to their toolchain and beyond. These individuals are some of the most intelligent people around, but they are also often the laziest; they are always searching for the most convenient and quickest ways to complete tasks.
Talk to others right away if you were hit.Software development is a collaborative process, and it is important to recognise when individual efforts have reached an impasse. It is essential to make an effort to find a solution independently, however, it is also important to seek assistance from others promptly when faced with a roadblock. This will help ensure that progress can resume quickly.
Effective Software Engineering
The code has to be scalable, performant, and easily tested.Do you have a unit test in place? Is it easy to run the test cases? Have you implemented flags to indicate certain features? Is the CSS based on existing settings or have you designed it from the ground up? Have you taken into account the service’s performance under light, normal, and heavy load? As you are writing code, take into account such inquiries and go through a mental checklist before putting in any extra effort.
Updating and increasing the quality of the code is everyone’s responsibility.Gaining proficiency in this way of thinking takes time, but once you have submitted your Pull Request, the code that you have written is no longer exclusively yours; it belongs to the entire team. Demonstrating an attitude of ownership is not appropriate; you must be prepared to accept constructive feedback and trust in the expertise of others if you wish to see any progress. Additionally, you have a responsibility to improve the codebase as you gain familiarity with its various components. The concept of leaving a campsite in a better condition than when you initially visited is an essential element of ethical camping.
To earn the adoration of your target audience, you must have an excellent user interface.Maintaining user-centricity and paying close attention to details such as padding, typography, and the use of whitespace are essential for creating an effective user interface in today’s market. As a front-end developer, it is important to not only be efficient in implementing the interface, but also to put yourself in the shoes of the end user and continuously look for ways to improve the user’s experience while navigating the product. When possible, recommend and communicate improved processes to your team to further optimise the user’s journey.
Generate code that does what it’s supposed to do and can be read by humans.The usage of semicolons can be a contentious topic among engineers, especially when it comes to code reviews and pull requests. However, it is essential that the code is written in a way that is easy to understand, with adequate comments and explanations. Additionally, it should also fulfill its purpose. These criteria are the absolute minimum that should be met.
Writing and reading documentation may help you learn.If you wish to progress in your field, taking the initiative to complete this task is essential. Documenting your work is a fundamental requirement of your role, and will ensure that your design intentions are understood, while also facilitating the maintenance of the system and allowing newcomers to quickly get up to speed. Furthermore, familiarising yourself with a new service or technology by consulting the user manual is strongly advised, as this will help you to avoid making common mistakes.
Fast, functional, and ideally delightful software is a requirement.It is essential that the steps be carried out in the prescribed order to ensure optimal user experience. Applications that boast minimal latency, fast reaction times, and a lack of waiting for functions to finish provide the best user experience. Of course, the program must also perform its intended purpose effectively. If users are not comfortable with the process, it is recommended that they leave. Additionally, software should always include an element that will make the user smile, such as injecting character into the writing or providing a small, pleasant surprise. Finally, it is important to remember that the devil is in the details, and that applies to us as well.
Developing Oneself and One’s Group
Manage your stakeholders effectively.In order to be an effective stakeholder, it is essential to be invested in the success of the group. To do this, it is important to continually strive to gain understanding of the project by asking questions, developing estimation skills, and engaging in meaningful dialogue with your team. Additionally, it is imperative to keep your team informed of any changes, obstacles, or innovative ideas that may arise. By taking these necessary steps, stakeholders can ensure the success of their group.
You must have verified needs and prototypes.It is often said that Product Managers are responsible for determining the “what” and “why” of a project, while Engineers handle the “how”. While this is essentially true, it is important to remember that a well-functioning engineering team should also include testing to ensure the project meets the criteria. Without testing, it would be a waste of time and resources to continue with a project that does not fulfill the needs of the stakeholders. Therefore, it is essential to ensure that testing is conducted in order to verify the requirements.
Don’t only bring up issues; provide remedies as well.It is important to voice your concerns regarding the project’s requirements, code base, procedures, or team dynamics in a respectful and effective way. Offering suggestions for improvement will help to ensure that your concerns are taken seriously. Constructive criticism is a valuable tool, and we should all strive to provide it. By combining our concerns with constructive solutions, we are more likely to create positive change. Allowing everyone to be heard will create an environment where we can work together to make the project a success.
Make an effort to work together and do your share.As professionals, it is essential to take the initiative, collaborate, and aid one another. Furthermore, offering constructive critiques is an important part of helping us grow and improve our work. This should be done in a respectful and positive manner, with the goal of improving the quality of the work and not attacking the individual who is critiquing it. To ensure that these conversations are productive and effective, they should take place in a team environment where everyone has a mutual trust and respect for one another. Lastly, it is critical to be mindful of others and avoid disrespectful behaviour in the workplace; no one wants to work with someone who is rude.
Continue your education and always teach others something useful.In order to stay current with the ongoing developments in technology, it is essential to remain open to learning new skills and honing existing ones. As such, it is important to continually strive to improve, never becoming satisfied with the current level of knowledge or skills. Moreover, it is important to share newly acquired information with the team or group to help keep everyone up to date and to foster collective improvement.