Sunday, August 31, 2014

Mongo DB

Mongo DB is a No-SQL database technology that is growing in popularity. Generally used in large intense transactional applications such as applications for telcos, national distributors, global e-commerce solutions, social media etc. Mongo DB presents a number of clear advantages versus the traditional tabular SQL type of databases.

Written in C++ on a high performance engine, Mongo organizes its data in documents and data collections rather than records. A JSON/BSON type of syntax is used to describe the data model. The schema is dynamic and the query language is object oriented.

Here is an example of how to define a one-to-many relationship in Mongo DB (I borrowed this example from the online docs @ mongodb.org). In a traditional SQL data modeling world, this would be equivalent with defining a record for a library card owner with name and address (in this case the owner has two addresses registered with the system).

{
   _id: "joe",
   name: "Joe Bookreader",
   addresses: [
                {
                  street: "123 Fake Street",
                  city: "Faketon",
                  state: "MA",
                  zip: "12345"
                },
                {
                  street: "1 Some Other Street",
                  city: "Boston",
                  state: "MA",
                  zip: "12345"
                }
              ]
 }

Mongo DB has very simple and powerful query/retrieve and inserts type of mechanisms. Here is for example how you retrieve from an inventory collection all the documents of a certain type. Here we go again from the online docs of mongodb.org

db.inventory.find ( { type: "novels" } )

Some of the advantages of using Mongo DB vs. other types of SQL databases are:

- higher performance on volumes of read/write operations
- built-in high availability, load balancing and fail over mechanisms
- better scalability
- built-in mechanisms to present location based data
- lower cost of ownership and maintenance
- better mechanisms to flexibly modify the database schema on the fly
- natural mechanisms to implement agile development practices

The concept of No-SQL databases is not necessarily new. By writing C++ code, we had been implementing document oriented databases since the mid '90s. But the latest developments (especially what happened in No-SQL databases between 2009 and now) and the scale of some applications are very interesting.

Mongo DB is used these days by companies like E-Bay, Forbes, Microsoft, Cisco and Craigslist and with the ever increasing need of dynamic volumes of data manipulation, it will more likely continue to grow.

Mongo stands for Humongous! But you don't have to be huge to start using it. It is actually a great idea to design with growth, performance upkeep, scalability and agility in mind.

Make it a great day!

Adrian Corbuleanu
Miami Beach, FL

Tuesday, August 26, 2014

Delivering business value: not an easy sell but a great opportunity

It is no news to anybody that software development, done right and positioned correctly in the market, delivers tremendous business value. If you know how to sell software solutions, you can make hundreds and thousands of time fold what you invested in a solution.

Let's take for example an international real estate company. When you acquire and import 1.5 million listings and get a subscription base of 6,500 realtors working on them, you as the owner of that solution can easily make in the double digit million$ from subscriptions fees, specialty products and service and other in-app products and services (such as training courses, coaching programs etc.)

Nonetheless there is a general perception in the market that software development is an expensive endeavor. Business owners, senior executives and mid level managers continue to look at things with a very short term perspective instead of seeing the long term ROI.

Did you know that in the mid '90s both Altavista and AOL turned down Google's technology at a little over $1 mil.? How much is worth Google now? It's probably a good thing that AOL did not buy them: they probably would have not known what to do with their technology.

So what can we do as business/product owners, from the small floral shop in the corner of the street to the big Fortune 100 company who is getting into the mobile apps arena?

1. Educate yourself

Technology is an ever changing field. Educate yourself by attending seminars/webinars, work shops, conferences, read well known books, online articles and documentation. The more knowledgeable you will be with technology, the greater chances you will have to know how to leverage it.

This goes further to say that, if you are a small business owner in particular, you should take formal education / classes in certain areas of technology: most of the small business owners are not sophisticated at all when it comes to technology and that costs them a lot of money.

2. Trust and respect your developers

Develop trust relationships with your developers. Have steady teams working on projects and give them your trust and credit. Your developers know what they do, they work hard and push themselves to deliver and it is only into your benefit.

Developers are also generally a different kind of breed. Because they are very smart and creative they set high standards to themselves. They do not like to be disrespected, looked over their shoulders, finger pointed etc. They do not work for doughnuts either- even though a lot of companies still provide doughnuts based treats and bonuses :) Miss treating or undermining a software developer is a big expensive mistake.

Trust and respect your developers: they deserve it and you owe it to yourself.

3. Create win-win situations

That's an important aspect. You are definitely in business to win. You are in business to make money and make your customers happy. You have to stay profitable and grow.

And so is your developer. Your developer is interested in a win situation as well. He/she wants a long term profitable and full filling relationship. He/she wants to see you backing up with your business expertise, with your money, with your connections, with everything you can bring to the table.

Too many companies these days only create win-loose situations. Learn how to create a win-win one.

4. Consult with your developers

Great developers have big egos. They want to be seen as business partners as opposed to "tools". They want to be heard. They want to be respected. Do that. Never under estimate the involvement and passion of a good developer- many time he/she puts his/her heart in what he/she creates.

Moreover a lot of developers have a lot of expertise and business acumen. They worked for big companies on big products and complex solutions. They know the technology and how it can be leveraged. They more likely know quite a bit about the market and the product themselves.

When a client of mine asked me in 2012 if he should buy some Facebook stock, I was very familiar with the company and the market at that stage. While I am not a financial advisor, I understand quite a bit social media and the technology around it (I understand for example why a company's stock cannot go up without a strong monetization model- which Facebook did not have at the time). I advised him to wait for 6 month for their mobile ads to go full blast and then to buy. It was a great piece of advise as the stock initially pulled down and only after that it started to climb up.

Consult with your developers. They are savvy and they want to help out.

5. Sell, sell, sell

I don't think there is anything else to add here. Your developer delivered your solution. Now it's time for you to sell it. Sell day and night and don't make thin excuses of "not enough features" type- we'll give you as many features as you want. You just go ahead and sell.

Make it a great day!

Adrian Corbuleanu
Miami Beach, FL
http://wittywebnow.com

Saturday, August 23, 2014

Continuous integration and delivery

Continuous integration and delivery is a practice that allows software updates to be constantly incorporated into a product / module. It is generally done by implementing a source control system (such as git, cvs or tfs) and configuring tools (such as Cruise Control, Tinderbox or Jenkins) that automatically build code based on certain criteria (i.e. per check-in, hourly build, nightly build etc.).

Continuous delivery takes things a step further and implements scripts (or internal directives of the build tool) that automatically deploy the artifacts that we built on a different number of target servers, i.e. development, qa, uat. These scripts can vary from simple xcopy type of scripts to more sophisticated deployment scripts and even specialized deployment products when the number of targets is large (such as hundreds or even thousands of targets).

In the context of agile / lean development, the practices of continuous delivery and deployment play an important role as it delivers quick results to be tested by qa or even seen by the customer.

There is a lot of talk in the industry these days about continuous delivery and deployment. Here are a few reasons why:

- a lot of companies still do manual integration and deployments of their new features
- they feel manual integrations and deployments are prone to errors
- they think manual integrations and deployments are time consuming
- they realized that, for large size products and teams, manual integrations and deployments step on the break with agility
- there is a perception in the software development community that automatic back-end integrations and deployments are hard to implement or even impossible (which they are actually not)

We would like to spend some time and discuss a few continuous integration and delivery architectures we personally implemented with good results.

We will even take it a step further and describe a solution that automatically links the work items (as seen by qa) into the merged and deployed code.

And we will finally reveal the "magic sauce" (which really there is nothing magic about it) of continuous integration and delivery of back-end / database components.

Keep an eye on our blog as things will heat up soon.

Make it a great day!

Adrian Corbuleanu
Miami Beach, FL
http://wittymobileapps.weebly.com