The Power of Research in Software Engineering: Why Every Developer Should Make It a Priority
Published: 2023-02-22 04:18:52

As a software engineer, you know that building software solutions requires tackling complex problems. However, have you considered how research can help you overcome these challenges more effectively? In this blog post, we'll dive into the importance of research in software engineering and provide practical tips for conducting effective research.

## TLDR

Research is a crucial tool for software engineers that can enhance problem-solving, transfer knowledge, stay ahead of trends, and promote innovation. By defining your research question, choosing the right method, using reliable sources, analyzing results carefully, collaborating with others, using agile methodologies, focusing on user needs, and documenting your research, you can conduct effective research that can lead to more effective software solutions and a competitive edge in the industry. Prioritize research and reap the rewards in your next software development project.

---

![Tom Gault - Genome Research](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jlt51ixx7jbv3h4u3j87.png)

## Why Research is Vital for Software Engineering

Research is a key tool in a software engineer's toolkit that can provide several benefits, including:

Enhance Problem-Solving: Research helps to identify and understand the root cause of a problem. This understanding can help you develop better solutions, saving you time and resources in the long run.

Transfer Knowledge: Research can help you transfer knowledge from one domain to another, particularly when you're working on software for a new or unfamiliar field.

Stay on Top of Trends: Research helps you stay up-to-date with the latest technologies and trends. Staying ahead of the curve can make sure that the software you're developing is using the most effective techniques and technologies.

Promote Innovation: Research can lead to innovative solutions that may not have been considered otherwise. This is particularly critical in fields like machine learning and artificial intelligence.

## Effective Research Tips for Software Engineers

Define Your Research Question: Defining your research question is critical to ensure that the research is relevant to the problem you're trying to solve. This will help you focus your research and obtain results that are actionable.

Choose the Right Research Method: There are various research methods, such as surveys, case studies, and experiments. Choosing the right method is critical to obtain the most relevant results.

Use Reliable Sources: Ensure you use reliable sources like academic journals, conference proceedings, and reputable online sources. Relying on credible sources enhances the credibility of your research.

Analyze Results Carefully: Carefully analyzing the results can help you make informed decisions and draw meaningful conclusions that apply to your problem.

## Why You Should Prioritize Research as a Software Engineer

As a software engineer, research should be a priority. It can help you make informed decisions, tackle complex problems, stay ahead of the curve, and develop innovative solutions. By following the tips above, you can conduct effective research that can lead to more effective software solutions.

Don't let research take a backseat to other pressing matters. Prioritizing research can give you the edge you need to succeed in the ever-evolving world of software engineering.

## Some additional tips to make your research process more effective include:

Collaborate with Others: Collaborating with others can help you obtain different perspectives and insights into your research problem. This can lead to more diverse and innovative solutions.

Use Agile Methodologies: Agile methodologies like Scrum can help you integrate research into your software development process. This can help you identify and address problems early in the development cycle, reducing the overall cost of development.

Focus on User Needs: Researching user needs can help you develop software solutions that meet their needs and requirements. This can lead to more satisfied users, better user experiences, and improved software adoption rates.

Document Your Research: Documenting your research can help you track your progress, avoid repetition, and maintain a record of your findings. This can help you save time and resources and avoid starting from scratch in future projects.


## POC: Proof of Concept

![Tom Gault - POC](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a2wmb98xj9fscs5gjjo9.png)

A proof of concept (POC) is a preliminary demonstration of the feasibility and potential of a software solution or technology. It is typically used to validate a concept, test a hypothesis, or explore the practicality of an idea before investing time and resources into a full-fledged implementation.

A proof of concept can take various forms, such as a prototype, a simulation, a mockup, or a simple implementation of a small part of the system. The main goal of a POC is to provide evidence that a software solution can work in practice and meet the requirements and expectations of stakeholders.

The POC process involves defining the problem statement and objectives, selecting the appropriate tools and technologies, designing the POC architecture, implementing the POC, and evaluating the results. The evaluation should focus on the technical feasibility, functionality, usability, and performance of the POC.

A successful POC can provide many benefits for software development projects. It can help reduce the risk and uncertainty associated with a new technology or approach, provide stakeholders with a tangible demonstration of the potential benefits of a software solution, and facilitate decision-making and planning for future development efforts. However, it is important to keep in mind that a POC is just a starting point and that further development and refinement may be necessary to achieve a fully functional and robust software system.

## Broad View of Research

Research in software engineering can take various forms, including empirical studies, case studies, experiments, and surveys. These methods can be used to investigate different aspects of software development, such as software design, testing, maintenance, and evolution.

The ultimate goal of research in software engineering is to improve the quality, reliability, and maintainability of software systems. By conducting research, we can identify the strengths and weaknesses of existing methods and tools, propose new approaches, and evaluate their effectiveness.

Furthermore, research in software engineering can help bridge the gap between academia and industry. It can provide insights into the practical problems faced by software development teams and inform the design of new tools and techniques that are tailored to their needs.

Reflecting on the tension in human-computer interaction research between
* narrow truths proved convincingly by statistically sound experiments
* broad 'truths', generally applicable, but supported only by possibly unrepresentative observations.

The former satisfies the gold standard of science but are few and narrow compared to the decisions designers make daily. The latter provides pragmatic guidance but is at risk of over-generalization.

To relieve the tension through a **certainty-shell** structure we can recognize three nested classes of results:
* Findings: well-established scientific truths, judged by truthfulness and rigor;
* Observations: reports on actual phenomena, judged by interestingness;
* Rules of thumb: generalizations, signed by their author but perhaps incompletely supported by data, judged by usefulness
with freshness as a criterion for all three.

This tension is as real in software engineering as in human-computer interaction. Observations and rules of thumb provide valuable practice guidance when findings are not available. They also help to understand and lay the groundwork for the research that will yield findings in time.  

## Questions, Results, and Validation in Software Engineering
Research questions are the foundation of any research project. They guide the research process by identifying the specific problems or issues that the research aims to investigate. Research questions should be clear, concise, and focused, and should reflect the objectives of the research project.

Once research questions have been identified, the next step is to gather data to answer them. This can involve conducting experiments, surveys, case studies, or other research methods. The data collected should be analyzed carefully to draw conclusions and answers to the research questions.

However, it is important to validate the answers obtained from the research. This involves verifying that the conclusions drawn from the data are sound and accurate. Validation can be achieved through various means, such as peer review, replication of the research, or cross-checking with other sources of information.

Validation is critical because it ensures that the research findings are reliable and trustworthy, and can be used to make informed decisions and inform further research. Without validation, there is a risk of drawing incorrect conclusions, which can have negative consequences for software development projects.

## Types Questions 

Research questions may be about methods for developing software, methods for analyzing software, the design, evaluation, or implementation of specific systems, generalizations over whole classes of systems, or the sheer feasibility of a task

|  Type of question | Examples |
| ----------------- | --------|
|  Method or means of development | How can we do/create (or automate doing) X? What is a better way to do/create X? How do I choose between X and Y?                                                                | 
|  Method for analysis  | How can I evaluate the quality/correctness of X? How do I choose between X and Y?|
|  Design, evaluation, or analysis of a particular instance | What is a (better) design or implementation for application X? What is property X of artifact/method Y? How does X compare to Y? What is the current state of X / practice of Y? 
|Generalization or characterization| Given X, what will Y (necessarily) be? What, exactly, do we mean by X? What are the important characteristics of X? What is a good formal/empirical model for X? What are the varieties of X, and how are they related?
| Feasibility|  Does X even exist, and if so what is it like? Is it possible to accomplish X at all? 

## Types Results
Research yields new knowledge. This knowledge is expressed in the form of a particular result. The result may be a specific procedure or technique for software development or analysis. 

| Type of result | Examples |
|--|--|
|Procedure or technique | New or better way to do some task, such as design, implementation, measurement, evaluation, and the selection from alternatives. Includes operational techniques for implementation, representation, management, and analysis, but not advice or guidelines|
| Qualitative or descriptive model | Structure or taxonomy for a problem area; architectural style, framework, or design pattern; non-formal domain analysis. Well-grounded checklists, well-argued informal generalizations, guidance for integrating other results,
| Empirical model | Empirical predictive model based on observed data|
| Analytic model | Structural model precise enough to support formal analysis or automatic manipulation.
| Notation or tool | Formal language to support technique or model (should have a calculus, semantics, or another basis for computing or inference). An implemented tool that embodies a technique|
| Specific solution | Solution to application problem that shows the use of software engineering principles – may be design, rather than implementation. Careful analysis of a system or its development. Running a system that embodies a result; may be the carrier of the result, or its implementation may illustrate a principle that can be applied elsewhere
| Answer or judgment| Result of a specific analysis, evaluation, or comparison|
| Report | Interesting observations, rules of thumb| 

## Types of Research Validations
Good research requires not only a result but also clear and convincing evidence that the result is sound

| Type of validation | Examples|
|-|-|
|Analysis| I have analyzed my result and find it satisfactory through ...normal (analysis) … rigorous derivation and proof (empirical model) …data on controlled use(controlled) … carefully designed statistical experiment) experiment|
| Experience|  My result has been used on real examples by someone other than me, and the evidence of its correctness/usefulness/effectiveness is …qualitative model) … narrative(empirical model, … data, usually statistical, on practice (notation, tool) … comparison of this with similar results in technique) actual use |
| Example | Here’s an example of how it works on (toy example) … a toy example, perhaps motivated by reality (slice of life) …a system that I have been developing |
| Evaluation| Given the stated criteria, my result... (descriptive model) … adequately describes the phenomena of interest … (qualitative model) … accounts for the phenomena of interest… (empirical model) … can predict … because …,  or … gives results that fit real data … Includes feasibility studies, pilot projects |
|Persuasion| I thought hard about this, and I believe... (technique) … if you do it the following way, …(system) … a system constructed like this would …(model) … this model seems reasonable. Note that if the original question was about feasibility, a working system, even without analysis, can be persuasive |
| Blatant assertion| No serious attempt to evaluate result |



## In conclusion

![Calvin & Hobbes - overwhelmed ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nt0pddtx3wb6888y7hbw.jpg)

As a software engineer, research is a critical tool that you cannot afford to overlook. It can help you enhance problem-solving, transfer knowledge, stay ahead of trends, and promote innovation. By following the tips above, you can conduct effective research that can lead to more effective software solutions and a competitive edge in the industry. Make research a priority and reap the rewards in your next software development project.

## Reference:
* What Makes Good Research in Software Engineering?](https://www.cs.cmu.edu/~Compose/ftp/shaw-fin-etaps.pdf) Carnegie Mellon’s School of Computer Science
* https://unsplash.com/photos/gKUC4TMhOiY
* https://www.buzzfeednews.com/article/ariannarebolini/comics-science-technology-stem-tom-gauld
* https://sciencepolicy.colorado.edu/students/envs_5000/