The Pareto (80-20) Principle in Technology Business

I swear by the Pareto principle as a universal duality that applies to almost anything. Got this image from Contactme.com where it shows the different applications of the principle in business.

I wish to extend this further by saying that engineering, especially Software Engineering’s Agile Methodology, uses this principle. The first 20% of the specs you develop first should cover 80% of the value of the project to the end-user already. The initial efforts, which are usually the most coordinated, should take care of the main problem being addressed. If you manage project priorities this way, it makes sure that the customer gets results early and feels the value of the project early on. The key takeaway here is knowing what the customer believes is of most value and correlate this to what your team believes is the most important. This is easy to say but is a very tricky balancing act every single time.

Take it one level down, to engineering design, and the same rule applies. The ideal model, the jump-off point in any engineering design, takes care of 80% of the solution. Executing the ideal model will take 20% of the effort. The remaining 80% of the effort solves the 20% of the non-idealities.

This also roughly applies in the statistics of design. Most of the problems that might arise have less than 20% chance of happening. However, engineers use 80% of the effort in mitigating these potential failures. So better make sure your team does not get lost in the details and forget the relative value of the particular task in the big picture. Sometimes, it’s unwise to spend too much resources in solving a pesky problem that has much less than 20% chance of happening. Especially if this is delaying launch.

pareto principle

My Prediction on Time Travel

First off, the context. I was reading about the NoKor bombing of South Korea and was theorizing probabilities of a World War. Then i saw this website on various predictions about the world (predicting the third world war to start Nov2010!!) and came across a mention on the possibility of time travel.

I think Stephen Hawking’s experiment on inviting people to a time-traveller’s party was flawed.

Continue reading “My Prediction on Time Travel” »

Top 10 Strategic Technologies for 2011 [a repost]

Reviewing Dagitab’s positioning as an IT Company in today’s world.

Gartner Identifies the Top 10 Strategic Technologies for 2011

Analysts Examine Latest Industry Trends During Gartner Symposium/ITxpo, October 17-21, in Orlando

STAMFORD, Conn., October 19, 2010 —

Gartner, Inc. today highlighted the top 10 technologies and trends that will be strategic for most organizations in 2011. The analysts presented their findings during Gartner Symposium/ITxpo, being held here through October 21.

Gartner defines a strategic technology as one with the potential for significant impact on the enterprise in the next three years. Factors that denote significant impact include a high potential for disruption to IT or the business, the need for a major dollar investment, or the risk of being late to adopt.

A strategic technology may be an existing technology that has matured and/or become suitable for a wider range of uses. It may also be an emerging technology that offers an opportunity for strategic business advantage for early adopters or with potential for significant market disruption in the next five years.   As such, these technologies impact the organization’s long-term plans, programs and initiatives.
Continue reading “Top 10 Strategic Technologies for 2011 [a repost]” »

REWORKing Dagitab pt1

I just finished reading this book from one of my idols in business, the people of 37signals. I bought the book upon seeing DHH’s speech in Stanford about unlearning your MBA that was recommended to my by a good friend and also someone i look up to in business, Reese.

The book changed the way i saw things so I thought i’d write a summary of each chapter here and relate it to my company, Dagitab. We’ve been trying to turn our company around and we know that we need a focused approach on reworking the way we do things. Given my bad memory, i know i better write it down on a blog so i have my own knowledge management system. KM! my initials.

Anyway, if you find this a good read, trust me, the book is way better. so go buy it. i don’t wna cost them potential sales by publishing each chapter! Continue reading “REWORKing Dagitab pt1” »

Debugging Maven Applications in Eclipse

I just found out how to work with Eclipse debug tool and was able to integrate it with maven from this article.

Anyway, here’s how you could do it.

Step 1: Setup External Tools for Maven

Go to the Run->External Tools->External Tools Configurations… menu item.

Create a new program configuration by selecting “Program” and clicking the “New” button. On the “Main” tab, fill in the “Location:” as the full path to your “mvn” executable. For the “Working Directory:” select the workspace that matches your webapp. For “Arguments:” add jetty:run or exec:java or any maven plugin that you will use to run your application.

Move to the “Environment” tab and click the “New” button to add a new variable named MAVEN_OPTS with the value (should be a single continuous line):

-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

If you supply suspend=n instead of suspend=y you can start immediately without running the debugger and launch the debugger at anytime you really wish to debug.

Step 2: Setup the Debug Tool

Go to the “Run->Debug Configurations…” menu item.

Select “Remote Java Application” and click the “New” button. Fill in the dialog by selecting your applications project for the “Project:” field. Select Standard (Socket Attach) in the “Connection Type:”. Set the host to localhost and ensure you are using the same port number as you specified in the address= property above which is 8000.

Step 3: Run the Application

Choose Run->External Tools and select the name of the maven tool setup you created in Step 1.

Step 4: Debug
Choose Run->Debug Configurations… and select the name of the debug setup you setup in Step 2 and press debug.

HTML Game Bot using Selenium Grid

I was preparing my presentation on Java web testing yesterday and I came up with this interesting idea for my demo. Part of my presentation discusses the web testing framework Selenium. Selenium is a suite of tools to automate web app testing across many platforms.

Also at the moment, I was hooked in the Facebook application development mania. So I tried many of the applications there, just to assess the “possibilities”. HTML games gathered quite a buzz among my friends so I started playing one game called Elven Blood.

And so going back to the interesting idea I came up with. Here it is:

HTML game + Selenium = Game Bot

I sat down did a few clicking in Selenium IDE, copy-pasted the generated code, tweaked a bit to add logic and got this:


import org.junit.Before;
import org.junit.Test;

import com.thoughtworks.selenium.Selenium;
import com.thoughtworks.selenium.grid.tools.ThreadSafeSeleniumSessionStorage;

public class ElvenBloodBot {

	@Before
	public void setUp() throws Exception {
		ThreadSafeSeleniumSessionStorage.startSeleniumSession("192.168.0.2", 4444, "*firefox", "http://apps.facebook.com");
		ThreadSafeSeleniumSessionStorage.session().setTimeout("120000");
	}

	@Test
	public void testBot() throws Exception {
		Selenium selenium = ThreadSafeSeleniumSessionStorage.session();
		selenium.open("/elvenblood/");
		selenium.waitForPageToLoad("120000");
		selenium.type("email", "youremail@account.com");
		selenium.type("pass", "password");
		selenium.click("login");
		selenium.waitForPageToLoad("120000");

		selenium.click("link=Character");
		selenium.waitForPageToLoad("120000");
		String max_stamina = selenium.getText("//div[@id='app_content_21371199019']/div/div/div[6]/div[1]/table[2]/tbody/tr/td[2]/table/tbody/tr[3]/td[2]");
		selenium.click("link=Quests");
		for (;;) {
			Thread.sleep(30000);
			String cur_stamina = selenium.getText("//div[@id='app_content_21371199019']/div/div/div[3]/div/table/tbody/tr[2]/td[2]/div/div[2]/div");
			if (selenium.isTextPresent(max_stamina+"/"+max_stamina)) {
				selenium.click("//input[@value='Do quest']");
				selenium.waitForPageToLoad("120000");
			}
			selenium.click("link=Quests");
		}

	}
}

The bot has a very simple logic, which basically checks the current stamina of my character. If it is full then it will do a quest.

I left the Bot running on Selenium Grid using one of our servers. So I can use my laptop to do real work while watching my character level up. :)

Work on Stuff That Matters

I stumbled upon the recent blog post by Tim O’Reilly last night.

It essentially talks about focusing on making real contributions to the outside world. Three points are central to this article. First, work on something that matters to you more than money. Second, create more value than you capture. And lastly, take the long view. The blog is very insightful and motivational.

During this tough economic times it is really hard to focus on the big picture. The past few months our company concentrated mainly on increasing our bottom line. This conscious effort of making money as a driving force lead us to crucial mistakes in our decisions. We began accepting every client that comes in order to have a revolving fund. We considered alternative easy, money-generating business models for web applications, aka cash cows. And we increased our production without considering the quality of our output. These band-aid solutions will never be successful in the long run. We will only continue to struggle financially if we remained like this. And more importantly, these decisions failed miserably on the idea of working on stuff that matters.

This lack of both direction and a concentrated effort on the company has become more apparent to me now more than ever. Our company’s mission, is to provide on-time and quality software solutions that enable our local businesses maximize their full potential. How is our decisions aligned to this mission? Are we closer to achieving this than the day we started?

For the start of 2009, we will begin making decisions that contribute to the big picture. Providing on-time and quality applications require that we have mastery over the things we develop. Repetition is good because the more experience we gain on developing the same system over and over again the more efficient we become. This entails that we lessen ground-up development and focus on improving our existing products. We will build upon our core business applications and expanding our scope as we move forward. All of these will be done in order for us to deliver true value to our customers. Because that is the stuff that matters.