Software Quality Digest – 2009-05-05
By Tobias Gurock, May 5th, 2009
The Software Quality Digest with the latest articles, blog postings and discussions about software quality, testing, usability, accessibility, scalability and related topics of the past two weeks. If you have a relevant link for the Software Quality Digest, please let us know and we would be happy to include it in the next digest.
Software Quality and Testing
- The Case for Multiple DBs in Multi Tenancy situations – “There are two major, reasonable approaches that I know of: First, to have a database per tenant. (This is the approach discussed by Ayende in his multi tenancy series) A second common alternative is to have a tenant id column in all tables that require differentiation by client. My team was in a situation requiring multitenancy, and needed to select an approach. Wary of the idea of multiple databases, the team immediately decided to go with the tenant column approach.”
- API Design Matters – “After more than 25 years as a software engineer, I still find myself underestimating the time it takes to complete a particular programming task. Sometimes, the resulting schedule slip is caused by my own shortcomings: as I dig into a problem, I simply discover it is a lot more difficult than I initially thought, so the problem takes longer to solve—such is life as a programmer.”
- Is the Supremacy of Object-Oriented Programming Over? – “I never expected to see this. When I started my career, Object-Oriented Programming (OOP) was going mainstream. For many problems, it was and still is a natural way to modularize an application. It grew to (mostly) rule the world. Now it seems that the supremacy of objects may be coming to an end, of sorts.”
- Java vs .NET Developers – “Much of what we discuss in .NET is far more common in Java as Java has a far healthier community than Microsoft. You will find terrible developers on both side but the terrible developers on the Java side have more mainstream exposure to good ideas than on the Microsoft side.”
- The difference between Infrastructure & Application – “Recently I am finding myself writing more and more infrastructure level code. Now, there are several reasons for that, mostly because the architectural approaches that I advocate don’t have a good enough infrastructure in the environment that I usually work with. Writing infrastructure is both fun & annoying.”
- A Crash Course In Failure – “When is the last time you intentionally unplugged a live, production server? Better still, when is the last time you intentionally unplugged a rack of live, production servers? I can think of a couple of reasons why the answer might be ‘never.’”
- To Spec or Not to Spec – “There’s been much debate of late regarding speculative or ’spec’ work and the associated problems (and benefits) of it. [..] But what exactly is spec work? Some people don’t seem to know. Why all the hoo-ha and what, if anything, should we do about it?”
Performance and Scalability
- Needle in a haystack: efficient storage of billions of photos – “The Photos application is one of Facebook’s most popular features. Up to date, users have uploaded over 15 billion photos which makes Facebook the biggest photo sharing website. For each uploaded photo, Facebook generates and stores four images of different sizes, which translates to a total of 60 billion images and 1.5PB of storage. The current growth rate is 220 million new photos per week, which translates to 25TB of additional storage consumed weekly. At the peak there are 550,000 images served per second. These numbers pose a significant challenge for the Facebook photo storage infrastructure.”
- GZIP encoding = happier users? – “I guess there are very few cases where you shouldn’t use gzip your content. If your typical page is less than 100 bytes then gzipping it could hurt the client’s and the server’s performance. But no website —except maybe a few web-services— serves pages with a typical size of 100 bytes or less. So there’s no excuse for serving uncompressed HTML.”
- Use Thread Pools Correctly: Keep Tasks Short and Nonblocking – “Thread pool tasks should be as small as possible, but no smaller. One reason to prefer making tasks short is because short tasks can spread more evenly and thus use hardware resources well. [...] The larger the tasks, the more unwieldy the pool’s workload is, and the harder it will be to spread the work evenly across the machine all the time. On the other hand, tasks shouldn’t be too short because there is a real cost to executing work as a thread pool task.”
Usability and Accessibility
- In Defense of Eye Candy – “We’ve all seen arguments in the design community that dismiss the role of beauty in visual interfaces, insisting that good designers base their choices strictly on matters of branding or basic design principles. Lost in these discussions is an understanding of the powerful role aesthetics play in shaping how we come to know, feel, and respond.”
Technical Tips
- The Stack Is An Implementation Detail – “Almost every article I see that describes the difference between value types and reference types explains in (frequently incorrect) detail about what “the stack” is and how the major difference between value types and reference types is that value types go on the stack. I’m sure you can find dozens of examples by searching the web.” and part 2
- Validation – Part 1 – Getting Started – “There are a lot of good and free frameworks to help you deal with validating user-submitted data. [..] Despite these frameworks, there may be situations where you need to roll your own, which is what we’re going to look at in this series. We won’t be doing anything fancy, but we will look at an end-to-end custom solution.” part 2 and part 3
- The Mystery Of CSS Sprites: Techniques, Tools And Tutorials – “CSS Sprites are not new. In fact, they are a rather well-established technique and have managed to become common practice in Web development. Of course, CSS sprites are not always necessary, but in some situation they can bring significant advantages and improvements – particularly if you want to reduce your server load.”
- Is ASP.NET MVC a half-baked solution? – “Let’s be clear, ASP.NET MVC is an improvement over WebForms – and those developers refusing to leverage ASP.NET MVC (or something else) for new projects are simply lazy. WebForms is full of leaky abstraction, really tight coupling, and ridiculous concepts – such as viewstates and postbacks.” and a follow-up
- I Spose I’ll Just Say It: You Should Learn MVC – “WebForms is a lie. It’s abstraction wrapped in deception covered in lie sauce presented on a plate full of diversion and sleight of hand. Nothing you do with Webforms has anything to do with the web – you let it do the work for you. This, friends, is a big deal (at least to me): You’re working in a lie.”
- Two techniques for faster JavaScript – “I like things that go fast, and that includes code that runs fast. With JavaScript (and Java, too), that can be a challenge. So much the better, though. I like challenges too.”
Misc
- Has The Virtualization Future Arrived? – “The attraction of virtualizing older operating systems is that it throws off the eternal yoke of backwards compatibility. Instead of bending over backwards to make sure you never break any old APIs, you can build new systems free of the contortions and compromises inherent in guaranteeing that new versions of the operating system never break old applications. “
- Time and Space Tradeoffs in Version Control Storage – “Storage is one of the most difficult challenges for a version control system. For every file, we must store every version that has ever existed. The logical size of a version control repository never shrinks. It just keeps growing and growing, and every old version needs to remain available. So, what is the best way to store every version of everything?”
Related posts:
- Software Quality Digest – 2009-03-13
- Software Quality Digest – 2009-04-06
- Software Quality Digest – 2009-07-27
Found this article useful? Make sure to subscribe to the No bug left behind feed or via email and don't miss our future articles about software quality, performance, usability and related topics. This blog also features the regular Software Quality Digest with links to relevant articles, discussions and other resources.
