Design for the Likely Changes

I need to do some design work soon, and it has me thinking about the design process.  What’s the best way to go about designing software?  The answer can vary for different organizations.   Recently I took the “Software Design Techniques” class from PSU, which offered some solid tips.  Here’re my general recommendations: 

Set Some Goals Upfront

Eventually you’ll produce a design.  Maybe you’ve produced some very professional UML docs or a slick data-flow diagram.  Perhaps you’re like me and have scribbled some circles on a whiteboard and taken a picture of it with your phone.  In any event, the next step will be to ask: “Is this any good?”  To answer that question you’ll need to have established what “good” means for this project.  Set some goals at the beginning for what your design should achieve.  Keeping them in mind during the process will help.    

Know Thy Stakeholders

It can be tough to produce software that pleases everyone.  Stakeholders often have conflicting desires.  Product managers want it done fast, QA wants it to be easily testable, the ops team wants the deployment to be hassle-free and the end user is asking for an intuitive UI.  Your fellow engineers may have several technical priorities.  The challenge is to try to consider several perspectives as you proceed.  Hopefully your product/project manager can help you prioritize requirements and balance conflicting stakeholder needs.

Prepare for the Likely Changes

Let’s pretend you just produced the best design ever for a billing system.  You’re quite pleased with yourself.  Then, one month after release Bob from sales rushes into your office and says, “We need to import billing data from Company X… by next week!”  Ideally you’d have already talked to sales and known that the Company X integration was imminent.  It’s a great mental exercise to make a list of the top “likely changes” to the system that you and others foresee.  Again, your software can’t do everything and the architecture won’t respond to all requests with equal grace.  However, you should know the company’s priorities for future development, and those things shouldn’t require a full rewrite of the system.

Get it Reviewed

I mentioned before that code reviews are very helpful.  Reviews are great for design products as well.  Designing by committee isn’t fun, but this is a little different.  In a design review you present a fully baked (you hope) plan to some peers and solicit their feedback.  Maybe they’ll have tackled a similar problem last year, failed miserably, and found an open source tool that solves everything.    

On a team practicing some form of Agile development, you may be asked to produce a design quickly and get on with it.  It’s important to at least cover the basics if you want to arrive at a design that’s somewhat sustainable and doesn’t disgust the new guy you’ll hire this fall.  Do you have a sure-fire design tip or pet-peeve?

Sleep Your Way to a Better You

Did you get enough sleep last night?  If you're a typical American worker, the odds are you didn't.  Our culture tends to promote sleep deprivation as a badge of honor.  The heroic act of burning the midnight oil makes us really, truly productive... or does it?

I recently read the book Rework, which questions our culture’s devaluation of sleep.  The book challenges several conventional ideas about being productive, but the parts on sleep hit close to home for me. 

The authors point out that we're less creative when we're tired.  This causes several problems.  We often just slog through mundane tasks if we're bushed.  Also, we fail to have insights or epiphanies as we perform our tasks.  The most productive workers aren't 10 times as fast as everyone else.  They don't work 10 times as long.  Often they're the ones that come up with creative solutions that take 1/10th the time. 

Overall I found Rework fairly entertaining.  It’s a quick read and full of tips about staying innovative, productive, and awake at work.

Book Recommendation: The Mythical Man-Month

I end up reading a lot of software engineering books for my classes at PSU’s OMSE program.  “The Mythical Man-Month” is the first assigned book in the curriculum, and for good reason.  It’s one of the seminal texts on the topic of software project management, and offers several insightful ideas.

About The Author

Fred Brooks worked for IBM in the 50’s and 60’s as a manager for their OS/360 operating system.  He’s very articulate and uses plenty of humor and interesting historical references in his writing.   Here are a few of the book’s highlights:   

Brooks’s Law

Fred’s quote "adding manpower to a late software project makes it later” became known as Brook’s Law.  He argues that just as nine women can’t make a baby in one month, additional developers don’t necessarily help you release software sooner.  This is caused by the communication and training required when adding new team members.

No Silver Bullet

Brooks asserts that there is no magical tool or methodology that will provide software engineers a 10 fold productivity gain.  He separates the essential difficulties of producing software (e.g. Complexity, Difficult to Visualize) from the “accidental” difficulties (Lack of Tools, Clunky Languages).  It’s a good concept to keep in mind with the next development fad comes along offering to solve all of your problems. 

Conceptual Integrity

The book emphasizes the importance of preserving the conceptual integrity of the system, especially on large projects.  Brooks makes the case for a single architect (or small group of architects) creating the design of the overall product.  He offers some good tips on how the people working on the big picture should interact with the engineers implementing the design.

Why Would I Read This Book?

I’m a big fan of history and think there’s much to be learned from the successes and failures of past generations.  Although this book discusses some ancient programming practices that we (thankfully) don’t have to deal with today, I think it’s a great read for anyone concerned with delivering a software product on time and under budget.

Is Social Media Killing RSS?

rss-dont-link.jpg

Really Simple Syndication (RSS) is a great way to consume information on the web. Clicking on the orange RSS icon (available on most blogs and news sites) allows you to "subscribe" to that source using your favorite RSS Reader. I recommend using most popular one: Google Reader.

However, despite its usefulness, RSS hasn't really seen massive adoption. Recently I've heard many techy types exclaiming they've stopped checking their RSS Reader. Instead they're finding more relevant links on Twitter. Social sites like Twitter are specifically built to encourage a lot of sharing. If you use Twitter to follow people in your industry, you'll inevitably be exposed to interesting discussion and links to very relevant topics.

fb-logo-dont-link.jpg

Another emerging player in the link-sharing business is Facebook. Unlike RSS readers, Facebook has seen massive adoption, now boasting over 400 million users. Average folks can understand Facebook's simple interface. They’re also finding that it’s pretty easy to share news articles and Youtube links with their friends and family on Facebook.

So, have social media sites killed RSS before it reached its full potential? Personally I'm still using RSS for a number of things. Here are a few of my favorite uses for RSS:

Handy Uses for RSS

  1. Blogs - I'm a big fan of getting notified rather than constantly checking websites. If you follow a few dozen blogs, you don't want to be checking each of them every day for new posts. RSS readers allow you to browse quickly through new posts.
  2. Discover People on Twitter - Twitter's advanced search provides an RSS feed for your search results. For example, if you're an avid rock climber, you can search for people within 25 miles of your city who mention "rock climbing" in their tweet. Checking the RSS feed can help you discover local, like-minded enthusiasts.
  3. Craigslist Searches - Craigslist also provides an RSS feed for search results. Let's say you’re looking for an apartment downtown for between $600 and $1200. After your first search, subscribe to the RSS feed, and you can stop obsessively checking Craigslist every few hours! The most recent results will be waiting for you in Google Reader.

Do you think RSS will survive? Will it be killed by more popular information sharing tools? I'd love to hear your thoughts.