What are The Good, The Bad, and The Ugly of Software Engineering?
A storyline on a spectrum of things to consider as a human in the software engineering life cycle.
Disclaimer: The views and opinions expressed in this article belong solely to the authors and do not reflect the official policy or position of my current or previous employers.
Motivation: This article is composed in the spirit of inspiring those interested in pursuing and practicing software engineering.
Storyline: I tell myself and my teams that a journey of product/software development is like delivering a symphony. As in a symphony, the composition is of importance, and the performance delivered speaks for itself. Be it Mozart, Beethoven, Brahms, Mahler, or others; the collective performance is what matters. The various instruments played at certain times are well choreographed, practiced, optimized, and adapted continuously. It does not matter what instrument was played by whom, in the end, the audiences appreciate the composition collectively and enjoy it as wholesome. Every software developed is similar to a symphony. The final outcome is a composition of a well-thought-through and well-orchestrated set of capabilities that its users enjoy.
When you’re part of a symphony team, sometimes you may not like playing a certain instrument, however, the composer is aware of the skillset and needs certain instruments to be played to complete the music. When everyone participates in the symphony and plays the role, the music is splendid. When there is hesitation or lack of support, the music will not be complete and in the end, the greatest symphonies can’t be created.
In a nutshell, everything that we do as part of PDLC/SDLC and as a team is essential for delivering a product that will be timeless, being able to evolve as the business grows, and supporting its users for many years.
While you try to go into such teams to make a symphony possible, the skills will be tested, the learnings will help you grow, and be able to adapt and position yourself for unboxing the potential as an individual and as a group. In the process, you will discover what works and what may not.
Here is a take on the good, the bad, and the ugly of being in such a setting.
Getting Started: Regardless of your academic stream, you can thrive as a software engineer. Everyone can take a chance to experiment with their ways to explore and benefit from the immense knowledge, compensation, network, and other non-tangible benefits.
Neverending Possibilities: Numerous industries benefit from software engineers. The product development (PD) / Software Development (SD) life cycle (LC) unboxes a wide spectrum of areas where you can thrive as a distinguished person or an everyday impactor who passionately adds value to customers.
You can play a crucial role as a Product Designer (UX), Product Management, Product Marketing, Sales, Pre-Sales, Solution Engineer, Customer Support, Quality Engineer, Security Engineer, Fullstack Engineer, Backend Engineer, Systems Engineer, Platform Engineer, AI/ML Engineer, Engineering Leadership, Research & Development, Program Management, Project Management, Site Reliability Engineers, DevOps Engineer, Architects, Risk and Compliance, Governance, Robotics, Firmware, Business Analyst, and many more. Check out what software you can develop here.
Life-long learning: As in medical and law, software is another stream where learning never stops. Given the endless possibilities, anyone can learn through experimenting in various areas of SDLC/PLDC. The various industries are at varying degrees of maturity w.r.t benefiting from software & automation. This offers opportunities for everyone to be there, learn, and make an impact.
Perks: Wonderful opportunities to learn, contribute and grow. An incredible pay (at the start and grows as you expand your potential); and excellent benefits ranging from free snacks to various other things.
Flexibility: Application software can be developed from anywhere. Certain special-purpose software needs hardware, firmware, and applications to work together. You may be required to be in the office, remote, or hybrid depending on the needs of the team and business. Often, the working hours can be agreed upon to make it convenient for a diverse and multi-location group to work cohesively.
Supply & Demand: With continuous improvement/innovation as a DNA, the software stream evolves faster than others. I call this old wine in a new bottle. Client-server or Cloud Computing, Mainframe & tomato boards to Desktop and mobile computing, High-performance computing to distributed computing; however you like to frame it, the technologies have disrupted the space significantly over the last 4 decades. The foundations of it have not changed though. Hence, knowing the foundations and catching up with the trend will get you closer to the demand where the supply is not adequate.
Educational Requirements: In the above section, I attributed this as “The Good”, I called out that you do not have an entry barrier, which sounded great. However, when wanting to switch/fit into specialized work (AI/ML, Genomics, Firmware), due to the intensity of the work and impact, specializing in the relevant field becomes a necessity. This may make it harder for a few of us to switch/fit into a job opening. This situation demands you to step up or compromise based on personal needs.
Training: While continuous learning is presented as an opportunity; for few in the industry, this can sound highly demanding. If your situation requires you to commit a certain time for personal needs (family & friends, community, and other activities); this can become a high bar to keep up with.
Long hours: While the stream provides flexibility to work the way you feel appropriate, depending on the cross-geographical team setup; you may end up stretching yourself across time zones to connect, assist, and get things done. Combine this with training and various personal needs; every day would seem longer and longer.
I’m of the opinion that you will need to invest in yourself as per your aspirations, goals, and other personal preferences. Working long hours or not, is for individuals to manage based on personal and professional needs. As you grow and progress at every stage of your career, you will learn to connect deeply to the business & team needs. As you gain experience and expand your understanding and impact, you will find ways to meet team and organization goals without burning yourself.
In my personal opinion, the most critical for a greater journey is how you deal with others. I believe that people are great and have lovely intentions. In every life situation, individuals will reflect upon their individual needs and choose what they like to do based on their personal preferences, social and economic needs, and a multitude of parameters built in their minds. The way you communicate, the way you present yourself, and influence others can leave a great mark, either creating a peak, a dent, or a crater in your relationships.
Ego: A high ego does not help you or anyone else. In a group setting (personal or professional), the family/group wins ultimately. Narrowing the gap between personal, professional, and group needs is on the individual to realize, adapt, and deliver. In a group setting, ego can play havoc in your career. Your personality is a reflection of who you are, and what you feed into your mind, which shows up eventually in the body language, the words you choose, the interactions you make, and the impact you create. In the corporate world, feedback flows from everywhere; and the reputation can get easily damaged in a flick. Watch out!
Balancing individual and team goals: Everyone who consumes your work is your customer! Every day, the activities you undertake has a direct impact on your customers (internal and external), for example, your team members, your leader, your stakeholder, your end users, and so on. Oftentimes, due to the intensity of the agile work, the team/org goals would trump your personal needs. As you work your team commitments out, allocate time and manage your growth. Strike a balance!
Making work visible: As an engineer, you are a great problem solver. Your mind can break down a complex problem diligently, and your proven methods guide you to think through the problem and invent solutions / create new problems. While you realize that your work is great, and are creating intended and unintended consequences at every step you take, you must communicate your thoughts, get buy-in, and oftentimes advertise the complexity of the situation and the impact you’re creating. 80% of the time, as an engineer you would end up undermining the greatness of your own creation. Since some of you may not like bragging about it, it is essential to have a network and a cadence to talk about your opportunities & challenges that are only on your mind. Learn to make your work visible!
Network and seek support: Your work is your brand, it is your identity, and you leave a mark on others through what you deliver. Your grand network of people will eventually become your sponsors. This is crucial for a journey that you want to create for yourself and your stakeholders and organizations. Without the network, things slow down. You don’t have to sacrifice your values, yet you need to acknowledge others' impact on your life and be thankful for the relationship you establish. The wabi-sabi concept is great to apply; you and I are imperfect beings, yet when we work together towards a cause, our strengths can create the impossible. Learn to work with imperfections as a team!
The good part is actually great, the bad and the ugly can be seen as motivations to direct the energy in the right places.
In my humble opinion, not everything that glitters is gold, and at the same time, if you look for the right stone and scratch it, it may be the gold you sought. The discipline of software engineering is vast and has immense applications in a variety of fields, ranging from education, oil & gas, finance, automobiles, health care, biotechnology, medicine, and many more. Finding your passion and a fit in an area and industry will help you establish your brand and thrive. Good luck!