Back to Homepage

Credit: unknown


Andrew Begel

Studies of software engineering expertise (Li et al. 2015) make it pretty clear that a fundamental skill in being a great software engineer is identifying, analyzing, and ultimately deciding between tradeoffs. As we've discussed, no software can achieve all of the qualities it might need to simultaneously: a high-performance implementation is usually less maintainable, since it may use obscure optimizations that are harder to understand and change; highly secure implementation is likely to be less testable, because it will be harder to set up environments that simulate both intended and unintended access to a system. Good engineers know that these tradeoffs exist, can reason about them, and can choose between them, in line with a project's goals.

Today, we'll practice some of these tradeoff analysis skills by evaluating two different APIs that try to accomplish the same goal. Your job, individually will be to analyze the tradeoffs in the APIs and then choose one, forming an argument for why. (This is a frequent and realistic task in practice; what's artificial about today is that you'll be doing it in only 50 minutes. Most of these evaluations would span at least a day or two of playing with an API to more deeply understand it's tradeoffs and their relationship to an actual project.

Here's the scenario I want you to imagine yourself in: you're building a new blog for a client that has very particular visual design tastes. Every time your designer brings in a mockup, they provide detailed feedback about low-level visual design details such as fonts, whitespace, alignment, and they frequently change their mind about their choices. Your designer is patient—they don't get frustrated, but instead patiently respond to feedback with new designs—but it's pretty clear that even after you build this site, there's going to be a steady stream of visual redesign requests. That's okay: you and your designer are billing by the hour. But you need a blogging platform that's going to give you the most power to customize the visual vocabulary of the site. At the same time, the client is quite picky about formatting her posts as well. She likes to incorporate images and other media into her posts.

Investigate (25 min)

Because we have limited time, you're going to focus your tradeoff analysis on Medium and Research both platforms and form an argument for why one is the better choice than the other for this particular client.

Here are some strategies you may want to use:

Share (5 min)

Discuss your argument with your neighbor. Are you persuaded by their argument? Did you persuade them? What shifted your opinion, if anything?

Discuss (10 min)

I'll call on pairs to discuss their proposal.

Further reading

Paul Luo Li, Andrew J. Ko, and Jiamin Zhu. 2015. What makes a great software engineer? In Proceedings of the 37th International Conference on Software Engineering - Volume 1 (ICSE '15), Vol. 1. IEEE Press, Piscataway, NJ, USA, 700-710.