As cliche as it may sound, Software is indeed everywhere. What Marc Andreessen wrote then under ‘Why Software is Eating the World‘ has exploded even more today. Companies are racing to be at the forefront of the digital revolution. There’s even talk of how software development can become so mainstream that it will be the next blue collar job. And one day soon, come the age of flying cars and trips to the moon software will power almost everything that’s out there.
In Sri Lanka, thousands join the IT industry as Software Engineers every year. It’s a thriving industry with goals of reaching USD 5 billion in revenue by 2022. So with the coders here to stay, we asked a few of our own developers what they feel are the biggest challenges and struggles they face either as engineers at a personal level or from the industry. Check out what they had to say below:
On whether he feels the software industry faces any major threats…
I personally don’t feel that currently the software engineering field is threatened. Of course, political instability is a risk and because the Sri Lankan software industry is mainly service oriented rather than product oriented, a stable policy making body is essential. However, if we look 20-25 years ahead, coding will be a mainstream skill in the labor market. This would be the case in developed as well as developing countries. Therefore, the main attraction of cheap software engineering in countries like Sri Lanka will fade away. Our software industry has to move from service oriented to product oriented in order to have positive cash flows and survive.
Moving on, the word struggle insinuates a negative connotation so don’t blame me for being negative. There are work related struggles as well as personal struggles working in this field.
Finding a good boss…
I’ve been lucky to have excellent team-leads, who are open minded and open to new things. There have been many instances, where the whole team discuss an issue and arrive at a decision and the process has uplifted the knowledge and confidence of the whole team. Contrast that with a lead, who does not listen to the team and makes decisions without any room for discussion. It can be annoying and demotivating. Unfortunately, finding a good lead can be difficult and therefore, I regard this as a struggle.
Keeping up with technology…
This is one of the most underrated issues in software engineering. Technology is moving at an incredible pace. APIs change regularly. New frameworks come up saying it would make our lives easier (ironic, I know). Simply put, if we don’t improve our knowledge, we lose the race.
Personal issues that can bring you down…
This mainly applies to software engineers working in Colombo, who come from other districts. No one really understands what it means to be away from home, stuck in a room in weekdays, eating unhealthy food. You really start questioning why you are doing a job in the first place. Honestly, it’s a struggle to find a good place to eat in Colombo (a place that is good for your wallet too). Paying rent, stuck in traffic jams wasting your fuel… you get the picture. People originally from Colombo fortunately go to their homes at least. As a software engineer, it’s best when your employer understands these issues. That your compensation not only considers the work you do for the company but also the sacrifices you make in order to do so…
On unrealistic expectations put on software engineers at times…
How do we define a perfect developer? One of the most common myths, which I see in our industry is that the belief of “I, as a developer needs to know everything”. Knowing everything is not realistic. Having a toolkit with hundreds of tools doesn’t make any sense if you use only couple of tools out of them. You might end up not knowing anything properly. Focus towards concepts and principles, master them when it comes to applicability.
If you are to use a framework for quite some time then you will have to memorize certain things, other than that don’t try to memorize any framework methods or API’s, which will depreciate over time. Knowing the capabilities is more than enough. Google is your friend, use it properly. Be a smart developer.
If you are developing a legacy application, it doesn’t make any sense to adopt latest technologies just because of the trend. There are several frameworks and technologies, which does the same thing in different ways and the developer community always claim that there is something better than what you are using at the moment. I think there is no point of adopting technologies just because they claim to be the best or there are performance improvements.
As the initial step, think whether there is anything, which you need to achieve that your current framework doesn’t support. When a framework or library claims about performance, always think whether you need a performance gain, whether you have any performance concerns in your project. Don’t rip apart and re-write your code unless there is a valid reason. Be smart when it comes to technology adoption and use it when it actually solves a problem. Think of the community support and all the other factors before adopting a new technology.
On the need to focus on the domain and business value…
There are some typical challenges that software engineers face on a day-to-day basis, both on and off work. From a work perspective, we need to improve in seeing things from the client’s’ perspective, as we frequently see incidents of misunderstanding, knowledge gaps and miscommunication. Quite often, we as software engineers tend to focus too much on the technical aspects and bypass the business value and the domain knowledge.
Software Engineers don’t have a life?
Apart from work challenges, there’s always the typical complaint – ‘software engineers don’t have a life!’, which merely accounts to the challenge of maintaining a healthy work-life balance.
I think this is quite subjective and is not eternal. There are times during our projects, where we need to give extra time and effort to our work, in order to meet a commitment to a client. Furthermore, our tech world is fast moving as technology stacks evolve faster than we can absorb them. In order to survive and grow our careers, we need to spend time to be up-to-date on these evolving technologies.
When someone looks from the outside, it may look like ‘we don’t have a life’. But from my experience, I see that almost all of us have found our rhythm by now – to work, to develop and at the same time, to enjoy our lives the way we want. Anyway, for all that’s worth, it’s not only the software engineers who find it difficult to find a work-life balance, it is almost every working man’s dilemma.
Winning the parents. With time, they will adjust…
During the very early days of my software engineering career, one of the biggest challenges I (and most of us in our generation) face is how to convince our parents and make them understand this lifestyle. There would be days you go home at 10PM, open your laptop soon after a quick dinner and start working till midnight, only to rush back to work early next morning. Add to that a full weekend at work and then the fun begins. You would continue to hear endless speeches about the importance of family time, taking care of yourselves, without working 24X7!
This is mainly because, the way, they used to work is somewhat different from how we do things in this age. It’s pretty difficult to convince them about this drastic difference. If you ask me, there’s nothing you can do; with time, they would just come to terms with it – just like we did.
Chathurangani Pathirage is an Associate Tech Lead at Zone24x7. You can follow her on LinkedIn.
I have been working as a developer for more than two years now and the one thing that keeps me going is the fascination of creating something new every day! But there are two sides to a coin. Yes, the perks of being a software engineer has is its own challenges, or should I say “struggles”!
The inevitable struggle for quality…
That one struggle, which is inevitable is the fine line between conformance to best practices and premature optimization! With all the emphasis that is placed on best practices, it is easy to get carried away with that. You could be tempted to rewrite that ‘for loop’ or remove that ‘single use variable assignment’, but remember this: You may end up writing code that is unreadable.
But then again, you may also end up with untestable code as a result. The struggle of choosing the right option is real! You could choose to “not do something” or “not do it yet”. You should not forget that this is an engineering discipline and that the success of the project depends solely on the quality of the code you deliver!
On how he keeps up with all the rapid changes in technology…
Technologies change every day! You should have the natural will to engage in active learning and strive for excellence. Obviously, you may not be able to keep track of each and every advancement in all the areas of programming. Which, in return results in the need to choose your area of interest and follow the developments in that.
Not everyone gets to work with the technology stack they love. Even if the opportunities have not been presented yet, it is mighty important to keep learning and practicing the things you love. Because, you never know when the opportunity will come knocking on your door. Mastering a language or a technology could prove to be difficult, if you do not back yourself and predict the future developments based on the current context. The struggle could prove to be immense, if you lose your direction in an industry that changes every day. Trust your instincts, take a leap of faith and let your effort determine your success!
Back to work life balance as a software developer…
The biggest struggle of them all would be time management. Let it be completing a project on time, or spending time with your family. If you don’t get a hold of how you manage your time, you might start to lose focus and purpose. It is crucial that one provides proper estimations for projects as unrealistic schedules could easily result in burnouts and unnecessary stress. It is important that we keep up with the estimations as timely delivery is a vital factor that determines the success of a project. It is important to allocate time to learn new things and enhance our knowledge base as mentioned earlier as well.
Amidst all this, it is a must to ensure that quality time is allocated to be spent with the family. Whether it’s your growth in personality, success in your job or satisfaction in your life, how you manage time determines, where you end up.
Work flow based programming and the threat they represent…
Like any other industry, software engineering has its threats as well. The rise of work flow based programming tools could be seen as one. The development of work flow based programming tools may have reduced effort and time. But it is important that engineers keep their engineering skills sharp despite the introduction of auxiliary tools. The industry has to ensure that it doesn’t end up with a pool of developers who have only specialized in workflow tools.
Having core programming skills and firm understanding of a language is very important, as the languages you know determine your thinking patterns and how you approach solving problems. Oh yes, the Sapir-Whorf theory you saw in the movie “Arrival” could very well apply to programming as well!
First to market is good as long as you have something really solid…
Increased emphasis on quick releases and aggressive marketing strategies could be seen as another threat. Focus is placed on releasing the product at the earliest time possible, so that we could satisfy the demand and capture the market, before someone else does. This could result in premature releases of products that are not ready yet.
A perfect example could be the app that took the store by storm, Pokemon Go. The app was released with quite a few glitches and bugs, which resulted in players circumventing to excel in the game. The app also failed to deliver the most important features that were shown in the trailer such as player vs player battles and trading.
This resulted in a lot of people getting disappointed and easily bored with the very few features, it was released with. The team itself has admitted that the urgency in releasing the product, resulted in such setbacks that could’ve been avoided. It is important that quality of the product is given the priority and that proper testing is carried out despite the unrealistic timelines.
It is important that the engineering practices don’t take a hit because of the limelight on marketing and business development strategies. The challenges and complexities surrounding the development processes need to be understood and engineers should be encouraged to focus on quality and disciplined practices.
They say “do it with passion or not at all”. Every job has its own struggles. What determines whether we succeed or not, is how honest we are to our profession and how determined we are towards achieving excellence. When you think of the view from the top, struggle of climbing up is nothing!
Image Courtesy: Header image from unsplash.com/@jillheyer