Monday, May 24, 2010

Tester-driven development? What is the proper utilization of QA?


I was reading about more software development anti-patterns because on Tuesday I'll have to conduct a code review for a particular client. I managed to somehow stumble on to Tester-Driven Development. I honestly thought it was a typo and assumed they meant Test-Driven Development. I started laughing at the fact that there are projects that allow QA to drive the requirements of the application--but hey? Sometimes projects are so terribly managed that it happens!

If you ever find yourself on a project where production-level people (Developers, QA, Designers) are creating the requirements instead of the primary stakeholders, you better take a step back and think about how bad that could turn out. Oh wait, I forgot you could be telepathic and just automagically know what the client wants.

Here's my two cents.

When a web project starts, the respective discipline leads (developer, QA, design, project management, stakeholders) need to figure out what their strategic goals are whether they are long-term or short-term. The reason why we have QA in at the start is to ensure that a lot of the functionality being built is not going to be a bug. Two really good examples I can think of off the top of my head would be scrollbars and IE6 graceful degradation. When running through a website that has a lot of transparencies, rounded corners, and drop shadows in Internet Explorer 6, you're bound to run into a "wat teh fuk" moment.

The best thing to do is to ensure that everyone (even the client) is aware that IE6 is an archaic web browser and doesn't support certain functionality without spending an extensive amount of effort hacking it into the application. This is why we employ graceful degradation on the agreement that there will be some 'weird' things happening for any IE6 users. The application will continue to function normally but there will be quirky things in the view, such as, fonts won't look anti-aliased or drop shadows won't be fully supported or transparencies won't be fully supported. Even Facebook, the biggest social network with over 300+ million members has decided to drop support for IE6. You can use this argument when you're explaining to the client. If they are hard set on supporting IE6, then it will impact both QA and Development time. Ultimately, depending on how complex the application you're trying to build, it could even double your hours just having IE6 being fully supported. Adding to this, you should definitely look into the web traffic metrics to see which browsers their customers are using. If IE6 is a minority, use this to your advantage in your argument towards partially supporting IE6.

Once the client understands that their customers using IE6 are a minority or it just isn't worth it, we can filter that down to the rest of the team. I truly believe that QA is underestimated in all agency work that I've dealt with. Most people above production-level work (project managers and up) just think QA click the application and try to break it. That's probably only 5% of the work they can actually do. Since we're bringing in QA at the start of the project, it allows them to write clear and concise acceptance tests for the requirements, as well as, prepare their automation tools for upcoming features.

Sadly, from what I've seen, they aren't utilized for those roles. They are simply clickers and subject to late hours because defects need to be regressed. If it was up to me, I'd have the whole team test the application--you'd be surprised to know how many project managers don't even know how to use the product they're building.

Sunday, May 16, 2010

Honesty over the Internet: Sales of Virtual Goods




If you watch the video you'll see that Markee produced it because of a mishap recently. After a "customer" made about $20,000 in purchases for virtual goods, they did a reversal essentially having that amount of money returned. Incidentally, there is a certain amount of time that a user can reverse purchases ( I don't believe a user can reverse a purchase that was made 3 years ago)---in this particular case, the amount it was stopped at was approximately $13,000.


In the end, notice that Markee's message is about stealing from companies that sell virtual goods and how the level of honesty in parents can directly affects their children's perspective on stealing.  Although his company did take a large financial hit for the customer's reversals, it is more of an issue for his company to step up their legal strength.

A customer should never be able to reverse purchases after 30 days. A terms of service/use is very important. If you look at company that has an air-tight terms of use--look at World of Warcraft's. There is absolutely nothing that a user can do to put Blizzard Entertainment at a bad position even when the game itself encompasses a plethora of scams, phishes, and frauds.

Lesson learned--that goes to tell you that there are many dishonest and dishonourable people on the Internet and companies (in sales for virtual goods) need to take the necessary steps to establish a higher level of legal control.

Monday, May 10, 2010

TextMate Tutorial: How to add a Strikethrough keybind to your Markdown bundle

Markdown is awesome for quickly generating Readme's on Github. After looking at other projects using the strike tag, I've decided to create a custom keybind for it in my TextMate Markdown bundle. Here's how:

1) Click the + sign on the bottom left and click New Command.
2) Paste this into the editbox and make sure you name your command "Strikethrough".

For the input field, select WORD in the drop down.
For the output field, select "insert as snippet".
As for the keybind, you can totally map it to whatever you're comfortable with but I chose Command-D as it is the same thing in Microsoft Word.

Cheers,
Jaime

Sunday, May 9, 2010

Google "Jaime Bueza"--I've come a long way since I was a young Ninja

Have you ever googled your name? I recently went about googling other colleagues of mine and the results were always their digital portfolios or resume; however, mine turns out to be a broken blog and 6 year old forum topic I created about how to set ranges on randomly generated numbers. I was terrible.
October 10th, 2004 I posted on WebDeveloper.com asking about how to set a range on a randomly generated number in Java. I can't believe that still shows up on Google's search results when you search "Jaime Bueza". 

Here's a few points of advice for aspiring software developers:
  • If you're going to ask a trivial question, ensure that you sign up as a troll. Name yourself: "lolyougotowned" or "trollpride" or "trollingftw". Don't put your real name down when you're asking technical questions. I'm sure that these search results will be detrimental to my career down the road.
  • If you're going to ask a trivial question, ensure that you've taken the necessary steps to hide your tracks (using a troll email address, etc). 
  • Given the fact that all technical interviewers will Google your name, ensure you can 'seed' your results to be in your favour. Use your SEO skills here! If you can somehow tilt the results in your favour (linking to your latest projects or a really intelligent response to an open source technical topic)--DO IT! A true Ninja will always tilt the situation in his favour for positional advantage over his enemies!
Incidentally, I asked that question on webdeveloper.com because of my undisciplined work ethic back in the day. Before I enrolled into the BCIT CST program, I always wanted to learn things without actually picking up a book (learning by example on the web). This was actually a bad idea for me as there's so much garbage on the web. The problem back then was that I had no formal development training, so I tried to learn how to code by myself. In my opinion, the best way to learn on the web is ensure that you have a solid foundation of knowledge: architectural skill set (design) and an understanding in different philosophical approaches to developing software (patterns). If I could turn back time; I'd ensure that I learned topics, such as, OOP, AOP, and inversion of control. I'm sure that if I had a solid understanding of those concepts prior to BCIT, I would've been more experienced in putting them into practice on different projects. If you have a strong foundation in regards to software development approaches and philosophies, learning a new programming language will come naturally.

Ultimately, languages, frameworks, and toolkits all fade away as time goes on; however, philosophies and approaches remain to be forever unchanged given how fast technology evolves. This is absolutely necessary to understand as this really shows how truly strong a programmer is: his ability to adapt to change and to be able to be successful in any language. This post is a segue to my next post about how to be a Kage developer (if you've watched Naruto, Kage is the highest ranking Ninja). 

Cheers,
Jaime


PS: I don't even watch Naruto; but it's cool they have a ranking system for Ninjas. 
PPS: I wrote this blog listening to TI - What You Know on repeat.

Iron Man 2: Apache configuration files show up on Iron Man's HUD UI

Whenever they show Iron Man or War Machine's HUD user interface, you'll see at the very bottom it said:

<IfModule ____>

</IfModule>

Are we to believe that Tony Stark was adamant about Apache configuration file syntax? Just joking--the person who designed it from a movie was probably being creative, so he copy pasted some stuff from his Apache configuration file.

I don't want to spoil it for you but I felt like I had to talk about this: whenever someone non-technical tries to be technical. A perfect example of this was the Hammer Industries CEO. When Ivan "hacks" his encrypted software and the Hammer Industries CEO says, "Wow, you totally bypassed the firewall so fast". Wait a second. Firewalls essentially protect the system from outside attackers (emphasize outside trying to come in). So why would they even care if it was a terminal INSIDE the corporate infrastructure. Totally defeats the purpose of network security. 

Another terrible example of "code" showing up in movies is: http://www.imdb.com/title/tt0218817/. This movie has HTML/CSS/Javascript in the introduction graphics! Also, if you think about the plot, they're using Javascript to communicate with a satellite-based interface. I think these guys are way too ahead of our times but when the day comes for raw Javascript to have the ability to control satellites--I'll be a very happy man.

If you haven't seen Iron Man 2, go watch it--it's a great entertaining movie. I watched it with my family for Mother's day.

The absolute best site for Apple product buyers

http://buyersguide.macrumors.com/#Mac_mini

So, after a terrible experience on Ubuntu for my father, I've decided to just go buy him a Mac Mini. Firstly, before I pull out the credit card, the first thing I do is go to MacRumors and look up the last update date for the Mac Mini. Incidentally, the Mac Mini was last updated on October 2009. That said, I'll be holding off on my purchase for a while as Apple may be updating these machines sometime within the next few months.

After buying so many Apple products, I've come to realize that if you're going to buy any Apple hardware, you need to buy it ASAP after it comes out. I made the huge mistake of buying an Intel Core Duo Macbook a few years ago, receiving it, and then 4 days later Apple releases an Intel Core Duo 2 Macbook with a bigger hard-drive and a lower price tag.

It's okay though--Pudge (the name of my old Intel Core Duo Macbook) lasted for a good 3+ years until he passed away from an accidental swim in "diet coke".

Dear Adobe, your Flash player has terrible performance on Linux platforms

After doing a simple 1-2 hour install on a new Ubuntu box, I decided to surf a few HD videos on YouTube. The reason I installed Ubuntu is because I wanted to test out the user experience of 'web surfing' on a Linux platform. Turns out, Adobe Flash Player has terrible performance when loading anything labeled "HD" on YouTube.

At first I thought it was just YouTube's video player, but I went to Vimeo and tested a few of their high definition videos and the same issues occur:

  • Ridiculous CPU spiking to 95%
  • Framerate for videos drop to 1-3 FPS

If you take the same box and view the videos on WIndows or Mac OS X, you can see such a huge difference in performance. Since pretty much every video site you'll ever encounter is powered by a Flash player (instead of HTML5 video!) I doubt that Linux will ever be a great user experience for a casual user (only watches videos, reads news, checks email).

Now that I've mentioned HTML5 Video, go check out my fork for HTML5 video implementation with Flash fallback for the poor IE users

Cheers