Software Quality Digest – 2009-07-13

By Tobias Gurock, July 13th, 2009

The Software Quality Digest is back. The last two months were too busy to compile a decent digest, sorry about that. We prepared our new website and were working on our upcoming product. So, without further ado, here’s the digest with interesting articles, blog postings and discussions about software quality, testing, usability, accessibility, scalability and related topics of the past two-three 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

  • Forgotten Refactorings – “I don’t know how much more emphasized step 1 of refactoring could be: don’t touch anything that doesn’t have coverage. Otherwise, you’re not refactoring; you’re just changing shit. And not a single IDE enforces or encourages you to have test coverage before mucking about with the refactorings.”
  • Benefits of automated functional testing – “In the last few years of writing “enterprise” software in Java I’ve created and maintained thousands of unit tests, often working on projects that require 80% or better code coverage. Lots of little automated tests, each mocking out dependencies in order to isolate just one unit of code, ensuring minimal defects and allowing us to confidently refactor code without breaking everything. Ha! I’ve concluded that we’d be better off deleting 90% of these tests and saving a lot of time and money in the process.”
  • Designers who wireframe: pros and cons – “There are plenty of conflicts of interest inherent in running a small creative shop where everyone has to wear lots of hats (or where one person wears all the hats)—like the account manager ideally should not be responsible for quality control because there’s too much conflict between the need to keep the job within budget and the need to take the time to do things right.”

Performance and Scalability

  • SQL Databases Don’t Scale – “A question I’m often asked about Heroku is: “How do you scale the SQL database?” There’s a lot of things I can say about using caching, sharding, and other techniques to take load off the database. But the actual answer is: we don’t. SQL databases are fundamentally non-scalable, and there is no magical pixie dust that we, or anyone, can sprinkle on them to suddenly make them scale.”
  • No to SQL? Anti-database movement gains steam – “One of the requirement for this new service was the need to build a graph that includes friends of friends, and products in catalogs. The process for building that graph with an In-Memory-Data-Grid took 2-3 msec vs. tens of seconds with a traditional approach (note that part of the complexity in this case is that the query itself is ad-hoc and can’t be easily partitioned). Building that graph on-the-fly at these speeds just couldn’t be done with traditional SQL database.”

Process and Methodology

  • The problem with BDUF is the ‘B’ not the ‘UF’ – “I’m sure every developer with even the slightest amount of experience has run into a situation where a proposed design for a domain concept is initiated, and then someone (perhaps even the developer in question) has decided something along the lines of: “We need to generalize this so that it covers future requirements.””
  • Agile is Dead – “The agile revolution has won. There is no doubt about it. No longer are its evangelists the pioneers who blaze new trails and chart the unknown, like they used to a couple of years ago. Agile principles, methodology, tool sets, even agile lingo, have become mainstream. Frankly, everybody and their dog is “doing agile” these days. Of course, there are pockets of resistance in the more backward (or “conservative” to be more polite) companies, but they are destined to eventually see the error of their ways and switch over.”

Usability and Accessibility

  • Building Respect for Usability Expertise – “Respect comes only from proven performance. Once content owners see how much better customers react to websites that are written and designed according to established usability guidelines, they’ll start respecting you more. Sadly, this is a chicken-and-egg situation: you get to demonstrate the value of your advice only if it’s being implemented. “
  • My first experience using an accessible touch screen device – “And I must say this was an amazing experience! My fingers definitely need to get used to gestures such as flicking or tapping, or using a rotor. But having an iPod Nano 4th generation helped with that, since moving the finger over the screen like on a dialer felt most like tracking around the iPod’s click wheel. Even the sound the rotor makes is the same. :)

Technical Tips

  • Low Level Bit Hacks You Absolutely Must Know – “Bit hacks are ingenious little programming tricks that manipulate integers in a smart and efficient manner. Instead of performing some operation (such as counting the 1 bits in an integer) by looping over individual bits, these programming nuggets do the same with one or two carefully chosen bitwise operations.”

Misc

  • Subtractive Design – “Subtractive design is the process of removing imperfections and extraneous parts in order to strengthen the core elements. You can think of a design as something you build up, construct and let grow, but it’s pruning away the excess that gives a design a sense of simplicity, elegance, and power.”
  • Getting Pretty Lonely – “WordPress is licensed under the terms of the Gnu Public License (GPL) which, in a nutshell, stipulates that you are free to use the software however you like, but if you make changes and distribute those changes, then you must share those changes under the same terms. This simple, radical restriction means that you are prohibited from taking a GPL project and incorporating it with a closed-source project.”
  • Making Games – “I hear from programmers every now and then who are considering trying to get into the games industry. Our projects are strange beasts that are similar to other software projects in some ways, yet vastly different in other ways. Still, if you look at it from outside, most of these differences will be hard to spot.” and a follow-up.

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?”

Software Quality Digest – 2009-04-21

By Tobias Gurock, April 21st, 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 this time. 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

  • Turn off your step-thru debugger – “My mentor suggested a couple more approaches to try (and when I tried them, they worked, of course). Then he made a remark that has stayed with me ever since. ‘I try to stay away from debuggers,’ he said. ‘A debugger is a crutch. You’re better off without it.’”
  • Exception-Driven Development – “When a user informs me about a bona fide error they’ve experienced with my software, I am deeply embarrassed. And more than a little ashamed. I have failed to see and address the issue before they got around to telling me. I have neglected to crash responsibly.”
  • “I don’t have time to test!” – “Now, I think that abandoning testing due to time constraints is reckless and irresponsible. I sometimes catch myself thinking that I don’t have time for test writing, but I soon find myself proving this argument wrong. Often people who don’t have time to test will waste hours debugging code that they are desperately trying to force into production. This code ends up being brittle and costly to produce anyway.”
  • Coupling and Cohesion – “One of the things about design that makes it such a joy is that it requires balance. If elements are too large, each change will be more expensive than it needs to be. If elements are too small, changes will ripple across elements. And optimizing the design takes place against the backdrop of an unpredictable stream of changes.”
  • It’s Not TDD, It’s Design By Example – “The word “test” in software is a very loaded term. The first time I came across a tester (as in, a person performing the quality assurance role) was in my first professional job. We were never taught about testing at college, as we were all there to learn to be developers.”

Performance and Scalability

  • Performance optimization: The first thing to do – “So, here is my point: The most important thing about optimization is analysis. You can’t fix a problem by simply trying different solutions to see if they work. In order to fix a problem, you have to understand the problem first.”
  • Learned lessons from the largest player (Flickr, YouTube, Google, etc) – “If you working in new website; don’t buy too much equipment just because you want your website to be faster. Start slow, and small, and using the right statistics you will know the right direction. Measuring the right thing is fundamental and important. Selecting a benchmark and comparing the results seems, initially at least, to be a simple problem, but a host of mistakes are made during this process.”
  • Experiences deploying a large-scale infrastructure in Amazon EC2 – ”
    You’ll say that you’ve done lots of load testing before. This is very good….but it still will not prepare you for the sheer amount of traffic that the internets will throw at your application. That’s when all the things I mentioned before — automated deployment of new instances, charting of the important variables that you want to keep track of, quick identification of bottlenecks — become very useful.”

Process and Methodology

  • Why do our time estimates suck? – “Everyone dealt with it in some form of another. Either you have given your estimations and you missed it by a long shot or someone handed you some estimations and they grossly underestimated the amount of work. And when that mark is missed, its the wag of the finger and the rain cloud of shame upon you. Management has deemed you a failure. Way to go.”
  • The Pond – “I cringe. It’s Ian and Ian is a senior engineer. He’s a rock. He gets it done. I never have to ask him twice and, after six years, Ian has every right to ask to work remote. But I’m still freaked because my first thought when anyone asks to work remote is, “This fine person is a year away from either quitting or being fired.” Why? Because they’re asking to leave the Pond.”
  • Pair Programming: The Code Fairy – “One of the hardest situations that comes up when pair programming is when you want to solve a problem in a certain way but you can’t persuade your pair that it’s the approach you should take. The temptation in these situations is to wait until your pair isn’t around, maybe by staying late at the end of the day or coming in early the next day and then making the changes to the code that you wanted to make but didn’t when you were pairing with them.”

Technical Tips

  • Constraint Yourself! – “Part of this epiphany is realizing that DDL (Data Declaration Language), DML (Data Manipulation Language) and DCL (Data Control Language) are all an intrinsic part of SQL and not disjoint languages that stand apart. This article deals with the DDL, but better DDL makes for better DML and DCL. When a business rule is in the DDL, it is done one way, one place, one time. You do not have to hope that every application and every DML statement gets all the rules right. You do not have to hope that a change in the rules will be corrected in hundred or even thousands of places in the system. “
  • The Dangers of the Large Object Heap – “Usually, .NET developers don’t need to think too much about how their objects are being laid out in physical memory: after all, .NET has a garbage collector and so is capable of automatically removing ‘dead’ objects and rearranging memory so that the survivors are packed in the most efficient manner possible. The garbage collector has limits to what it can do, however; and when these limits are reached, then the runtime can exhaust memory in a way that is surprising and confusing to any developer who is not aware of how .NET chooses to lay out objects in memory.”
  • 15 Essential Checks Before Launching Your Website – “Your website is designed, the CMS works, content has been added and the client is happy. It’s time to take the website live. Or is it? When launching a website, you can often forget a number of things in your eagerness to make it live, so it’s useful to have a checklist to look through as you make your final touches and before you announce your website to the world.”

Misc

  • We Slice Software Vertically Just Like Bread – “Some tasks look like they’ll take weeks to complete. That my friend is not a task. We need to split that. There is probably some aspect of that which could be completed in a day.”

Software Quality Digest – 2009-03-30

By Tobias Gurock, March 30th, 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 week. 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

  • Five Dollar Programming Words – “Why are these words worth five dollars? They’re uncommon words that have a unique and specialized meaning in software development. They are a bit off the beaten path. Words you don’t hear often, but also words that provide the thrill of discovery, that ‘aha’ moment as you realize a certain programming concept you knew only through experimentation and intuition has a name.”
  • Making the debugger redundant – “It got me thinking about how the way that we can reduce the need to use the Debugger when writing code in imperative languages. Debugging is so boring and takes so long that spending large amounts of doing it both crushes the spirits and slows you down considerably.”
  • Reassessing what the debugger is for – “Admittedly the name ‘debugger’ doesn’t really help us here as the name describes a tool that “helps in locating and correcting programming errors” which is all well and good but I think it should be one of the last tools that we turn to rather than one of the first.”
  • JavaScript Testing Does Not Scale – “It’s become increasingly obvious to me that cross-browser JavaScript development and testing, as we know it, does not scale.”
  • TDD: The Art of Fearless Programming – “Test-driven development is a discipline of design and programming where every line of new code is written in response to a test the programmer writes just before coding.”

Performance and Scalability

  • How to write fast code – “Key takeaway: Don’t think in terms of making a slow piece of code run faster. Instead, think in terms of making it do less.”
  • Twice-as-fast isn’t good enough – “In very few cases will your life be changed by a two-fold speedup of anything computer-related. If your business plan (for a new technology) is predicated on speed, and the promised performance boost is less than a factor of ten (a full order of magnitude), rethink what you’re doing. ‘Twice as fast’ is not a competitive advantage. Not by a long shot.”
  • Google searches for holy grail of Python performance – “Google’s Python engineers have launched a new project called Unladen Swallow that seeks to improve the performance of the Python programming language. One of the project’s goals is to replace the Python virtual machine with an LLVM-based JIT.”
  • Performance – When do I start worrying? – “A common problem of the application designers is to predict when they need to start worrying about the Architectural/System improvements on their application. Do I need to add more resources? If yes, then how long before I am compelled to do so? The question is not only when but also what.”
  • Upgrading Twitter without service disruptions – “For every incoming tweet, the messaging system gets notifications for all the folowers, which are then processed asynchronously. One of the most important changes they introduced to improve performance in the last nine months is moving from a Ruby messaging middleware to a custom build JVM-based messaging middleware written in Scala.”

Process and Methodology

  • Developers should not be allowed to work overtime – “I have a very simple tip for software companies and engineering managers who want to make their developers happier and more productive (and less likely to produce buggy code). Forbid overtime.”
  • The Importance of Wireframing – “Since wireframes take considerably less time to generate than full color comps, you can spend time early on using them to map out all of the pages for a particular site. Even at this early stage you can get a sense of the user experience and therefore spot potential usability problems with your design.”
  • Get Wireframing: The All-In-One Guide – “Wireframing is a great tool to incorporate into your projects as it allows for rapid prototyping and helps to pinpoint any potential problems. I personally find it invaluable on projects to have a visual representation of content, hierarchy and layout. Overall it’s an excellent step to incorporate into your project before the design process begins for both you and your clients.”
  • Idealistic vs. Practical – “Is Agile idealistic or practical? Agile does embraces a set of principles (ideals) and I’ve seen many of its adherents become drunk with the beauty of it. I’ve been there a few times myself. So yes, it is idealistic in that respect. However, I think a better question is this: Is Agile merely idealistic?”

Usability and Acessibility

  • Mega Drop-Down Navigation Menus Work Well – “Big, two-dimensional drop-down panels group navigation options to eliminate scrolling and use typography, icons, and tooltips to explain the user’s choices. “
  • White Space: How to Get it ‘Right’ – “Space is important in layout. Space can be created by content – such as text, images, lists, logos etc. – or it can be created by the space in—between content, called negative space, or whitespace. Space can be passive; a by—product of the layout process. Or, it can be active; there for a reason, to guide the user’s eye, or help them make a decision.”

Technical Tips

  • Fast polling using C, memcached, nginx and libevent – “In this post I’ll show you how to implement really fast polling using C and libevent, memcached and nginx. The performance of the server is over 2400 request pr. second on a not optimized Mac Book – that’s 144.000 requests pr. minute.”

Misc

  • Java as Legacy Language – “We owe a lot to Java, clearly, but the sheer cost of using Java for smaller-scale projects is driving the creation of new, lighter-weight languages and frameworks that offer a better impedance match with agile working styles. Going forward, it simply won’t be economical to use Java for most kinds of development.”
  • The Elegance of Imperfection – “Bringing heart to web experiences can be difficult, since websites and applications are fundamentally a construct of logic (via code). While you can’t create a website that functions as a pure expression of wabi-sabi, finding ways to infuse our creations with a hint of wabi-sabi adds a new dimension to our work.”

Software Quality Digest – 2009-03-18

By Tobias Gurock, March 18th, 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 week. 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

  • Quality is Dead #2: The Quality Creation Myth – “One of the things that makes it hard to talk about quality software is that we first must overcome the dominating myth about quality, which goes like this: The quality of a product is built into it by its development team.”
  • Coding: Make it obvious – “One of the lessons that I’ve learned the more projects I work on is that the most important thing to do when coding is to do so in a way that you make life easier for the next person who has to come across that code, be it yourself or one of your team mates. I think the underlying idea is that we need to make things as obvious as possible.”
  • Introduction to test-doubles – “As soon as you start unit-testing or test-driving your development, you’ll learn about test-doubles and how they can make your tests lightening-fast sooner or later.”
  • Future Creep – You aren’t gonna need it! – “How many times have you added an additional parameter or bit of logic to your code because you thought it could be useful and it’s easier to add whilst your already changing the code? If you are your introducing Future Creep! and should stop doing it.”

Performance and Scalability

  • Are Cloud Based Memory Architectures the Next Big Thing? – “The next era is the age of Memory and Cloud which will allow for new players to succeed. The tipping point is soon.”
  • Measuring efficiency in the cloud – “What can the world of green energy teach us about the future of cloud computing? How can we measure computing resources in the cloud for efficiency, replacement costs, and cost savings?”
  • Use Threads Correctly = Isolation + Asynchronous Messages – “Explicit threads are undisciplined. They need some structure to keep them in line. In this column, we’re going to see what that structure is, as we motivate and illustrate best practices for using threads — techniques that will make our concurrent code easier to write correctly and to reason about with confidence. “

Process and Methodology

  • How I Learned to Program Manage an Agile Team after 6 years of Waterfall – “If I could go back in time… 3 things I would tell myself about Agile”
  • The Power of a Whiteboard – “I think a whiteboard offers loads of advantages over electronic tools. They’re mainly soft factors, I admit, but I think a whiteboard is hard to beat.”
  • My Agile Team: More Code, More Problems – “What I’m going to discuss this time is our approach to trying to fix these critical bugs while maintaining at least a semblance of our Agile nature. It’s hard to do a planning meeting and decide on what to work on when you’ve got new things popping up and old things dragging on.”
  • If you cannot do a source pull and compile you are doing it wrong! – “For those of you who may NOT think that pulling and compiling is absolutely necessary let me ask you one thing. What value are you providing your organization if a someone who is new to a project (could be new employee, new team member, or even someone with a new computer) cannot pull and compile your source code in about 5 minutes?”
  • Customer Development – The Missing Piece! – “I’ve spent a lot of time making agile development work in startups and it ain’t easy. Necessary but not easy.” and a response by Eric from Lesson Learned
  • How to Hold the Daily Scrum – “Scrum is simple and Scrum is hard. The Daily Scrum is simple daily routine to help the team self-organize, focus, and identify and eliminate impediments to progress. How do you conduct the Daily Scrum and how do you know if the Daily Scrum is achieving its purpose? “
  • Continuous Integration 101 – “More and more people are working in teams where Continuous Integration is used. Not everyone truly ‘gets’ it though… Below is a quick list of things you, as a member of the team, need to keep in mind.”

Usability and Acessibility

  • Accessibility 1.0 – “For those unfamiliar with accessibility issues pertaining to Web page design, consider that many users may be operating in contexts very different from your own”
  • Brand logos as home links – “My preferred solution would always be for a proper home link but sometimes that is not always practical. Second best would be to combine the word ‘home’ or ‘homepage’ with the logo.”

Security

  • IT Security: Blaming the Victim – “Blaming the victim is common in IT: users are to blame because they don’t patch their systems, choose lousy passwords, fall for phishing attacks, and so on. But, while users are, and will continue to be, a major source of security problems, focusing on them is an unhelpful way to think.”

Technical Tips

  • Interactive map of the Linux kernel – “There are a lot of books, however it is still a difficult subject to comprehend. The Interactive map of Linux Kernel gives you a top-down view of the Kernel.”

Misc

  • The Positive Legacy of C++ and Java – “Java itself will diminish, just as C++ did, to be used in special cases (or perhaps just to support legacy code, since it doesn’t have the same connection to hardware as C++ does). But the unintentional benefit, the true accidental brilliance of Java is that it has created a very smooth path for its own replacements, even if Java itself has reached the point where it can no longer evolve.”
  • Do You Need to Be a Developer to Found a Web Startup? – “So it all begs the question, if you’re not from a tech background do you even have a shot at starting a web startup?”
  • DVCS and Bug Tracking – “Industry-wide, there is a trend toward more integration between version control and other stuff like project tracking, wikis, discussion forums, build tracking, etc. [...] While DVCS is one of the more interesting things happening right now, it does represent a setback in this particular area.”
  • Best Practices for Designing a Social News Website – “In this article I’ll showcase some of the current top social news sites, will identify trends and patterns in their designs and suggest some best practices to follow when designing such sites.”

Software Quality Digest – 2009-03-06

By Tobias Gurock, March 6th, 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 week. 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

  • 10 Papers Every Programmer Should Read (At Least Twice) – “To me, these are classic papers which contain deep “things you oughta know” about code – the material you work with.”
  • TechnicalDebt by Martin Fowler – “The tricky thing about technical debt, of course, is that unlike money it’s impossible to measure effectively. The interest payments hurt a team’s productivity, but since we CannotMeasureProductivity, we can’t really see the true effect of our technical debt.”
  • Paying Down Your Technical Debt – “We have to stop working on new features for a while and pay down some of our technical debt.”
  • Development Psychology, Technical debt and The next feature syndrome – “IMHO you should always avoid the temptation to start a v2 from scratch. Take the time to re-code or re-factor the most catastrophic components [...]“
  • Distributed Reliability Testing – “This sort of large-scale testing is great for finding crashes that happen only rarely, or that only affect pages that developers wouldn’t have visited as part of their haphazard manual testing.”
  • Plunging your way to better code – “So you want to increase your code quality, one of the best investments you can make is a $3.00 plunger.”
  • Treat Your Tests Well – “Test code is a first class citizen in your project. It is every bit as important as the rest of the project. Treat it as such or it will bite you back.”
  • Quality Must Be Built In – It Cannot Be Added On – “Creating a quality product really is a two sided coin. If you create the perfect system in the customer’s eyes, but you can’t maintain that system and add new features and functionality – where is the quality?”

Technical Tips

Process and Methodology

  • Start With the Most Difficult Part – “There’s not a lot you can change in the process of constructing a building. You must lay the foundation before you erect the upper floors, and you can’t paint without having the walls in place. In software, we’re blessed with more freedom. “
  • Who’s Your Coding Buddy? – “I am continually amazed how much better my code becomes after I’ve had a peer look at it. [..] Just one brief attempt at explaining and showing my code to a fellow programmer — that’s usually all it takes.”
  • The Ideal Agile Workspace – “I put together a list of all the things that I think should be visible within the ideal agile workspace”
  • Saying yes to product requests – “If you propose an idea to someone and the first thing they always say is ‘Let me play devil’s advocate here…what you’re saying is impossible because a, b, c’ then they are saying no first. Saying no kills energy; saying yes amplifies it.”
  • Counting hours doesn’t make sense – “So the useful question is not ‘how many hours do you work?’ but ‘how much energy do you put into your work?’”

Misc

Software Quality Digest – 2009-02-25

By Tobias Gurock, February 25th, 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 week. 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

Performance and Scalability

Usability and Accessibility

  • 9 Common Usability Mistakes In Web Design – “Here are 9 usability problems that websites commonly face, and some recommended solutions for each of them.”
  • The Future of Touch – “Yet there still is a question as to whether the iPhone-like multi-touch capabilities of a touchscreen OS will become as big of a hit in traditional computing as they were on the smartphone.”

Security

Process and Methodology

  • The Bad Apple: Group Poison – Jeff Atwood on team work and group dynamics when dealing with unmotivated or incompetent team members
  • 20 Steps to Better Wireframing – ThinkVitamin with a good article on wireframing and prototyping user interfaces and web applications
  • Work in small batches – Eric Ries from Lessons Learned: “Software should be designed, written, and deployed in small batches.”
  • How Scrum is Like Marijuana – “Scrum is relatively inexpensive to try and what’s the worst that could happen? You can always choose not to use it again. It isn’t like it’s going to kill you.”
  • The Rush to Lean Makes Me Nervous – “As Steve Freeman points out, by a strict Lean interpretation of the manufacturing school product development looks wasteful. And it is. And that’s OK because it isn’t manufacturing.”
  • Top 10 Activities of the Product Owner – “The responsibilities of the Product Owner are onerous and there is no one else on the team to cover for him/her or pick up the slack.”

Announcements and Books

  • Reboot The Book – A new online book by David Longstreet about the software industry, measuring software development and about project failures

Misc

Software Quality Digest – 2009-02-18

By Tobias Gurock, February 18th, 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 week. 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

Performance and Scalability

Usability and Accessibility

Security

Process and Methodology

Misc

Software Quality Digest – 2009-02-11

By Dennis Gurock, February 11th, 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 week. 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

Performance and Scalability

Usability and Accessibility

Technical Tips

Process and Methodology

Misc

Software Quality Digest – 2009-02-04

By Dennis Gurock, February 4th, 2009

Inspired by popular digest blog series such as the MicroISV Digest (now published by Bob Walsh) and the discontinued Daily Grind blog series by Mike Gunderloy, we will be publishing the Software Quality Digest to share links, announcements and discussions about software quality, usability and scalability.

We are planning to publish the digest biweekly (possibly weekly if we find enough quality and relevant content) and include everything ranging from general concepts and methods related to software quality, tools and product announcements, relevant discussions on blogs and community websites and practical technical tips. Feel free to drop us an email if you find an interesting link or article, we would be happy to include it in the next digest.

Software Quality and Testing

Performance and Scalability

Technical Tips

Misc