Today’s software engineering programs teach students traditional skills tailored to large employers—subjects like software processes, software analysis, project management, and software management. But startups and next-gen technology companies expect a dynamic and in-depth understanding of the software ecosystem and its tools from new graduates. They want grads who can build scalable systems and program for large-scale, distributed, data-intensive systems that leverage cloud computing.
Unfortunately, the standard software engineering curriculum—even at top-tier schools—places little emphasis on these skills, according to IEEE Senior Member Nitish M. Devadiga.
Devadiga is the author of “Software Engineering Education: Converging with the Startup Industry.” The study, published in the IEEE Xplore Digital Library, compares the current state of software engineering education at various universities with the needs of technology-based software startup companies. Between 2015 and 2017 he conducted interviews with Boston-area startups about their development cycles, deployment processes, engineering practices, engineering roles, code management, documentation processes, hiring requirements, and infrastructure.
Devadiga also reviewed the core courses offered in software engineering programs as well as the 15 knowledge areas covered in the Guide to the Software Engineering Body of Knowledge (SWEBOK Guide), maintained by the IEEE Computer Society. Software engineering curricula are often based on SWEBOK. He presented his findings at this year’s IEEE Conference on Software Engineering Education & Training.
“SWEBOK illuminates the development of software from its initial phase to product deployment, with a lot of emphasis on software processing and analysis,” Devadiga says. “While this knowledge is useful, it’s slowly being phased out from technology-oriented, fast-paced, Internet-scale companies. The technology used by these companies is data intensive and much different than what has been taught in universities over the last 20 years.”
Devadiga experienced this in 2016 when he joined Datarista, a seed-stage software company based in Providence, R.I., for sales and marketing data providers. He was its first engineering hire and helped lead the development of its innovative Data-as-a-Service platform. As principal engineer, Devadiga leads several critical projects and is also part of the hiring committee. Before joining the startup, he worked for MathWorks, where he led, managed, and designed projects from their inception. MathWorks employs thousands of engineers.
“At MathWorks, I understood a lot of their engineering processes and patterns,” Devadiga says. “I worked on teams of different sizes. Then I joined a startup; it’s different because there’s a lot more responsibility. There isn’t a foundation you can build on because you are the person laying the groundwork for the company.”
“In my transition from working for a major organization to an extremely young startup, I saw the requirements to grow the business, which inspired me to help improve the engineering curriculum to better cater to students and startups,” he says.
Engineers at startups can wear many hats. They may do market research and contribute to new product ideas, define and design system architecture, and handle development operations. Engineers at established companies mostly work within their specialty areas. And if new hires need training on the company’s system, employers provide it.
“At startups, you’ll get your hands dirty and be the one to fix the program when there are bugs,” Devadiga says. “The company has limited cash, so you can’t take an entire year to learn what to do.”
Developing software in a startup environment poses unique engineering challenges. Because startups need to bring their products to market quickly, applications are built iteratively, with rapid prototyping. The timing of the product release is crucial because it has a direct impact on acquiring customers and affects the bottom line. Significant delays can put a company out of business. While time to market is also vital for large companies, their software releases are typically for established products, and if they run late, such companies usually have the money to survive.
Software architecture is important to both large and small companies. But engineers for startups are more likely to play a significant role in defining the system architecture. At large organizations, most software engineers don’t have much say in project architectures, Devadiga says.
When it comes to building, deploying, and running applications, companies today rely heavily on cloud computing resources such as Amazon Web Services and Google Cloud. This is especially true for startups, as maintaining an in-house server infrastructure is not feasible or scalable, Devadiga says. Startups tend to rely heavily on external software-as-a-service and infrastructure platforms to reduce the amount of infrastructure they need.
FILLING THE VOID
Devadiga outlines several gaps in today’s software engineering curriculum. For example, a significant amount of time is spent studying and practicing strict adherence to software engineering processes. But organizations, especially technology-focused ones, use simplified, agile software processes. On the topic of software architecture, he says, the curriculum focuses more on documentation than application design, and its low-level interfaces and code structure to write clean, reusable and scalable code to build the architectural components.
Students are taught formal testing methods such as static analysis, which checks code without actually running it. This helps them understand how to test software programs, but it doesn’t address the testing of distributed systems, web services, and infrastructure resiliency. Examination of these types of user interfaces and back-end systems is essential, Devadiga says.
While students are taught in broad strokes about how these architectures work, Devadiga says, there’s not much focus on the skills needed to write clean, usable, scalable code to build the components they require.
“When you join a startup, there’s a lot of emphasis on the design of the application, reusability and clean code, and the ability to conduct and undergo code reviews, as well as the ability to think of and build systems that can scale based on users and geography,” he says.
Because startups are heavy users of cloud computing platforms, it’s assumed that most software engineering students understand how these systems work—but that’s often not the case, Devadiga says. Students need a practical understanding of infrastructure architecture design patterns, DevOps, and cloud platform services like compute instances, object storage, and queueing services. The ability to create applications that can execute in services like Amazon Elastic Compute Cloud is important.
“Students need to know these infrastructure components to design scalable solutions to today’s big data problems,” Devadiga says. “This is especially important for startups, as their entire software stack is deployed in cloud platforms.”
There are a number of online resources on these subjects that students can use to supplement their university coursework. Many are free or discounted for student members.
A SLOW PROCESS
Devadiga acknowledges changing the curriculum will be slow. “It’s not as if the current curriculum isn’t good or doesn’t work,” he says. He suggests small modifications be made to see how those help the industry. He says the Carnegie Mellon program he received his master’s from has already developed a new curriculum that fills in some of the gaps, and Devadiga expects those changes to be adopted by other schools.
“The good thing in academia is that students learn a lot of things, which gives them a better perspective on decision making,” Devadiga says. “Even if they aren’t using what they learn directly, the education they get helps them make the right decisions.”