Computer Science, Software Engineering, and Software Development in SR&ED
The development of software is the subject of considerable debate at the CRA and, more generally, there is confusion about what does and does not qualify for SR&ED within this area. This post will delve deeper into software development in SR&ED.
When applying for SRED tax credits the applicant must specify a field of science or technology using CRA specific codes. This selection is of utmost importance as it serves to classify the project into the correct area where a “scientific or technological advancement” will be claimed. However, there are nuances between areas of specialization that need to be appropriately and accurately delineated to avoid any potential confusion.
What follows is a detailed description of three key software terms and how they are broadly interpreted by the CRA. These particular categories will be defined using standard definitions and then further explained from a CRA lens. (It is assumed that the reader is sufficiently familiar with the process of applying for SR&ED tax credits. If you are looking for more general information about the application process, please visit our website and blog for additional information). There is not a code for “software development” in SR&ED but there are two codes that the work may fall under, as well as computer programming (eligible support work).
The following will be covered in this article:
- 1.02.01 – Computer sciences definition
- 2.02.09 – Software engineering and technology definition
- Computer Programming (Eligible Support Work)
The understanding of these constructs is especially important when submitting an SR&ED claim as the selection of the field of science or technology (Line 206 of the T661 form) will affect the treatment of the materials submitted, who will ultimately review them, and the possible outcome of the application.
In order to provide more clarity, the following sections will contain a brief description of each of the constructs, both from a CRA and an academic viewpoint. Following the definitions will be a section comparing and contrasting the two discipline codes to provide additional clarity. This will be followed by a discussion of software/computer programming, which in and of itself is not a subject code, however, it does constitute eligible support work for SR&ED claims, so it is important that the true definition is completely understood.
1.02.01 – Computer sciences
Definitions
CRA Definition
In the T4088, Guide to the T661 – Appendix 1 (Fields of Science or Technology), Computer Sciences is listed under Natural and Formal Sciences -> Computer & Information Sciences. The CRA does not have a specific definition for this term.
Wikipedia
Computer science is the study of processes that interact with data and that can be represented as data in the form of programs. It enables the use of algorithms to manipulate, store, and communicate digital information. A computer scientist studies the theory of computation and the practice of designing software systems.1
Its fields can be divided into theoretical and practical disciplines. Computational complexity theory is highly abstract, while computer graphics emphasize real-world applications. Programming language theory considers approaches to the description of computational processes, while computer programming itself involves the use of programming languages and complex systems. Human-computer interaction considers the challenges in making computers useful, usable, and accessible.
Dictionary.com
Computer Science. Noun. the science that deals with the theory and methods of processing information in digital computers, the design of computer hardware and software, and the applications of computers.2
University Research Areas
The top three universities in the country for computer science studies (according to the 2019 MacLean’s ranking) are the University of Toronto, the University of British Columbia and the University of Waterloo, respectively. U of T entices prospective undergraduates with the descriptive tag line “If you love using technology nothing is more exciting than creating it.” The course calendar defines the field as follows:
Computer science is concerned in the broadest sense with the study of computation and applications of computing. Its development has been stimulated by collaborations with many areas including engineering, the physical and life sciences, mathematics and statistics and commerce. However, computer science is much more than a set of techniques used in these application areas. Computer science as a discipline encompasses a wide range of research areas.4
At the University of Waterloo, Computer Science is housed in the Faculty of Math (it’s in the Faculty of Arts & Science at U of T, whereas UBC houses the discipline in the Faculty of Science). The Director of the Waterloo School of Computer Science says their researchers seek to uncover developments in the fields of
“core work on systems, theory, AI and machine learning, database and programming languages, to human-computer interaction, information retrieval, scientific and mathematical computing, and DNA and quantum computing.”5
Graduates would compete for jobs in fields such as programmer/analyst, IT consultants, or web/mobile app developer. 6
Required courses in a computer science program typically include:
- Introduction to Computer Science/Designing Functional Programs
- Elementary Algorithm Design & Data Abstraction
- Calculus 1 & 2
- Algebra and Linear Algebra
Other sources
According to Newell and Simon, the 10th Turing Lecturers, computer sciences is
“the study of the phenomena surrounding computers. . . The machine-not just the hardware, but the programmed, living machine-is the organism we study.”7
Further, the TechTerms dictionary defines computer science (lower case) as
“the study of computers and computing concepts. . . including both hardware and software as well as networking and the internet.”
Computer Science (upper case) refers to
“the academic major, which includes courses such as introduction to computing, fundamental programming, data structures, analysis of algorithms, and computing theory.”9
2.02.09 – Software engineering and technology
Definitions
CRA Definition
Software Engineering is listed under Engineering and technology -> Electrical Engineering, Electronic Engineering, and Information Technology. Again, the CRA does not have a specific definition for this term.
Wikipedia
A software engineer is a person who applies the principles of software engineering to the design, development, maintenance, testing, and evaluation of computer software. Prior to the mid-1970s, software practitioners generally called themselves computer scientists, computer programmers or software developers, regardless of their actual jobs. Many people prefer to call themselves software developer and programmer, because most widely agree what these terms mean, while the exact meaning of software engineer is still being debated.10
Software engineering includes both the process of building software and the study of software production as a business11
Dictionary.com (Software + Engineering)
Software (noun)
- Computers: the programs used to direct the operation of a computer, as well as documentation giving instructions on how to use them.12
Engineering (noun)
- the art or science of making practical application of the knowledge of pure sciences, as physics or chemistry, as in the construction of engines, bridges, buildings, mines, ships, and chemical plants.
- the action, work, or profession of an engineer.13
University Research Areas
The University of Waterloo defines software engineering as a discipline that
“applies both computer science and engineering philosophy, principles, and practices to the design and development of software systems.”
Future software engineers at the University of Waterloo would study in the Faculty of Engineering. According to the FAQs, software engineering places
“greater emphasis on the entire software development process, from idea to final product and applies more systematic practices to help ensure that products are reliable and safe.”15
Students in this field also have the option to take advantage of the co-op work/study program and graduates will find positions in the fields of software development, graphics controllers and software quality control. The University of Toronto offers software engineering as a stream of computer science offering greater concentrations of “the engineering side of the discipline, including computer systems and core applications.”16
Required courses typically include:
- Programming Principles
- Classical Mechanics
- Introduction to Methods of Software Engineering
- Algebra for Honours Mathematics
Other sources
Typically, a software engineer will be responsible for writing code to meet user interface specifications and providing input to functional design, testing and troubleshooting hardware, software components as well as the development of the tools, methods and theories that support the production of software.17
Suitability of the term
From Wikipedia:
One could argue that software engineering implies a certain level of academic training, professional discipline, adherence to formal processes, and especially legal liability that often are not applied in cases of software development. A common analogy is that working in construction does not make one a civil engineer, and so writing code does not make one a software engineer. Furthermore, because computing doesn’t utilize the methods of mathematical physics common to all conventional engineering disciplines, it is more appropriate to call those engaged in this occupation as software developers or similar.18
Computer Science & Software Engineering – Similarities/Differences
Clearly, there are several similarities between the constructs of computer science and software engineering and technology, the most obvious being the study of computers and their processes. The fields are so nuanced that the very first question on the University of Waterloo’s Software Engineering FAQ page is “What is the difference between computer science, computer engineering and software engineering?”
- Computer Science (CS) focuses on understanding, designing, and developing programs and computers. At its core, Computer Science concentrates on data, data transformation, and algorithms. Advanced courses present specialized programming techniques and specific application domains. The CS program is less structured than the CE and SE programs, giving students more flexibility to build depth or breadth in a variety of application domains or in the fundamentals of Computer Science.
- Software Engineering (SE) deals with building and maintaining software systems. It has a greater emphasis on large software applications than Computer Engineering. It is more applied than Computer Science, placing greater emphasis on the entire software development process, from idea to final product. It is also more disciplined than Computer Science, applying more systematic practices to help ensure that products are reliable and safe.
To better comprehend the differences between the two programs one can compare the pertinent university academic course lists, which outline the specific requirements of each discipline. For an excellent summary of the differences and sample courses, we recommend reading: https://engiegirlsatuwaterloo.wordpress.com/2013/08/29/computer-engineering-software-engineering-or-computer-science/
Computer Programming
Definitions
CRA Definition
Out of the three items described, this is the only concept that is defined by the CRA: “Computer programming is preparing and coding operating instructions for a computer.”
The CRA considers computer programming one of the eight categories of eligible support work relating to the SR&ED tax credit program that can be claimed if it is “commensurate with the needs of the basic or applied research or the experimental development work undertaken in Canada.”20 This support work must directly affect the project being carried out, in such a vital way that if the support work were not undertaken the project could not proceed.
University Course Descriptions
If you were to take a course in computer programming at the University of Toronto you would be
“programming in a language such as Python. Elementary data types, lists, maps. Program structure: control flow, functions, classes, objects, methods. Algorithms and problem solving.”21
Fundamentals of programming at Waterloo includes such things as software design processes, language syntax, control constructs and searching and sorting algorithms.22
While programming makes up an essential base for a computer science degree program, by itself it is not considered a field of science or technology by the CRA – so taxpayers must select the correct field from the two above that best represents the field in which an scientific or technological advancement has been achieved.
Summary
There is considerable debate in these fields at the best of times, but this is compounded by a lack of clarity regarding CRA in terms of their definitions and the distinction between all three sections. While the CRA has recently re-established a software committee, its presentation is only available in text format on the website. It would be beneficial to all stakeholders if additional clarification was provided regarding these terms. In the coming weeks, we will be clarifying the CRA scenarios that have been provided, so that readers can better understand the field in which they are claiming an advancement.
Conclusion: Software Development and SR&ED
The purpose of this document was to provide clarity for applicants to the SR&ED tax credit and software development. It lists two specific technology codes, 1.02.01 – Computer Sciences and 2.02.09 – Software Engineering and technology that often cause confusion as their fields tend to overlap, as evidenced above. It is important to make the appropriate distinction between these two fields, as nuanced as that distinction might be, as the appropriate selection will impact your claim results. Software development is an eligible field for SR&ED work however it is imperative that the applicant determine whether the advancement was in the field of computer sciences, software engineering or whether it was eligible support work in the form of computer programming.