Q&A with Alexsandro Souza
What kinds of software projects have you worked on before? Which operating systems, development environments, languages, databases?
In my 13 years working with software developement, I have worked on variated projects and industries. I started my career as a web developer at a marketing agency developing big companies’ websites using mainly PHP, Javascript, HTML and CSS with MySQL database hosted on Linux VMs.
In 2015, I started working for a fintech company developing a per-to-per money exchange platform, primarily using Java, PHP, Javascript and OracleDB. The application was hosted on the AWS Linux VMs.
In 2017, I joined a fintech startup company as a tech lead to build a Forex trading system, leveraging Deep learning and many other statistical sources. The main stack was Java, Python, SQL server, docker and KDB. Everything was hosted on Azure.
When I worked for Bank of America, I helped to develop a transactional application based on the Kafka message system, Java and Oracle.
My last great experience was at Deem, where I led the modernization of a monolith system into microservices-based architecture using the state of the art technologies such as Golang, K8s, gRPC, Kafka, Redis, Gitlab, and Service mesh with Istio.
Would you describe yourself as a high quality coder? Why? Yes. Because I make sure that my code is readable, maintainable, and follows best practices, industry standards, and essential programming principles.
Would you describe yourself as an architect of resilient software? If so, why, and in which sorts of applications?
Yes. Because I have an excellent understanding of the different types of failures that can occur in a system and therefore be able to design solutions to mitigate the effects of different issues and maintain the system’s functionalities. I have a great experience with distributed systems architecture.
What software products have you yourself lead which shipped many releases to multiple customers? What was your role?
Customer management system(CMS) - Tech lead Forex trading system - Tech lead Travel booking platform - Principal engineer Data aggregation platform - Tech engineer manager
What is your most senior role in a software engineering organization? Describe your span of control, and the diversity of products, functions and teams you led. Tech engineer manager - my span of control would include: Leading a team of seven software engineers. Overseeing the development of a REST API product. Managing the day-to-day operations of my team. Providing technical direction and guidance to my team Communicating with stakeholders
My team was the platform team. We were responsible for defining the overall architecture and design of the platform, setting technologies, tools, and infrastructure that other teams could use to build and run software applications. Additionally, we were responsible for a public REST API product.
What is your proudest success as an engineering leader? A successful system modernization from a monolith to a modern microservices architecture
Outline your thoughts on open source software development. What is important to get right in open source projects? What open source projects have you worked on? Have you been an open source maintainer, on which projects, and what was your role?
I am super into open source and have contributed to a few small projects. I am a maintainer of some small projects with a total of 824 stars. I haven’t worked on any big open-source projects. The biggest project I got something merged was Golang plugin for Gauge https://github.com/getgauge-contrib/gauge-go/pull/29
I believe the most important in an open-source project is documentation.
Describe your experience building large systems with many services - web front ends, REST APIs, data stores, event processing and other kinds of integration between components. What are the key things to think about in regard to architecture, maintainability, and reliability in these large systems? I have extensive experience building large and complex systems involving different technologies, architecture, communication protocols, data management and UIs. For me, the key things for any system are modularity, separation of concerns, code readability, CICD, automated tests, scalability, monitoring and alerting.
Describe your experience with public cloud based operations - how well do you understand large-scale public cloud estate management and developer experience? I have good experience with AWS. I have led applications in that I was responsible for configuring and managing multiple servers, monitoring performance and resource usage, automating deployment, scaling the infrastructure, monitoring application logs and alerting, and ensuring that systems are secure and available.
Outline your thoughts on Developer Experience in software development Developer experience is a priority for my teams because it can impact the speed and quality of software development and influence developers’ satisfaction and retention. I always ensure developers have the right tools, processes, and environment to maximize productivity and create the most outstanding business value possible.
Outline your thoughts on quality in software development. What practices are most effective to drive improvements in quality? High-quality software from a development perspective is readable, maintainable, reliable, and secure. I believe the best practices to improve quality are automated testing, code reviews, pair programming and adopting community best practices and programming principles.
Outline your thoughts on documentation in large software projects. What practices should teams follow? What are great examples of open source docs?
Code is the best documentation, but not everything can be documented in the code. In those cases, concise and direct-to-the-point documentation is the best.
As with everything in software development, teams should establish clear standards and guidelines for documentation. Terraform and K8s have excellent documentation.
Outline your thoughts on user experience, usability and design in software. How do you lead teams to deliver outstanding user experience? The overall experience and satisfaction of users with the software are crucial as they directly impact how users interact with and perceive the software we are building.
As with everything in software development, I always try to establish clear standards and guidelines for user experience.
Also, it’s essential to involve users in the design and development process, to ensure that software meets their needs and expectations.
Outline your thoughts on performance in software engineering. How do you ensure that your product is fast?
First, performance should not be considered in isolation, as it can sometimes come at the expense of other software engineering qualities, such as maintainability and scalability.
Then it’s essential to consider the system architecture, design patterns, data storage and dependencies of your systems. An excellent example of performance implications when making architectural decisions is choosing a distributed system versus a monolithic architecture.
Performance assurance is an ongoing task; performance testing and profiling are essential to identify bottlenecks and optimize the system’s performance. Load and stress testing can help identify potential issues that may arise when the system is under heavy usage. Profiling tools can help identify performance hotspots in the code.
Outline your thoughts on security in software engineering. How do you lead your engineers to improve their security posture and awareness? Security is a critical aspect of software engineering, as software systems often store and process sensitive data and perform critical operations.
A security breach can be fatal to a company. Therefore it deserves appropriate attention. However, security is not a one-time effort and requires continuous monitoring, improvement and training.
As with everything in software development, I always try to establish secure coding practices and security standards(OWASP). Additionally, it’s essential to have a culture of security awareness, with security training and policies in place to ensure system security.
Outline your thoughts on devops and devsecops. Which practices are effective, and which are overrated? DevOps and DevSecOps are great methodologies that emphasize collaboration between development and operations teams to streamline the software delivery process through code and automation. By incorporating quality, security and transparent release steps into the software delivery pipeline, teams can deliver software changes more frequently while maintaining a high level of quality, security and reliability.
Honestly, I can not think of any overrated practice since everything can contribute to the team’s efficiency and quality
Would you describe yourself as an effective manager? Why? Yes. Because I have the experience and skills to help any company to grow, improve performance and scale tech operations through people and processes. I know how best to help my team grow, to keep motivated and engaged with the product and the business. The path to achieving that is by encouraging innovation, creativity and self-initiative. Building trust, creating a safety net, reducing bureaucracy and increasing ownership and responsibilities, and welcoming continuous improvement to process, guides, principles and framework.
Describe your experience of development methodologies, and your preferred approach in different circumstances
I have extensive experience with Scrum and Kanban methodologies. However, my favourite methodology is Lean-Agile, which emphasizes the elimination of waste, the continuous improvement of processes, prioritizing collaboration, frequent feedback, and adaptability.
Scrum and Kanban are both Agile methodologies and fit well with Lean Agile. Scrum is best suited for new and complex projects. On the other hand, Kanban is best suited for projects requiring a high degree of flexibility, as it allows the team to make changes to the workflow in real time.
Usually, I start with Scrum, and when the team is mature, I start using Scrumban, as it combines elements of Scrum and Kanban.
How do you prefer to plan, coordinate and track progress? The best way to start is by breaking down the project into Initiatives and then by User functionalities. After the project goals and scope is clearly defined and what success looks like is communicated, it is time to prioritize tasks and manage the workload effectively. For that, I use the NOW-Next-Later technique, which involves dividing tasks into three categories. By categorizing tasks in this way, the team can focus on the most important and urgent tasks first, while also keeping an eye on the longer-term goals of the project.
Describe your approach to team and individual performance management
When I am evaluating individual team members, I look at the following areas:
- The output of the tasks
- Commitment to the team
- Self-initiative
- Flexibility
- Technical skills
- Communication skills
- Responsibility
Then I define clear and measurable goals for each category, followed by regular performance reviews to assess the progress of each goal and identify areas for improvement.
When I am evaluating team performance, I mostly look at customer satisfaction which can be measured by the amount of value delivered - defects. As we learned from Agile Principles, we should hold up to what truly matters: frequently delivering value to our stakeholders at a constant pace.
Setting clear and measurable goals at the team level is also necessary.
Describe your approach to coaching, mentorship and career development
I love helping people develop and grow in their careers and life. For example, that is what inspires me to produce free content on the internet.
I am very dedicated to helping my team members develop their skills and knowledge to advance in their careers, supporting and guiding them in identifying their strengths, interests, and goals. Providing opportunities for learning and growth.
Describe the relationship between product management and engineering
The relationship between product management and engineering is critical for the success of the product. Engineers should work closely with product managers to gain a deep understanding of customer needs and ensure that the product is designed to meet those needs.
I will always empower my teams to have an active role in shaping the software product. Engineers work on frontline development and can help drive innovation by identifying opportunities for new features, enhancements, and improvements. When engineers have product ownership, they are more invested in the success of the product and are better able to contribute to its development.
Do you have a public platform where you communicate about the industry? Medium, Twitter, Youtube, a personal blog? Please provide links. Yes. Personal blog - https://dev.to/dashboard Dzone Portal - https://dzone.com/users/3085777/apssouza.html LinkedIn posts - https://www.linkedin.com/in/alexsandro-souza-dev/recent-activity/shares/ Youtube channel - https://www.youtube.com/@alexsouza22 Udemy courses - https://www.udemy.com/user/alexsandro-souza/
Describe any speaking experience at industry events and conferences. I have spoken only in small meetups.
Describe any experience working with startups. What did you draw from that experience that would be relevant for this application?
I have worked for multiple startups, and those jobs have helped me grow my business and product vision. Additionally, startups are highly innovative, and I was encouraged to think creatively and bring new ideas to the table. My innovative and creative mindset and my business and product vision would be very valuable to the company.
What sort of high school student were you? Outside of class, what were your interests and hobbies? What would your high school peers remember you for, if we asked them? During my childhood, I was very sporty. I was particularly interested in football and volleyball. I was always eager to learn and improve, which led me to do various courses, including barbering, business assistant, computer hardware and web development. Coming from a poor family in Brazil, I had to start working at the age of 15 to help support my family. Balancing school and work was not easy, but I was determined to make the most of my situation and create a better future for myself.