Sunday, October 9, 2011

Quasio - contact filtering application

Well well well... It has been sometime... I have been busy and have experienced some hardships in life with close deaths in the family but I am back! The long awaited Android application that I have been building is out. Quasio is out and available:

Quasio

The full details are in the link. I will post what I shared with a group of techies via email in this blog for public consumption. This will cover the story and motivation behind the app... Here we go:

Background:

The idea for the application came about while transferring cell phone providers. I bought an Android phone because I wanted to develop applications and create a passive income stream from it but had no idea what those applications would be. While transferring numbers from my old trust worthy BlackJack phone to my new Android HTC EVO phone, I tried to get software to do it but could not find one that could do it conveniently. As you would imagine this can be a nightmare when you have lots of contacts which you then have to manually transfer over wasting precious time. Through this frustration a thought came to my head: Why am I transferring Jane and John Doe over when I barely speak to them? I do not want to delete them, but it would be nice if there was an application out there that would hide contacts if I have not spoken to them in X days, weeks, or months...

Application Idea Was Born:

I first did some application searches in the Android Market to find an application that can do this reasoning: "somebody else on this big planet must have experienced the same frustration and need the same thing... I am pretty sure this exists out there, I will just buy it and be done with it", but to my surprise, nothing existed in the form that I wished it had. I then said, "let me just move people into groups and manage it that way. This is a feature available in the native Contact application." The developer in me, i.e. the lazy developer in me spoke loudly and said: "I am lazy! I would prefer for the phone to do it for me." So it was time to scratch my itch and get it done! I bought an Android book from Manning:

Android in Action, Second Edition

and read the book in a week and was pumped up! It took me 3 weeks to develop the application (nights and weekends with some slacking :( ) and then I spent another week or so building in the security leveraging Google APIs and recommendations. I told some of my friends (software developers, QA testers, and non-techies) about the app and invited them to a private beta testing. We tested for about 2 weeks and fixed some bugs and usability/UI issues along the way. I was finally in a position to release the application and get it out to the market (so exciting to own your own product!!!)

Application release and Marketing effort:

I was very apprehensive to release the app to the market without a marketing effort and knew that sales would not be good without rising above the "noise levels" within the Android Market. The Android Market has to date 250,000 (this is a stale value and is increasing all the time, this value came from Wikipedia). I became concerned with this number and came up with the idea of creating a commercial to somewhat mirror the "Mac vs PC" commercials. I will not spoil it for you so I will provide you with the link as soon as it is fully edited and ready for YouTube prime time (I am starring in the commercial despite the good efforts of my director and producer trying to fire me from the commercial and get a professional actor lol! My ego wanted to be in it so I refused to be replaced, lol, Besides I write code, how hard can it be to act?). I am also creating a video that will dive into how to use the app and cover questions that may commonly arise among first time users.

Despite not having the marketing engine in place, I released the application to the Android just to make sure it works and because some of my friends have been waiting to purchase it! So it has been released and has been out for about 2 weeks to date:

https://market.android.com/details?id=com.smartcontacts

The full description of the application is in the link so I will not fully explain the functionality here to avoid redundantly covering it. To sum it up though this is what the application does:

  1. It breaks up your contacts into 2 groups: active and inactive (all contacts with phone numbers on the phone are automatically synced with the app and are kept in sync)
  2. It allows you to set how long between conversations (text/phone) active contacts show be moved to the inactive group; so if you set it to a week and you have not called/texted John Doe or John Doe has not called/texted you in a week, John Doe gets moved to the inactive list automatically. The minute you contact John Doe or John Doe contacts you, John is automatically moved to the active list (you can also move people manually if you want)
  3. Active and Inactive contacts are sorted by how often you talk to them then name. For instance, if you talked to John 10 times and Eddie 9 times, John will be on the top of the list because you have interacted with him the most
  4. The app lets you add, delete, call, text, edit, move contacts between active and inactive groups, and view the call log

This app will save you from scrolling/searching/using-shortcuts to find people you talk to the most in the sea of contacts on your phone. This is what I wanted for myself because I hate wasting time doing all of that.

The app price is $1.99 which I think is a fair price point but may be subject to change. I do not believe in the Google model of giving things up for free in the hopes of monetizing applications via adds. Ads are good for certain types of applications like applications with contextual information that may cover a particular niche, subject, and/or topic. This helps both the business advertising and the content provider, leading to higher conversion rates due to its relevance to content and avoiding spamming the user with useless ads. My application has no content to speak of other than your contacts which is not relevant to any advertiser so I would hate to steal their money with clicks that will likely not lead to the desired action.

Another thing is that the major benefactors of ads are the ad networks, i.e. Google and the rest of the ad providers, unless as I have said before that the application itself provides content related to the ad and therefore produces ads relevant to the user base.

IMHO developers should be paid for their efforts and businesses since the dawn of time have been run on revenue and profits and not the hopes that people will click on ads. Every other sector of society expects money for their services, it is about time we as developers start to ask for the same (doesn't have to be much but something we also need to eat!)

That is the end of the email thread. Hope you enjoyed!

Follow me on Twitter mrosario2012

Saturday, May 14, 2011

Diversify Your Life Portfolio

Lately, I have been working pretty hard on an Android application for a new contact management system (finally!!) and have been just doing that after work and on the weekends. It has been time consuming because I had to read a book and learn the platform (which I do not mind because I am a software developer and love coding), and has practically been the only thing I have done in the past few weeks. This is fine and actually recommendable when comes to building a product, business, or service, but can cause havoc to your emotional and entrepreneurial health. Why can it be dangerous to your emotional and entrepreneurial health?

In a word – failure. If what you are working on fails to get to where you expect to, or just doesn't go anywhere, you will take an emotional and entrepreneurial hit that may put you out of commission. The journey to achieve financial freedom is a harsh and hard road one has to travel that has hurdles, bumps, and maybe some discomfort. Because of this inherent risk, I believe people should diversify their happiness or life portfolio to hedge against and minimize the risk of failure in one area of life. Tim Ferris discusses this in part in a blog with 37Signals.

We should be involved in multiple things in life outside of business. Tim recommends having a physical activity to balance your life like going to the gym and setting exercise goals. This way if one of your weeks is bad on the business side, but you've reached a milestone in the gym, you will not feel entirely bad and may actually not even get upset at all. I think this advise is solid and should be obeyed like a commandment. The activity outside business could be dance classes, learning a new language, taking a class cooking, sculpting, teaching your children, volunteer work, etc; just something else where you can achieve, or help someone; this will feed your ego.

Life is hard and the road paved for entrepreneurs is tough, so be smart about your pursuits and try to strike a balance. This will help you make it through the hard times and overcome the setbacks. Stay positive, keep positive people around you, and soldier on in the battle for independence!

Follow me on Twitter mrosario2012

Friday, April 15, 2011

Fight the resistance


Often times, we want to get stuff done to accomplish a desired goal but fall short of accomplishing it. A short list of culprits:

“I do not have time”
“I just do not see the point. I may put in a lot of time and get nothing back”
“I am exhausted after work, forget it man. I rather play Xbox or watch tv”
“I have too many commitments, I cannot add another to the list”
“It's futile man... I will quit while I am ahead”

Excuses like these are just a way to protect your ego from your lack of commitment to get things done. When I mention this to friends I often hear, “I only have one life to live, I am not going to waste it”... Watching TV is not a waste of time? How much entertainment do you need in your life to feel satisfied and get on with what needs to be done to progress? I am a firm believer that pleasure should be rewarded only after hard work.

Everyone has interest in succeeding but few make the commitment to see it through. It is easy to talk and bs your way into feeling good with bs-sessions. The hard part, and the only way to get to where you need to go, is through work, not talk, work. Resistance is encountered when things outside of our normal sphere of comfort are challenged; this resistance is usually a deep societal and environmental training towards mediocrity that has a strong gravitational pull towards the easy path. It is time to challenge these assumptions and beliefs and question their roots. Is career thing for me? Do I want to be running with the rest of the rats on the treadmill to the retirement home? Why do I believe what I believe? Is it because I am afraid to be different and challenge status quo? Or is it because this was a thought I came up with after careful consideration?

Ponder this the next time resistance raises its ugly head. You have to choose to do it and see value in it in for it to get done. It may be hard and uncomfortable but you have to accept it and forge ahead. Challenge the voice in your head telling you to postpone action and “just live your life”. This voice is usually a lie or a mediocre cry from the years of indoctrination to “get with the program” and be like everyone else. Fight the resistance even if you are it.

Follow me on Twitter mrosario2012

Monday, January 31, 2011

Building equity with products


Software development is an awesome thing offering both pain and joy, but beyond that, it puts developers in a unique position. We can literally create a product out of thin air that solves a problem and adds value. Most of us do it for companies and receive compensation for it, others do it for their own business (we will leave out the hobbyists who do it for fun and the open source community in this discussion.) Which one builds equity and what should we pursue?

Let's start our look with default route people usually take en masse-- the employment route. Why is this the default? Schools prepare us for today's jobs or to become university professors. The institution of school was built to serve industrial means and as such must crank out good skilled employees who can serve the needs of industry. Sir Ken Robinson does a magnificent job at explaining how the system works and why it is deficient for tomorrows needs. How can school be preparing us for an unknown future? What will happen five years from now? One year from now? No one knows yet we pretend to be preparing our children for it... But I digress...

Going to school can be good thing and prepares us to meet the needs of industry today. As developers, a lot of us will study computer science and learn great things like discrete mathematics, hard sciences, math, programming, data structures, software engineering, etc. With this knowledge and skills at hand, we then hope to enter the workforce to build and/or enhance applications. This is an extremely pleasurable experience. Working on something you are passionate about and getting payed for it is the ultimate thing ever in my opinion. Here some of the other benefits of employment:
  • Steady and predictable income
  • Career progression
  • Working with a team
  • Growing personally and professionally
  • Learning new skills, technical and otherwise, from more experienced developers
  • Managing projects and teams
  • Working with people across regions and different cultures
  • Learning best practices
  • Getting to see what powers a company and how its technology infrastructure is structured
There are many more benefits to employment but there are some drawbacks as well. One I have come to notice as of late:
  • Ownership of your work belongs to your employer
In a corporate environment you get to build really cool stuff but own nothing and just take home what you have learned. The code is theirs and will be used to grow drive revenue or save money. Sometimes this revenue or savings can be in the millions. At my old employer, we used a vendors matching engine that was essentially nothing more than a 2-3 month project (at most), which the firm payed about 1-2 million for up front and had a maintenance cost of $200,000 dollars a year. Guest how many times we had to call them for support? Twice in 5 years. It's design was simple and elegant: a 2 tier C++ application hitting the database. Our applications fed it trade data from hooks we built to the database. The database had a series of triggers that called stored procedures or plain SQL that would take action upon receiving new trade data. It would perform matches when possible, report near matches, failed matches, and other exceptions to the users for their intervention. The matching engine was very flexible in the sense that we owned the database and were able to make schema and core changes to the database logic at will. 1-2 million dollars plus $200,000 a year for something we estimated would have taken 2 guys to build in 2-3 months. Amazing isn't it? Who would have thought that much effort would have that much of a return without being a rock star? Let's do some simple math here. Let's assume they would have paid 1 million dollars for it. That means that the 2 guys I mentioned in our estimate would have made $500,000 each (excluding the support income). Now assuming the worst case of our estimate, let's say it would have taken them 3 months to build. They would have each made about $167,000 per month. Not a bad wage huh? Remember this was just one bank paying this. Others banks would have probably paid the same with little hassle once they would have seen the competition pick it up.

Now obviously I am ignoring some costs here. The one cost of many I am ignoring here are the marketing costs and other miscellaneous costs. This would take down their earnings quite a bit. Another thing I failed to mention here is as well is how hard it is to sell to enterprise businesses or the Fortune 500. It can be incredibly hard from what I hear and can take forever for it to clear and for money and software to exchange hands. But the point I am trying to drive home here is the equity these guys would build from owning this software and that would increase overtime when enhanced it new features. Targeting small businesses would increase their chances of success as well (at a much cheaper price.)

This leads us to the final point of the blog and that is one of building equity. When you write software that you plan on renting or selling to the public, you are building equity overtime and increasing your net worth. The software business is sort of a copy and paste business model: build it once and correctly (or correct enough) then copy and ship the product to as many customers as you can acquire. The effort is not duplicated like when you are employed and have to constantly build newer things. You just have to build something people want or need once (with maintenance cycles of course) well enough and people will pay. Good thing about building a product is that it belongs to you and you can do whatever you like with it. One question you may have at this point is: how do I find a product people want or need? For starters, what do you want or need that does not exist or exists but does not meet your needs? What do family and friends our yours in unrelated areas of life want or need? What do people in the hobbies you enjoy want or need? There are many ways to find niches as described in this new book I am reading called Start Small, Stay Small: A Developer's Guide to Launching a Startup. I think any technical entrepreneur with ambition to get into the game should definitely pick up this book and add it to their arsenal. There is not talk here of chasing VC's and seeking millions in funding to get started. It basically teaches you how to build it in your spare time and on your budget. I cannot put the book down and have already started to employ his advice on market research using Google Adsense and other tools available online. Amazing read check it out.

Follow me on Twitter mrosario2012

Tuesday, December 28, 2010

Deceptive Software Products

Products to the naked eye look marvelous from the outside to the unsuspecting of us. I like to think of products (in particular software) as looking like this beautiful house:


Amazing isn't it? Beautifully laid out, marvelously sleek design, and inviting. The software may appear to have all qualities, but what about its foundation? Is it as solid and good looking as it appears?

Software users usually do not ask the latter and with good reason: They are abstracted from this because software professionals are suppose to ensure that the foundation is good. The problem is some IT managers and teams do not care about quality and are all about – “get it into production and forget the rest.” Do not get me wrong, I am all about pleasing the users and getting things into production as soon as possible, but when the number of hacks increase, and there are no unit tests or other testing methodologies in place to come back and confidently fix the hacks in the next release -- this leads to the eventual degradation of the product. Maintenance will become a nightmare, new features will sometimes have to be hacked in, developers will become afraid to change the code for cleanliness and maintainability purposes, and the broken windows theory will kick into full gear. This is a recipe for disaster in my eyes and will lead to developer dissatisfaction if proper measures are not in place.

When architects/engineers build bridges and houses, they pay close attention to detail and do not over or under promise things. In the software industry, we constantly see people offering the world and a cure for cancer to boot in the first or next version of its software. This in my opinion is part of the reason why at times software looks the way it does from the inside. For instance check this nasty Java hack:


public void foo(Object paramObject) {
...
...
 Object someObject = null;

 if (paramObject instanceof String)
 {
    if(“Y”.equalsIgnoreCase((String)paramObject)) 
       someObject = “Y”;
    else if (paramObject == null || “N”.equalsIgnoreCase((String)paramObject) ||         
             “”.equalsIgnoreCase((String)paramObject))
    {
       someObject = “N”;
    }

    //some other hacky hard-coded non-sense
 }
...
}



This one happens to be one of the most appalling Java hacks I have seen:


public interface SomeInterface {
  public boolean isConditionValid();
  public Results getResults();
}

public class SomeClass {
...

 public void foo(List<SomeInterface> list) {
  ...
  for (SomeInterface iface : list) {
   if ( iface instanceof ConcreteObjectA && iface.isConditionValid())
   {
      ConcreteObjectA a =  (ConcreteObjectA) iface;
      logger.debug(“A ConcreteObjectA is a part of the collection: ” + a.toString());
      doSomethingWithTheResults( a.getResults() );
   }
   else if(iface instanceof ConcreteObjectB && iface.isConditionValid())
   {
      ConcreteObjectB b = (ConcreteObjectB) iface;
      logger.debug(“A ConcreteObjectB is a part of the collection: ” + b.toString());
      doSomethingWithTheResults( b.getResults() );
   }
   //and more and more instanceof hacks below
  }
 }
}


This may not appear to be that bad for some but for me I find it deplorable. The same developer who wrote this, if left to his own devices, would destroy the product in no time with this kind of code. No understanding of polymorphism, object hierarchies, or design; really no understanding of anything other than javac and java commands. This individual is making a six figure salary writing this kind of garbage! Excuse my indignation but it upsets me that this same developer would go out of his way to bash software development and proclaim that is merely all just another if statement. Yes, it may appear to be easy on the surface, but proper design and coding techniques are rewarding, hard work, and part art - part science. These samples represent the worst in coding style and design, and are the reason software systems have shady/fragile foundations. I may submit the code to CodingHorror.com and also write a book called “101 coding hacks I have seen” or “Hacks r us”.

I know better when I see the product built with code like this and see it from the foundation upwards this way:


Time to put on the hard hat and get to work!

Follow me on Twitter mrosario2012

Tuesday, November 16, 2010

And furthermore, my son, be admonished; of making many books there is no end; and much study is weariness of the flesh. Bible- Ecclesiastes 12:12

Do you want to get something going but feel like you need lots of expertise to do so? Feeling this way, you buy books to learn things that will help you achieve your goal because you believe some level of knowledge is needed. For the time being this does not seem like a problem. However, you then begin to search online to see what the gurus are saying, and they are saying that more is required. You begin to think that what you have done is not enough so you then decide to stock up on more and more books. Then you begin to realize that your time is limited and now you decide that you need to learn about time management and spend more time looking for gurus and books to help with this dilemma. And on and on and on goes this never ending quest for perfection and well-roundedness.

As you can see from where this is going, you can continually find areas that you are not an expert in that can easily derail and push you towards seeking more advice from experts. The problem is you will never be an expert in everything so just learn enough and get started! Version 1 of whatever you are building or trying to do does not have to be perfect! As a matter of fact it will never be perfect so forget it and get started. If you keep trying to learn it all when will you actually embark on the journey to get something done?

Look at craigslist.com (some would argue that the look and feel is still version 1)... It is a multi-million dollar business built on simple principles. Craig Newmark did not waste his time trying to figure out HTML, Javascript, CSS, and web design in depth by buying an endless amount of books, going to seminars, or reading endless articles from experts. He just was passionate about an idea, built it out, and let the people decide where the product needed to go. Imagine if he had tried to be a jack of all trades and would have attempted to learn everything about server and client side development; craigslist.com would have taken much longer to launch or may have never launched at all if he would have gotten a bit discouraged learning any of the necessary components. Sometimes it is just good enough to know enough to accomplish a task. Let's take a web development example.

Say you decide to build a site selling shirts on your own (you should probably have a partner but building it on your own is fine). You will need to know HTML at a minimum and some server side language like PHP, Python, Java, Perl or one of the many others. So how do you start? Learn enough to cover what is needed to get the product out and refine it over time. You do not need to be an expert in any of these areas to get a product out, just need to know enough to make it live and improve it over time. I have a friend that has no formal background in Computer Science or programming whatsoever and decided to make a social website for people to find information on parties and concerts (targeting the Latino market). He wanted to learn PHP and HTML/CSS/Javascript so he set out to build this site which he did and improved it over time. In a few years time, the site was grossing a few thousand a month, was elegant, and he ended up selling it for a nice six figure price (will try to post his story, name, and the site in the future if he permits it). Not so bad for a novice that learned something new and became passionate about it. He told some of my friends that he was learning as he went along and did not let his lack of knowledge discourage him or set him out on a expertise expedition. He learned what he needed to know to get enough done today, then learned the rest as he went along. This point is expressed pretty well by our friends at 37Signals in this blog.

Imagine if you needed to be an expert to be in shape? The gyms would be empty and lots more people would be overweight. “I need to learn the chest chisel pump from so and so in order to build my chest so I will delay the gym until I learn from this expert”  This is silly non-sense. People often go to the gym with some basic understanding of what they have to do and learn as they go BY DOING. Sure they may have a trainer but they are still engaged in the act of DOING NOT READING. If you really need expertise in a certain area, hire someone who knows that area well so that the product or task you are trying to accomplish does not suffer a long delay. This is introduces parallelism into your life allowing more to be done faster (remember life is short). In this example hiring a trainer to work with you as you actually do the exercises is a good example of this parallelism – you are working out and getting expert advice at the same time as opposed to reading tons of books and magazines then working out (if you ever get to it). Tasks that are not dependent on each other should be done simultaneously to expedite the process when possible.

Reading and more reading can be a form of procrastination and can lead to anxiety. The less you do because of the less you think you know will probably result in thinking you are not capable of achieving. This will lead to getting-it-done-paralysis. Another problem that may arise is that suddenly after reading all the books and listening to all the gurus, you feel overwhelmed and are now definitely convinced that you do not have what it takes both consciously and subconsciously. This may lead to some common forms of procrastination and busy work like “finding that your place needs cleaning”, “you need to relax more after work and you do not have much time to get it done” (funny enough though you have time for the idiot box, i.e. TV), you will “start next week” or “over the weekend”, and on and on and on.

Now obviously I am not promoting this as a scientific journal but I am talking from my own personal experience and from what I have read on the web. Stop reading so much and get out and do something. Life is too short to try and become an expert at everything. Learn enough, do it, and improve it as time goes on. If you get nothing from this blog post get this! Do not worry about not being an expert now, the experts were novices at some point too but they started and overtime they got there. Make it happen and stop reading/listening and seeing others achieve – achieve yourself. Do not become someone else's cheerleader, live you life and do what you must – achieve!

Follow me on twitter mrosario2012

Sunday, October 10, 2010

Hello World on Steroids: Are You Building Lego Applications Today?


In the era of the almighty frameworks and reusable APIs, we are now in a position where applications can be put together quickly. This is awesome for people bootstrapping companies or anyone in general who needs to get a functional application up soon. My question and fear is what does it do to our understanding of the core elements of the system? Sure, we can run to the documentation or get a patch if one of the application layers beneath ours breaks, but wouldn't it be good to understand how things worked to some detail?

Welcome to the world of “Hello World on Steroids.” The era in which some programmers have become systems integrators and are merely just moving data: Read from a queue, do some simple data manipulation, write to the database, then write to a reply queue and repeat this pattern for all other applications. Not to knock systems integrators (systems communicating is necessary), but if this is all your doing, you may be effectively losing the ability to write algorithms and solve problems (I speak partially for myself here as I was experiencing this for awhile and still am to some degree; I know a lot of you out there are in the same boat.) The frameworks and APIs available are powerful and all encompassing, take Apache CXF for instance. This is a pretty powerful framework offering a lot out of the box:
  1. Multi-transport support: HTTP, JMS, TCP/IP, etc
  2. Various protocols support: SOAP, RESTful messaging, XML, CORBA, JSON, WSDL, etc

Apache CXF has a lot more features than this but with this short list you can kind of get a feel for some of the capabilities it possesses. This framework alone does not rob anyone of problem solving ability but the APIs that come with the core Java language and all the free stuff out there may. You will probably be writing nothing more than POJOs with getter and setters wrapping the real APIs doing all the heavy-lifting. Want to connect to the database reliably and manage connection pools? Use Spring and Apache DBCP. Want to serialize an object to XML and deserialize XML to an object? Use JAXB. Want to create a tree structure or hash for some data structure you are creating? Use Java's Collections framework. If you are in an organization that has a lot of stuff built in-house that you have to use, the same applies to you – most of the work done for us out of the box. All we have to do now is design and put things together like Lego blocks. Therefore, the hard thinking is done for us by a generous bunch of geeks. So are we becoming mere dot-getters and dot-setters?


These frameworks and APIs are great or so you may think, and I agree at some levels, but how does this stuff work? How do you use it properly if you do not understand or cannot write one yourself? What happens if it breaks in production? Do you stare at the stack trace in fear and run to the closest browser for your coding ally and team-mate Google? This is a dangerous position to be in as a developer and effectively dumbs us down over time if we are not doing anything challenging. Some of you may be saying: “Ok I get what your saying, but this stuff is open source and I can see and learn from the code, isn't that enough? Documentation for a lot of these tools rock as well so I do not need to know anything at all. Also buddy, the web community out there is supportive and someone will have the answer on Stack Overflow or some other site no?” First question: It may well be enough but I contend that a lot people may shy away from getting the source and learning from it. To the second question: these communities are awesome and a God-send; yes we cannot know everything and it is more productive to ask instead of wasting time thinking about what went wrong but if you do not think at all your in for serious trouble in the long run.

Fundamentals should be covered in detail and well understood. Whether it is covering these things extensively in college or on your own, you should know at least how data structures work. As a developer, you should have some core knowledge of algorithms and framework development to begin to understand what may have been the design decisions of the team building the frameworks you use, the choices they may have made while building it, how they may have built it, advantages and disadvantages the framework may have, and this may be the best part: potentially extending it and/or contributing to it. If you are contributing to a framework and/or API this is a good sign that you are on the right track and probably passionate about the field. This to me is also a sign that you may possess adequate knowledge in the area. If this is the case for you, then this article is a moot point to gloss over and ignore. For the others out there who are not in this subset and belong to the dot-getters and dot-setters club be warned: Go beyond just putting applications together as Lego blocks and try to get some depth in some area.

To end this I would like to say, I strongly agree and support the notion of Lego application building and reuse as much and as often as possible. There is no point in reinventing the wheel over and over again when problems have been solved efficiently by people with expertise in niche areas of the field. My problem is when developers make no effort to understand the plumbings of what it is they will be using and are just happy making API calls to get the work done. I think this is a dangerous approach to take and just waters-down what we do for a living and takes some of the greatness out of it.

Follow me on Twitter mrosario2012