Executive Summary: Introspection on how to cut corners for the initial launch of a public application with reference to Nate Kohari’s recent post on the subject.
As we amble forward on our little private venture, there are a number of applications and companies we watch closely. It’s hard to say whether we want to emulate them or if our philosophies naturally align and we’re attracted to like-minded people. Maybe a bit of both.
One of those applications/companies is AgileZen. From the measured approach to features to the deliberate way the user experience falls into the background, we not only use the product, we often look to it for inspiration. Sort of a “What would Nate and Niki do?” approach.
I read Nate’s account of the time before and after launch which a lot of nods in recognition. The almost universal message we’ve been given by people both successful and unsuccessful in building a public application is (and I’m quoting verbatim from one of them): “Just launch the &*%$ thing”.
This is what I thought about while I read the part in Nate’s tale about cutting corners. Initially, there was a lot of kludge and after launch, he rewrote almost every line of JavaScript.
He makes no apologies for this nor should he. It is, I think, a valid decision for a product like his (and ours). Provided you’re smart about it. Recognize where the crap is and isolate it and make a concerted effort to go back to it after you have money coming in. The point he makes is:
Before we could afford to spend a lot of time to make the software maintainable, we first had to prove that we would actually have to maintain it – we had to make sure that we actually had a market.
It’s something I’ve wrestled with a little, especially as we had a learning curve of using an unfamiliar technology. How far do we cut corners? Forego UI tests? Unit tests? Proper separation of concerns?

My partner is a little more battle-scarred in this area and he was pretty adamant that we keep this reasonably maintainable from the start, even if it takes longer to write code, which it inevitable would. Which means we would have to sacrifice something on the iron triangle (or the lesser known Pewter Scale). But that was an easy choice. We wanted relatively high quality and to deliver on time and we were constrained by budget. That left scope as our only real variable. And I love me some restricted scope. Features are, to my mind, the only aspect of the triangle worth arguing over.
But back to the quality aspect. I’m speculating but I suspect we didn’t cut as many corners as Nate did. Or maybe we just didn’t cut the same corners. Though I won’t claim anywhere near 100% code coverage, we have a great many unit tests. And as part of our process, no story can be marked complete unless it’s been code reviewed by at least one person. What’s missing so far is a formal QA person, which is a matter of not having the resources (or put another way, not placing a high enough priority on it based on the resources available to us), and a UI testing process, which is near the end of prototyping thanks to Winnipeg’s best kept secret.
So the question is, did we hurt ourselves but placing an undue focus on quality aspects of the process we didn’t need to?
I have no idea. And while it makes a nice, lengthy blog post, in the end, I haven’t been stressing about it much (at least not until I read the blog post; thanks for nothin’, Kohari). But here’s the position we’re in: We’ll be releasing beta next week and our first order of business is to start looking at new features, which we will release at regular intervals (at least bi-weekly, if not more often). We have no refactoring to do because our codebase is exactly where we want it to be architecturally.
The difference is we’ve lost a month-ish worth of income. And at the moment, that income is still a big unknown. AgileZen could have launched to a whole lot of nothing in which case, Nate would have chalked it up to experience and thanked his lucky stars he didn’t invest any more time than he did in it. We may do the same and realize that we should have launched sooner so we hadn’t sunk any more effort into it.
There’s an element of faith involved though. Maybe it won’t catch on but I really believe it will. And if I plan to be looking at this code for the next five to ten years or more, I like the fact that we put a little extra effort into it early on.
Another nice side effect of this is that it’s helped defined the culture of our development team to a large degree. It helped us to build the team we have and by setting the ground rules early, it’s helped us maintain a high standard so that it’s almost become second nature by now.
Man, this blog is saving me a ton of money in psychologist fees.
Kyle the Clear-headed

Google is taking site’s loading speed into consideration in determining its ranking. Even though this will not land a big impact, it is still something we (webmasters) should really look into. The reason is pretty simple – majority of visitors are usually in rush and no one is fond of waiting half a century before the website finally load its content or failed to load.

In another words, if your site is slow, you are subjected to lose a lot of visitors. Visitors are traffic, traffic affects reputation and they can potentially generate revenue. It can be a domino effect if one ignore the consequences of a slow-loading site.
It is essential to identify what builds up your website before you jump into the codes trying to speed things up because it cannot be done without knowing the culprits that are slowing down your website. This article compile a collection of useful web service and tools that will help you to diagnose and analyze you site, allowing you to understand your site better.
Web Services
Test the load time of all Website objects (html, images, Javascript, css, iframes and others). You can also check how fast every element of your Website load and improve the slow-loading items. At the summary of test results, you see the report of the site loading time, loading time of each element, element sizes and the total number of elements.

Combines two of the most popular Firefox performance add-ons – Yslow and Google Page Speed. Gtmetrix gives you suggestions what you need to improve your website. Although Yslow and Google page speed are recommended for Firefox, it can also be applicable to other browser.

Test your website speed performance, and get the report sent to your inbox.

Loadimpact is a very important tool for large Website visited by tens of thousands visitors each day. A free account allows you to check the loading impact with 50 simulated users, anything more you’ll have to upgrade to a premium account.

Site-Perf fully emulates natural browser behavior downloading your page with all the images, CSS, JS and other files – just like a regular visitor and on the report you can see Website page loading what files start loading at first and how fast. It as very useful performance report to find elements that you need to improve your Website loading time.

Benchmark your website or test the speed of your web connection.

Conduct a real-time Instant Test for an individual Web page to test its performance from an external node location.

Allows you to monitor how long it takes for a user to download one or more of your web site pages.

Allows you to compare your website’s speed against your competitors.

Gives you the option to understand how your page is loading with different visitor’s Internet connection speeds. With Webtoolhub you will get information about page size, loading time with different Internet connection speeds and will get information about all Css, Javascript and Images that are used on page. Nothing more nothing less: all that you need for basic page speed test.

Iwebtool gives you the option to compare up to ten pages in same time. You also can check homepage, categories or posts loading time with just one click.

Shows the duration of a given website. This value can be used for showing how long a website take to load and if it is better to optimize the website or change a (slow) ISP.

Get performance data on any website on the fly without having to create a test script.

Applications
Open source tool for testing performance and scalability of web services. It runs HTTP load tests, which are useful for capacity planning, benchmarking, analysis, and system tuning.

Page Speed is an open-source Firefox/Firebug Add-on. Webmasters and web developers can use Page Speed to evaluate the performance of their web pages and to get suggestions on how to improve them.

YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages.

Internet Explorer plugin that visually displays the underlying requests made by the browser for content. It also provides suggestions on how to improve the performance of the measured page.

Multi-Mechanize is an open source framework for web performance and load testing. It allows you to run simultaneous python scripts to generate load (synthetic transactions) against a web site or web service.

(bellefoong)
Computer hardware can go wrong anytime. If your mouse ever conks out, your keyboard can turn a saviour.
Mouse Keys is an accessibility feature present in a various Windows versions that can let you control the mouse pointer with the keyboard.
You can press left ALT + left SHIFT + NUMLOCK keyboard shortcut to turn on or off this feature. Once activated, the Mouse Keys icon will appear on the taskbar. You can then navigate in different directions using the numeric keypad's arrow keys. If it feels too slow at first, that's because most of us use the mouse so extensively that it makes us handicapped without it.
As this
Microsoft Support article informs almost all keys in the numeric keyboard can mimic some feature of the mouse
Press the 5 key for a single mouse click and the plus sign key (+) for a double-click.
To drag an object, place the pointer on the object and press the INSERT key to begin dragging. Press DELETE to release the object.
To drag an object, place the pointer on the object and press the INSERT key to begin dragging. Press DELETE to release the object.
By memorizing & practising these keyboard shortcuts
alongwith those of popular applications, you may be able to improve your productivity & possibly dazzle those around you with your keyboard skills.


Here it is, our winners for ShortrunCard custom-printed plastic cards contest. Sorry for the slight delay!

A little recap of what the winners will be getting before we announce the list. 3 winners, each getting a $200 gift card, $100 gift card and $50 gift card, courtesy of ShortRunCard. These gift cards can be used to order customized plastic cards.
Some of you raised the concern whether this includes the shipping fees – the answer is yes/no. Assume you won the $200 gift card, and your total bill plus shipping is $210; after redeeming with your gift card you will only pay $10 extra.
Without further ado, here are our winners!
- Ebta ($200 gift card)
- Swat Chap ($100 gift card)
- Shawn ($50 gift card)
(ref)
More giveaways coming up!
We’ve got more contest and giveaway coming right up. Stay tuned – subscribe to the RSS feed, become a fan in Facebook or follow @hongkiat on Twitter to be amongst the first to know.
I'm presenting at ADNUG next Monday on the 13th. By request I'm going to expand on one of my old MSDN articles: Functional Programming for Everyday .Net.
It's not up on the ADNUG site, but here's the abstract:
Functional Programming for Everyday .Net Development
Forget the silly Fibonacci sequence examples and abstract math problems, how do functional programming techniques help me do my job with typical enterprise development projects? In this talk I'll look at places where it's advantageous to compose code with first class functions instead of objects. I'll show how to use Continuation Passing Style to achieve lower coupling in your code internals by getting closer to the "Tell, Don't Ask" ideal. Finally, I'll show how passing blocks can be a way to formulate API's that result in less code for the consumer to write, more readable code, and fewer errors.
I *think* I submitted this talk to CodeMash as well, so there's a chance I might give this talk again in January there.
Don't worry, I'm still on my side-project break so I haven't done anything whatsoever to prepare yet:)

Vintage design is always described as outdated, old looking design with most updated products like Facebook or Nintendo Wii featured… what?

Yeah it’s not a typo, I mean it, and you’re gonna witness 24 modern products adapted into vintage style advertisement. Some of them are created by modern designer, yet others are modified directly from genuine vintage ads originated from your parent’s era.
So get amused, get inspired, who knows vintage might be the design direction for your next viral ad campaign!
Social Media
“Striking, miraculous social team-up!” Designed by advertising agency Moma.

“The fabulous voice system able to put your family together.” Designed by advertising agency Moma.

“The sublime, mighty community with just 140 letters!” Designed by advertising agency Moma.

“Send and watch splendid and captivating films, 24/7.” Designed by advertising agency Moma.

Gaming Console
“Gonna be an exciting night… ;)” Adapted by photality.

Have a rockin’ Christmas! Adapted by Partyshot.

“Meet the amazing Nintendo Wii.” Adapted by gugacurado.

“Amaze your friends with heroic guitar music!” Adapted by steveRS.

“The simple rule ‘Homework first – Playstation second’ has solved the problem in thousands of homes.” Adapted by larzuc.

“Back in the Fifties, I always wanted one of these.” Adapted by WhoElse.

Computer
“Women know what they want. ;)” Adapted by cccvrcak.

“Beauty. Brains. And now more brawn.” Adapted by ShayLaVie.

“Pure beauty. Pure power.” Adapted by chrisulloa.

“All computers are not created equal.” Adapted by fxchick.

Music Device
The extraordinary iPod that brought back Apple empire. Adapted by tahias.

Mobile Phone
Perhaps it’s a Sony Erricson phone, but the ads is quite fabulous and amusing. Adapted by RebelD0g.

It’s Nokia! Adapted by brypro63.

Surely cellphone is better. Adapted by kawabunga2002.

“Think mobile. Think Samsung smartphone.” Adapted by nicootje.

Automobile
By far the best blending work I have witnessed from this series of ads. Adapted by Gavh.

“Because it’s a better car.” Adapted by abbott567.

“There’s nothing like a new car for gayety.” Adapted by mayfae.

“So if you’ve wanted to buy a car that sticks out a little, you know just what to do.” Adapted by unrealcity.

This can surely change the history of automobiles. Adapted by DocMinor.

Household Appliance
Just because your wife deserves the best. Adapted by MeanMrMustard.

“My grandmother would of loved one of these back then.” Adapted by mehere.

More Vintage
Looking for more vintage design or create your own? Well you came to the right site!
Way back in 2004, a project I was working on required a web page to be exported as a Word document (.DOC). Without relying on any components, I utilized the Office XML & HTML technique to implement this feature.
I posted my sample on CodeProject to seek feedback. Over the years, I've received some generous comments & feature requests. Many wanted to know how to add a header & footer to the dynamically generated Word document.
With the help of the
Microsoft Office HTML and XML Reference, I devised a
hack to add a lacklustre header and/or footer. Some folks wanted to customize the contents of the header & footer but when they tried with my hack that offered limited functionality, the header/footer text showed up in the document body to their annoyance. This July, an ingenious developer
posted a hack that can overcome this problem, in the Comments section of my CodeProject article. His practical workaround was to pack the duplicating header/footer text inside a table & push it off the page's dimensions with CSS.
For those interested, I adapted his VB.NET snippet into a complete sample in C#. Instead of using a ASP.NET webform as I did in the original code sample in the article, I have used a Generic Handler (.ASHX) to dynamically generate a Word document as it is more suitable for this purpose.
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.Text;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
StringBuilder sbTop = new System.Text.StringBuilder();
sbTop.Append(@"
<html
xmlns:o='urn:schemas-microsoft-com:office:office'
xmlns:w='urn:schemas-microsoft-com:office:word'
xmlns='http://www.w3.org/TR/REC-html40'>
<head><title></title>
<!--[if gte mso 9]>
<xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>90</w:Zoom>
<w:DoNotOptimizeForBrowser/>
</w:WordDocument>
</xml>
<![endif]-->
<style>
p.MsoFooter, li.MsoFooter, div.MsoFooter
{
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
tab-stops:center 3.0in right 6.0in;
font-size:12.0pt;
}
<style>
<!-- /* Style Definitions */
@page Section1
{
size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in ;
mso-header-margin:.5in;
mso-header:h1;
mso-footer: f1;
mso-footer-margin:.5in;
}
div.Section1
{
page:Section1;
}
table#hrdftrtbl
{
margin:0in 0in 0in 9in;
}
-->
</style></head>
<body lang=EN-US style='tab-interval:.5in'>
<div class=Section1>
<h1>Time and tide wait for none</h1>
The quick brown fox jumps over the lazy dog
...
...
<table id='hrdftrtbl' border='1' cellspacing='0' cellpadding='0'>
<tr><td>
<div style='mso-element:header' id=h1 >
<p class=MsoHeader style='text-align:center'>Confidential</p>
</div>
</td>
<td>
<div style='mso-element:footer' id=f1>
<p class=MsoFooter>Draft
<span style=mso-tab-count:2'></span><span style='mso-field-code:"" PAGE ""'></span>
of <span style='mso-field-code:"" NUMPAGES ""'></span></p></div>
/td></tr>
</table>
</body></html>
");
string strBody = sbTop.ToString();
context.Response.AppendHeader("Content-Type", "application/msword");
context.Response.AppendHeader("Content-disposition", "attachment; filename=HeaderFooter.doc");
context.Response.Write(strBody);
}
public bool IsReusable
{
get
{
return false;
}
}
}
To clearly understand the code you would have to download the
Microsoft Office HTML and XML Reference which is in .CHM format (as there is no online version of it) & look up the exact meanings of custom CSS properties.
Related links:
HOW TO implement "Download as Word/Excel" functionality through a web page
HOW TO send an email with a Word or Excel file attachment built on the fly
HOW TO generate a Word document dynamically with user submitted text formatted with Free Text Box

