In this section, we followed the guideline from prior work [
5,
49,
55,
58] to report the results of our qualitative study in a consistent manner, where we employ the following terminology based on the frequency of comments in participant responses: a few (0–10%), several (10%–25%), some (25%–40%), about half (40%–60%), most (60%–80%), and almost all (80%–100%). Table
2 in Appendix
B presents a summary of the prevalence of themes reported in this section.
4.1 Security Considerations within the Software Development Stages in Bangladesh
Our findings indicate that software development stages commonly used in North America [
13] might need adjustments to accommodate local norms and practices in Global South. To this end, our analysis unpacks the software development stages in Bangladesh, as portrayed in Figure
1. In the design stage of software development, implementation is conceptualized and design decisions are taken. Including developers in this stage helps the software development process and grounds the timeline and complexity of the projects. However, our participants reported that software developers do not get an opportunity to participate when design decisions are made by the clients and higher management in their company (see Section
4.4.1). Based on the outcome of this stage, the implementation tasks are allocated to the developers with fixed deadlines without any input from them.
In the implementation stage, the coding of the product takes place. Here, our findings unveil two challenging scenarios: (1) where security is not even considered in the client’s requirements (see Section
4.3.1) and (2) where security is considered in the client’s requirements but is marred by challenges of changes and collaborations (see Section
4.3.2). During implementation, our participants point towards cross-team collaborations, where the client divides a project into multiple segments and distributes it across development teams from different organizations. Such collaborations and distribution of work add to the challenges that our participants encounter during development, along with the frequent changes in clients’ requirements (see Section
4.3.2).
In the developer testing stage, testing is performed by the developer; in the code analysis stage, code is analyzed using automated tools; and in the code review stage, code is examined by an entity other than the developer. Our participants do not view the developer testing, code analysis, and code review as individually necessary stages but as possible options to select one for identifying bugs in their code. Most of them reported leveraging developer testing, where several participants mentioned using code analysis. A few participants mentioned exploiting code review, where the lack of workforce and tight deadlines constrain the developers’ scope for code review.
The primary focus of our participants during testing is to identify functional and
user interface (UI)-related bugs, where security is a secondary consideration. Even when a security bug is found, almost all participants reported going through a chain of communication for guidance on whether and how to address this issue (see Sections
4.2.1 and
4.4.3). In the Post-development Testing stage, testing and analysis processes occur after the developer has committed their code; none of our participants referred to post-development testing as a part of their software development life cycle.
4.2 Sensemaking Lenses on Software Security
Following our discussion on the lack of security considerations in the software development stages (see Section
4.1), in this section, we dive deep into understanding how software security is perceived by the developers; more broadly, software development organizations in Bangladesh.
4.2.1 Weighing Cost and Benefit.
Some participants reported how they weigh the cost and time of testing code for potential bugs against the benefit they aim to attain through this process. Their perceptions of benefit indicate providing features and functionalities the clients requested, where how they deal with a security bug if identified is measured in terms of the additional cost. For instance, P1 reported, “It totally depends on features that the clients ask for. For Security and other implementations, if there needs risk analysis, we might think of designers, bug fixers, they might need training. If a feature has security, then we think about it. Otherwise not.”
Driven by Features and Functionalities. Several participants reported that their teams perform code analysis by examining various test cases, where their primary objective is to validate the written code for specific features and functionalities. For example, P1 mentioned conducting feature testing to check and ensure consistency in the application data flow. In another instance, P4 reported, “The static analysis tools we use usually read the newly written code and provide outputs, like the name of the variables is not industry-standard, using for loop twice which is not necessary, and function is not used properly.”
We found instances where the participants reported using tools to identify functional and UI-related bugs; P8 mentioned, “Our team gives input on every page to check for any errors. Then, stress UI/UX to find if this is giving any crash or not... We prefer the Black box testing method, which is acting as a user to find UI bug, or maybe a functional bug.” A few participants also referred to load testing, where P8 said, “We use application named Jmeter to check how much traffic the software can handle.”
Security Bug: “Is it critical?”. Almost all of our participants mentioned that if they identify a security bug in their code, they first reach out to their team lead, asking for their guidance on how to address the issue. Then, in consultation with the client, the software company asks the developers to take the necessary steps. The client and the higher management in software organization speculate the risks associated with a security bug and consider the time it would take to fix it. Upon considering the product delivery deadline and the criticality of the security bug, software developers might be asked to ignore that bug. One of our participants (P6) said, “If a security bug is identified when the deadline is nearby and if it requires a long time to fix, the client decides based on the criticality. If it [bug] is critical, then it goes to the backlog, and if the bug is normal [speculated risk is low], then he [client] asks to release it [product; without fixing bug]. We [software developers] do not usually have any say on this.”
How the client and higher management in a software organization speculate the risk associated with a security bug might lack transparency and appropriate metrics. In one instance, a six-digit CAPTCHA was only working for a five-digit input; however, the software developers working on that project were asked to ignore this flaw and proceed with the delivery of the product. Our participant, P2, reported that his company’s action on fixing a security bug (if identified) directly relates to how they view the impact of not fixing that bug on the product’s overall success.
4.2.2 User Data Protection.
Some participants view software security as a means of protecting user privacy. While software companies deal with user data, P1 reflected on the care these organizations should take in the process; he said, “What I think about software security is that data is very valuable. It is valuable when it goes to a third party. They can do good business with that data or harm us with it. So, we [software organizations] should ensure that it [user data] is protected.”
As we asked participants about their software security strategies, a few referred to their policy of encrypting user data while storing it in the server. Here, the sensitivity of user data motivated their companies to deploy encryption protocols. For instance, one of our participants (P10) worked on a project for a healthcare organization that would store and maintain sensitive information of marginalized groups and, thus, needed encryption to secure users’ health data. Another participant, P11, worked on developing a banking application. He shared his view of the significance of protecting users’ financial information. Although he did not mention any software security strategy taken during the development phase, he reported that his company has mechanisms to check and ensure the integrity of data communicated over the Internet.
These participants reported that they are not responsible for deploying such security protocols (e.g., encryption). Instead, the higher management at their organization takes care of that. We noticed a lack of understanding among our participants about how encrypting user data or network-level security protocols work in sync with the software they develop, where P6 pointed out that the lack of collaboration between the management and software developers leaves them with a blur in understanding these security mechanisms.
4.2.3 Preventing Source Code Theft.
Most participants reported concerns about the theft of programming code they write in software development, where they mentioned taking steps to protect their source code. For instance, P2 said, “As we have competition, there are risks posed by intruders from other companies. [To protect against them], we use servers with secure firewalls, antivirus as endpoint security, and paid third-party software to detect threats.” Our participants also discussed the steps they take in terms of access control and management to prevent source code theft by competitors.
Outsider Threat Control. Several participants mentioned privileged access implementation for a group of IP addresses to isolate the development environment from outside threats. In this context, P2 reported that only the IP addresses from their office would have access to the source code repository. Another participant (P1) stated that his company mandates VPN authentication to restrict unexpected users; he said, “For proper authentication, we use VPN, and we keep source code in a private repository [maintained by his company] instead of using third-party storage services.” The participant further added, “When we use pull, push in the code, our company mandates to use their own VPN. Since now it has been working from home, therefore, we can not modify source code without using company VPN. And during our usual in house work, we used to work on a desktop which was password protected from administration.”
One participant, P8, further emphasized using secure VPN authentication while working from home: “For remote working, we must get connected to the VPN provided by my office. We cannot connect remotely through any random PC.” A few participants mentioned using a one-time password (OTP), certificate validation, and a JWT token for secure authentication to their code repository.
Insider Access Management. In addition to tackling vulnerabilities posed by intruders from outside an organization, the honesty and integrity of employees are crucial to prevent source code leakage. One of our participants (P13) shared the experience of source code leakage through a former employee at her company; she reported, “Our [software] developer has left the company, and they took our code base and the client-list [without authorization]. It is like, company A was developing software for the client but the developer of company A left without giving any notice and took the code base as well. Later, he joined company B and used the stolen code for that company.”
In these contexts, most participants mentioned the use of role-based access control to software development resources, where the employee’s needs and their position in the hierarchy of an organization are taken into account. We found that software companies maintain caution in sharing source code with a new employee and only share a part of the code base that the employee would need. To illustrate the strategy, P1 explained, “When a new employee joins the team, we give them a part of the source code and some guidelines for working on it. In the meantime, we create branches in code to avoid conflict as we will merge.”
Cyber Hygiene. Among the participants who discussed access control as mentioned above, most believe that additional measures are unnecessary for software security. A few of them shared their perceptions that Cyber hygiene further contributes to securing their workspace from outsider threats. They referred to the guidelines from their employers for secure Web browsing to avoid computer malware and online scams; P7 stated, “Our [development] environment is secure enough. We do not need to have any other security measures in mind; just a few more things we consider when we visit different websites, like, we should not click on a link unnecessarily.”
One of our participants (P3) reported satisfaction with the device authentication that he believes adds to the measures they take in the context of software security, as he said, “On top of that [access control and version management], my working laptop is secure with password—so, a lock is there, and no one can access. So, we have a low risk of security vulnerabilities.”
4.3 Security Practices: Role of Clients
As we looked into how software security was handled in Bangladesh, we observed that the decision to implement security features largely depends on client requirements. Here, P8 commented, “If they [clients] are not bothered by it, then why should we? We just simply do as we are told, following [client’s requirement] the best we can.” Several participants indicated that they do not receive any monetary benefit for identifying a security bug or deploying a security feature unless the clients explicitly ask that as a part of their project requirement. Thus, they do not perceive security as adding value to their performance or the company’s reputation. One of our participants (P3) stated, “There is not like that something must be done with security... If security is not adding monetary value to us, then we are not doing anything extra.” Therefore, in this section, we look beyond how security is handled during software development and focus on understanding the impact of client requirements on security practices.
4.3.1 Security Is Not a Part of Client’s Requirements.
First, we look deeper into the scenario where security is not included in the client’s requirements. Most participants indicated that clients typically do not ask for security as a part of their requirements. However, a few participants attempted to convince their clients to allow additional time and budget for implementing security protocol, such as access control to server that they considered necessary for secure functioning of the product. These participants reported their frustration during the interview with us, as they could not convince the clients in these scenarios, where they pointed to the knowledge gap and the client’s damage control strategy.
Knowledge Gaps. One of our participants (P1) shared his experience when he failed to make the client realize the importance of access control implementation on their product: “I worked in an iterative application improvement project for a client. Even though I gave them all the documents about the server, the importance of an access control layer, and the consequences of avoiding it, the client did not consider those security requirements. He did not think it was necessary.” A few participants wanted to incorporate secure cloud storage into their developed product. However, they had to set aside the plan, as their clients did not agree to allocate the necessary resources for implementation.
Damage Control. One participant, P7, referred to the damage control strategy of clients, where they do not typically consider security as a part of project planning. Rather, after the final product is released, clients get back to the software developers to fix bugs if an unexpected incident happens concerning security. The comment from P11 echoes P7’s perspective on the client’s strategy: “Until the end users are affected by any security incidents, they [clients] do not care much about security. Security comes when something has happened.”
4.3.2 Security Is a Part of Client’s Requirements.
As we look at the scenario where security is included in the client’s requirements—mentioned by some of our participants—almost all of them reported that security is perceived as a secondary component in software development. A few of these participants worked on application development for the banking sector and e-commerce, where the clients specified some security requirements (e.g., access control in the database, HTTPs proxy server). These participants shared with us the challenges they had encountered in deploying security schemes due to the delay caused by frequent changes in clients’ requirements and varying time zones. As they mentioned, when the project timeline is delayed, functional implementations become a sheer focus, even at the cost of ignoring security requirements. Moreover, such challenges are not limited to security implementation only but also extend to the overall scope of their project.
Frequent Changes in Requirements. As pointed out by our participants, their clients often fail to maintain consistency in their requirements, where they keep updating the product design throughout the software development process, making it difficult for developers to cope with the changes in workflow. One of our participants (P13) said, “These [frequent changes in clients’ requirements] are very common. A client approved a design, and after taking the approval, we started working on it. All of a sudden, the client changed his mind and said, ‘Who approved the design? It does not look good.”’ Another participant (P15) expressed his frustration that, in some cases, clients change their preferences at a point when the development team has already deployed substantial resources and completed one-third of the project.
Varying Time Zones. Our participants reported that they need to hold meetings with the software development teams from different countries, where the client divides a project into several segments and distributes it across multiple teams. For these meetings with the teams situated in varying time zones, developers in Bangladesh have to conform to the time set by the upper management at their company. While little to no say in scheduling meetings could affect the work-life balance of software developers, the physical struggle to keep awake at midnight leads to communication gaps, as mentioned by our participants. For instance, P6 stated, “When two teams are in two countries...we needed to stay awake at midnight for that. Due to this struggle, we did not realize the scope of the whole project and the extent of our responsibility within the project.”
4.4 Security Practices: Role of Organizational Culture and Leaderships
Following our discussion on the role of clients in the previous section, we now shed light on the role of software development organizations that substantially impact developers’ security practices in Bangladesh.
We observed that almost all participants reflected on their company culture, which dictates security practice as the responsibility of clients and the higher management. One of our participants (P1) reported, “We [software developers] do not follow any default security standards. What we do is, management will give us a project-by-project guideline, and we will work on that...These securities are handled by our CEO himself. If any security issue occurred [after product release], then they [clients] report to our CEO.” As this participant elaborated, their organization’s Human Resources (HR) department communicates with the client to understand their requirements. Then, the higher management decides whether and how they could fulfill those requirements based on the availability of time and resources.
In cases where the client and management consider security, we found multiple challenges, including top-down authority, discord in teams, and a long chain of command. These challenges hinder the participants’ efforts in identifying and addressing security issues that hurt their progress toward the project deadline. Further, these challenges cause delays in a project, and therefore, lead development teams to ignore security testing and focus on project completion by the deadline. For instance, P5 mentioned, “Sometimes we love to do it, but time doesn’t allow us to test for every method and function. Due to time, we can’t do unit test for every method and function. We just work to satisfy the quality of the product and sometimes we just complete the project by deadlines. We have limited resources, and deadlines are important.”
4.4.1 Top-down Authority.
Our participants referred to two prime aspects of top-down authority in decision-making. First, software developers are not included in the discussion loop when the clients and higher management in their company set the project goals and timeline, or when the client demands a change in the middle of a project. Due to such polarization in decision-making, a gap emerges between the time for project completion estimated by the client and higher management and the time it takes for the developers to meet the deadline. Most participants reported that the workaround of the client and management to handle this gap is to cut off security-related implementations. For instance, P8 referred to an incident where the client instructed developers and higher management in his company to ignore a security flaw (a six-digit CAPTCHA was only working for a five-digit input) to deliver the product on time.
Second, there is a limited scope to open a dialogue from the developer’s end to readjust the project timeline when a security bug is identified and needs to be fixed. A few participants even feared losing jobs if they failed to meet the product delivery deadline. One participant, P5, said, “Deadlines play a big impact in development...sometimes, developers lose jobs for not meeting deadlines from time to time.” Thus, our participants do not feel motivated to identify and address the security vulnerabilities in their code. Instead, they view security as a roadblock to meeting their deadlines. One of our participants (P2) reported, “From a developer’s perspective, we kind of do not care about security. In general, security always slows down the [software] release process. We [developers] just work to satisfy the quality of the product; we just complete the project by deadlines.”
4.4.2 Discord in Teams.
About half of our participants pointed to the polarized power exercised by the teams from other countries, leading to challenges in cross-country collaborations. One of our participants (P10) reported that in a cross-country collaboration, developers in his company would not have any say on the task allocation and management, where he further added, “Different teams work in different ways and it becomes difficult to find a middle ground—it delays the security implementation.” In the context of authorization and authentication, P1 explained, “Source code level security is handled by the developer in the other team by OAuth/OAuth2. We do not know much about how those processes work.” These insights from participants indicate the lack of communication between cross-country teams, contributing to the gap in developers’ understanding on how security requirements are handled in their collaborative workflow.
4.4.3 Long Chain of Command.
Almost all of our participants mentioned that if a security bug is identified in their code, then they have to go through a long chain of command to get instructions and guidelines on how to address that issue. In such situations, developers are not authorized to deviate from the workflow specified by the client and the higher management in their company. To this end, some participants referred to the delay incurred at the client end during decision making, where P13 commented, “...The projects get lengthy; decision lag is created, and even at times, five-line content approval takes 15 days [at the client’s end]. We need to go through a long process... For any decision, a client representative [who communicates with the HR and higher management of a software company in Bangladesh] has to depend on a senior executive, and his senior waits for his CEO’s quote. Who takes which decision in this long chain remains very unclear to us during software development.”
4.4.4 Lack of Training.
Most participants reported joining the software development company without any training on software security, where P4 said, “I really did not have any knowledge about security during my academic period. With zero knowledge, I joined an office [software company].” A few participants mentioned gaining basic knowledge on security during their academic preparation but failed to leverage that in professional settings; P5 commented, “Academia helped me learn the fundamentals... However, academic lectures need to accommodate adequate hands-on experiments, aligned with the needs of [software] industry.”
Almost all participants pointed to the lack of security training in their company; one of them (P8) commented, “My company taught me nothing. Here you have to learn everything by yourselves or from senior colleagues.” While a few participants mentioned that their companies arrange software security training, they noted that those training sessions are not offered regularly. For instance, P9 reported that he did not receive any training when he joined his company. However, they later trained with a group of new employees. In these contexts, most of our participants reported ad hoc security learning from their team members, where P1 described how he learned about implementing “access control”: “When I got into issues with the code [for access control] on GitHub, I asked experienced colleagues during the team meeting. They gave suggestions and shared their experiences.” Our participants also reported using YouTube tutorials and the websites they found through Google search (e.g., stackoverflow.com) as familiar sources of learning about software security.