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

Monday, August 18, 2014

5 things I wish they were better on my smart phone

1. Battery life

With one hour intense talking/texting/browsing autonomy the battery of most smart phones out there is probably the biggest bottle neck in functionality. I never understood why it had to be like that. The technology is there to make batteries to last for weeks, not hours.

Different manufacturers offer different pricy and bulky solutions such as external plugg-able batteries that double up the phone's autonomy. Certain brands (like Motorola) do a better job than others. Different apps are offered as well to optimize the phone's battery consumption, turn off un-necessary services etc.

But that's about it. I think it's time for one manufacturer to step up to the plate and start to equip their smart phones with long lasting batteries to serve businesses and individuals users.

2. Some proprietary connectors

Apple is the champion of proprietary connectors, chargers, plug-ins and other doo-dads. While you appreciate the brand and the business driven philosophy, you can't stop thinking why don't companies design standard hardware.

I believe it will be in everybody's benefit and I actually talked to Android fans who would consider moving to iPhone if it had standard connectors and more free apps.

3. Screen sizes and keyboards

I know. You are still on a mobile phone. But screen sizes did historically suffer and for the most part they continue to suffer. Up until the more recent releases of Galaxy S5, Galaxy One and Galaxy Mega the productivity on a smart phone was low due to low usability and small screen sizes.

And it's not just the screen size, it's also the keyboard. On screen keywords remain relatively hard to use by most of the users. There are pretty advanced voice recognition features embedded in most of the phones but they are merely productivity tools: they are generally used more for quick search functions.

Let's see what iPhone 6 will have to say ...

4. Reliability of certain OS components

Android OS previous to versions 4.1 Jelly Bean (and even after) were fairly buggy especially in front end / gui components and icons management. I remember playing with one of my first versions of Android- it was a Gingerbread 2.3 and all of a sudden all my apps shortcuts vanished from my front page. And I had some 15 custom apps working with every day.

An earlier version, I believe it was a Doughnut 1.6, kept rebooting my LG smart phone a couple of times a day and for absolutely no reason (nothing should have triggered that).

The latest versions (i.e. KitKat) of Android are more stable. Apple's iPhone proved stable since earlier versions. And, surprisingly enough, same thing with the Windows phone: could not make one crash in a year.

5. Some hardware

For certain business applications there is a need for more on the phone storage and memory. While the current dual and quad processor platforms seem to suffice as far as horse power is concerned, we have seen demand in business applications that need to store data on the phone.

Those kinds of applications have strict requirements in terms of data availability, usability and performance and cannot rely on pulling data from a server in the cloud. At the same token, their on-the-phone databases are fairly large and need storage space and cache.

Make it a great day!

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

Sunday, August 17, 2014

5 things to do to spruce up your website

Small businesses often lack the in house expertise to build a compelling website. Many times the owner or a friend of the owner has some limited HTML experience and tries his/her hand at standing up the site. Some other times they hire a low cost shop to do it for them. Many times the ROI suffers.

What we see out there is a lot of sites that look so ... early 2000.

They do not use modern layouts.

They are neither mobile ready nor SEO friendly.

They are hard to update and do not have a content management system.

On the e-commerce sites we see quite a few that display product in a confusing manner, implement cumbersome navigation and insecure ordering processes.

There are still a lot of websites that do not use the right copy, have weak calls to action, do not implement social media, do not have a blog.

Here are a few tips on how to improve your website and increase conversions.

1. Use a well known platform

Use a platform like WordPress or Joomla! These platforms have many advantages such as the availability of well pre designed layouts and plug-ins, content management readiness, mobile readiness, SEO etc.

2. Design right

Try & implement a clean friendly easy to use design and layout. Buttons have to be visible, of good size and the sequence of fields/forms to fill out before placing an order has to be as straight forward and as short as possible.

For better performance optimize the size of your graphics and do not use flash. When embedding videos always run them off their hosted lication (such as YouTube).

3. Code right

Code clean, fast optimized. Avoid long procedural statements, repeated routines and long loops. Avoid over embedding. Write standard. Catch and treat as many exceptions as you can think of.

4. Use clear calls to action

"Call now!" or "E-mail now!" are under used and under estimated statements. They are important steps in converting a website visitor into a paying customer and should always be there.

5. Involve your audience

Besides the strong calls to action you need to make efforts to involve your audience. Once the people landed on your website, try to create a unique experience for then and start to involve them in your concept.

Videos for example are a great way of increasing customer invilvement. Make videos that tell your story. Have personnel pitch in short 1 minute videos. And always call to action during videos as well: a call to action from a video is stronger than a written call to action because it's much more personal.

Stick around and we will dive into more details in an upcoming series of blogs.

Make it a great day!

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

Friday, August 15, 2014

Writing code the right way

Some recent enterprise requests triggered some thoughts for me. We were discussing revamping some of their legacy platforms, ways to do it, good practices, resources and budgets. This was a typical client-vendor pre-sales conversation but it had a lot of "juice".

There is a lot of legacy code out there and a lot of bad written code at the same time.

Old procedural good on large scale solutions is particularly under the screen radar. It's buggy. It's clogged. It's ugly.

Mid level management does agree the code needs to be cleaned up for easier on-boarding, more reliability and greater re-usability but they have a hard time to make a business case out of it. Senior Management apparently does not want to hear about refactoring and not adding functionality.

In reality the bigger your projects and the larger your teams, the more need for well written, object oriented, standardized code.

Why is that? Very simple: it's very expensive to maintain and grow bad code. I would like to say that again: *very* expensive. You can easily have dozens of developers reading bad written code for weeks and trying to sort through before they can even start to add one line of extra code: run the numbers at the average industry standards programmers wages.

If you have code sitting on servers for more than a decade and even if that is your cash cow legacy product, here are five other good reasons to tackle a code overhaul with OOP, in-line comments, standard modules/components and all that good stuff.

1. Bad code is buggy

My experience as a programmer is that almost every time when I bumped to bad written code, the programmer who wrote that code had business and algorithmic issues as well. Hence many times bad written code had defects and un-predictable behavior in different circumstances. I've seen a lot of code crashing, core dumping, displaying funny things on the output etc.

2. Bad code is hard to read, modify and expand

In enterprise environments I've seen developers spending weeks and even month reading through legacy code before they could become productive. Cumbersome, repeated functions and procedures, mysterious global variables with exotic or overly cryptic names, "cookie-cutting" web layouts, overly embedded statements are examples of bad coding practices that make a programmer's life hard.

Modifying and expanding bad written code is time consuming as well. Instead of instantiating a well written object as many times as you want, you will need to procedurally work with that function and make sure it's behaving the right way.

3. Bad code is slow

Un-optimized, higher-than-necessary complexity code is many time triggering long loops that eat up processor's horse power. And they inevitably have an impact on the performance of the solution. And no: adding more hardware is not the way to fix this. The way to fix it is to write code right.

4. Bad code is hard to support

Your tech support team will tell you the same thing. They have a hard time in front of the customer supporting bad written code. Inefficient code automatically inserts longer support cycles, more time spent with the customer on the phone and more time finding work around solutions. There is also a human component to it: many times there are disagreements between the tech support team and the software development team and you do not want to fuel support's rants.

5. Bad code is hard to document and train customers on

Your training and documentation team will tell you the same thing. They have a hard time training the customers on bad written code and an even harder time documenting a user interface that is cumbersome or some mysterious functionality. Reputation of the whole company is at stake.

So if you are a reputable software development organization start implementing standards, frameworks and OOP today.

Make it a great day!

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

Thursday, August 14, 2014

After a PHP workshop

Last night I attended an interesting workshop the @SoFloPhp group of Adam Culp. He had a good presentation on re-factoring php code and using some good development practices.

As a fun fact I got this little red elephant from the Zend foundation :)

the php elephant
The little Zen php elephant

The talk reminded me of some of my old php days when everything was procedural code as opposed to Object Oriented.

But it also triggered some thoughts about php as a valuable and inexpensive tool used in projects. Here are a few of them:

1. php is now Object Oriented

That is a big step forward in code re-usability and organic growth. A programming language that has been historically procedural turned OOP over the last 5 years and joined the league of the other big boys in OOP. Here at Witty Mobile Apps we are strong believers in objects and code re-utilization as it allows for faster, organic growth of new features.

2. php has fairly strong frameworks

Zend is one of them. But you also have Symfony, CodeIgniter, Phalcon and Laravel (and many others). These frameworks are great productivity tools as they usually implement loosely coupled components, implement MVC, support different layouts, provide a multitude of templates and support many different database systems.

3. php is free

As a small or medium size business you won't have to pay for virtually any of these productivity tools. The tools are reliable enough and scalable enough to write and maintain enterprise level code. The FreeBSD and Apache licenses help out as well as they assure tight knit compatibility with other free resources such as *nix based web servers and.  

4. there is a fairly large and friendly php developers community

php was largely not used 10-15 years ago. Over the last decade it grew a lot in popularity though due to its open source nature and the numerous available frameworks. Every php workshop we attend we see more and more competent developers: they are open minded, collaborative and relatively friendly compared to other niche software development communities.

The online php support resources are great as well.

5. FreeBSD and Linux OSes are open source

The open source nature of these Operating Systems help a great deal when working on debugging code including php code. Actually having access to the sources and being able to fix things "from inside" makes a big difference because you do not depend on XYZ vendor with a closed system and a zealous Accounts Receivable Department.

And as a side note: here at Witty Mobiles we use php on a daily basis in all sorts of web applications but we have lately found in niche in writing web services in php to hookup MySQL databases to different kinds of mobile front ends. php works fast are reliable.

Due to all these reasons, I envision php to grow up even more during the upcoming years.

Make it a great day!

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

Sunday, August 10, 2014

10 niche technical skills and technologies in demand

Over the last two decades we had been witnessed what I call the "popularization" and "democratization" of software development. If a while ago programming computers was a niche skill for the scientists nowadays there are a lot of people with programming skills. Technologies like C/C++, Java, C#, Oracle, MySQL, MS SQL or even Ruby on Rails are not considered niche skills anymore: they are commodity skills.

So what are some of the newer / niche skills in demand? If you are a developer, read carefully as owning some of these technologies will take you out of the crowds:

1. Angujar.js

This is a front-end application framework developed by Google in the early 2010s. It is totally open source and quite simple and powerful compared to a jQuery for example. The frameworks allows for creating single-page-applications in a similar syntax with the tag syntax of HTML and Javascript but with a more content set of directives. It is currently a trend in mid size companies and Enterprise who are moving to Angular.js from the long iterative approaches of Javascript and jQuery.

2. WPF

Also called Windows Presentation Foundation, this technology allows developers to create Windows based client side interfaces. It is a growing trend in Microsoft intense shops including pure IT shops, document-intense shops, healthcare contractors and healthcare companies.

3. PhoneGap

PhoneGap is a mobile apps framework. It gained a lot of popularity over the last 3-4 years. The reason is that it allows the developers to create mobile apps using standard web development technologies and applications such as JavaScript and HTML as opposed to writing compiled mobile apps in Java or Objective C. There are significant reliability and data speed advantages when using PhoneGap.

4. Mongo DB

Mongo DB is a relatively new no-SQL type of database technology. It's not the only one out there but it's one that gets a lot of traction in the start-ups arena lately. Being an open source technology helps as well as a lot of young, skill full, enthusiastic developers embrace it. As opposed to a traditional tabular relational database, Mongo DB implements dynamic schemas and structures data in a manner similar to JSON docs. The technology is currently used in all kinds of applications from social media applications, through problem solving applications to graph-data needy travel and hospitality applications.

5. Scala

Scala is an OOP language running on the Java Virtual Machine. It is used for general software applications and it has a very concise syntax. The language was created to overcome certain weaknesses of the Java programming language. It grows a lot in popularity in the academic community and start-ups.

6. Selenium

Selenium provides an automated testing mechanism for large size web applications / web front ends. The bigger the shop you will work with, the bigger the need for Selenium. Selenium implements a record/playback type of tool to author the tests for a number of different programming languages. The tests are automated and they simulate the user's experience when browsing a site, filling out forms, submitting data etc. The test work across multiple different browsers and results are reported accordingly. It is an excellent tool if you have to test large scale sites with hundreds of pages and lots of contingencies.

7. Azure

Windows Azure is a cloud computing platform owned by Microsoft. While not THE cloud platform, this solution is growing in popularity with many of the Windows based shops. The reason is these companies are loyal to the Microsoft technologies and they have a lot of personnel already trained in these technologies. The platform provides support to build and deploy applications and services in a number of different programming languages and frameworks. Major competitors are Amazon and Rack Space. As cloud is a red hot technology and Microsoft has a strong footprint, it is definitely a platform you want to know.

8. Rally

Rally (owned by a company called Rallydev) is an enterprise platform that provides mechanisms and tool to implement agility and agile project management. While agility really depends less on the tools you use and more on your team's mentality a lot of big companies pay a close attention to implementing formal tools to support their agile initiatives. These tools may include source and process control tools, qa tools and documentation tools on top of their standard software development tools.

9. F#

F# is a  multi-paradigm programming language developed by Microsoft. It has functional and OOP. This strong programming language is many times used to generate code in ... other programming languages such as JavaScript and even C#. It is used in many enterprise-level applications of high complexity and especially where there is a shortage of traditional programming resources.

10. Scheme

Scheme is an artificial intelligence programming language. It is in essence not new (it's been around since the 80s) but it lately bubbles up in popularity as a lot of these difficult problem solving applications are brought back on the table. Scheme is a functional language and it is actually a version of the older Lisp. There are very few software developers competent in it and that's in many markets. Learn some Scheme by designing a chess game or something or try writing an image recognition application.

Please keep an eye on our blog as we will have soon write a series of articles to cover in more details all these technologies and tools.

Make it a great day!

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

Friday, August 8, 2014

NGO initiatives and technology

We have been recently approached by a couple of civic, non-government and non-profit organizations to advise with their technology initiatives.

These organizations focus on issues like the water quality, the Everglades ecosystem, global warming, public housing etc. Their business model is obviously different than commercial entities and their sources of funding are generally based on grands, community contributions or individuals contributions.

Nonetheless their projects are remarkable and they always rely on technology as an inexpensive, hard hitting way to advertise and operate.

This particular local Miami based non-profit group for example is very active in the Everglades arena and it is currently pursuing a project that deals with the water quality. Pollution, pesticides, fertilizers, household chemicals, herbicides etc. are all bad for our grand water systems and these people are ready to do something about this!

They advertise a lot of their events on Facebook. They maintain an e-mail list with about two hundred contacts. They have a website and a database. In the past it did work for them and they did not feel the need to implement extra technology.

However over the last year they grew unexpectedly in terms of number of members and initiatives. With support from some local communities, universities and individuals they started to go after bigger projects and actually started some of their own bigger size projects.

They now feel the need to design a niche proprietary social media platform targeted to their initiatives. As the groups grows, communication through their old e-mail list becomes confusing and the Facebook Events are too generic for what they need. Advertising on Facebook to acquire new members did not produce good results for them either and Google PPC (or even Google SEO) is over their current budget.

We had immediately proposed designing a niche social media platform for them. This platform would be open source, open platform, friendly and easy to use, nice quality of graphics and condensed targeted info and tools. A membership id would be implemented. Straight forward, water quality related, communication mechanisms would be implemented. Organizing and promoting customized online and offline events would be possible. Posting business related pictures, updates on projects and notifications would be a breeze. Sharing content, ideas and collaborating on projects would be easy. Sending a message to the whole group and having the responses clearly structured and displayed would be a major feature. Communicating with other online platforms (such as G+, Meetup.com etc.) would be implemented as well.

Keep an eye on this project as you may hear about it in the news!

Another non profit organization that approached us has initiatives in optimizing and increasing the efficiency of local government operations. In particular they have a great idea on creating a mobile app to locate and book the closest parking spot from wherever you are.

Imagine how many times you were in a busy area in South Beach or Mid Beach and you could not find a parking spot for a while: I had times when I had to drive around for up to 15 min. until I found a spot!

We have heard this idea before coming from some private entities who were trying to work out projects with shopping Malls but coming from a non-profit is even more remarkable. Their approach on developing the app is different as well: I cannot get a lot into details right now but their approach is very creative and it is the most cost effective approach I've seen so far.

Keep an eye open on this project as well!

Make it a great day!

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

Back to agility and agile project management

Today we will get back to agility as it is such a hot topic. Agility is often seen as a technique or a "different way of running projects" however I believe that in fact agility is much more than just that. Agility is a life style. And agility heavily relies on mentalities.

Organizations nowadays jumped the wagon of agility. Some of them genuinely see and appreciate the business value. Some others are doing it just because it's "new and cool". Some others are not really agile but they think they are and are very successful in ... messing up the concept and their own projects. The ones who do it right see tremendous ROI.

Here at Witty Mobile Apps we are big advocates of agility in software development. We believe in its philosophy and, due to the nature of this business (a business with a great deal of variables, churn and ever changing business requirements), we practice it every day.

Many times we face resistance in implementing agility especially in larger scale organizations or in certain industries. Highly regulated organizations for example have a harder time implementing agility than others (and not that you can't do it in these environments but it's also like I said the mentality).

Here are some miss conceptions about agility:

(1) Agility does not follow a structured process

This is not the case. Agility does not mean no process. It just means a more dynamic process. Defects and requirements inconsistencies are brought up early in the development cycle. The stakeholders are very involved and in constant dialogue. The customer is involved and in constant dialogue. Requirements changes are welcome no matter how late they come in the process (because the software is written that way to embrace late requirements changes).

(2) Agility does not provide documentation

That is not true either. Your ability of documenting your solution does not depend on that. While it is true that most agile groups follow relatively informal approaches to draft requirements and share them with the developers (and they can range from white board schematics to wikis, e-mails and Word docs), the quality and quantity of your documentation is up to you. The agile philosophy does not tell you not to document things: not at all. It just tells you document fast and document right so you can quickly get going.

As a side note here: I've seen "agile" self declared groups where project managers were strolling around through cubicles with notepads, randomly talking to developers requirements of xyz client, scribbling things or drawing nondescript diagrams on a white board then taking digital pictures and e-mailing them around. That is not agility: it's just a mess.

(3) Our product has many dependencies on third parties

Larger organizations acquire components, products or niche solutions to integrate them into their own products. That is fine as it works out for their organization but it may create the perception that projects with integrated third party components could not be run agile. The main reason being that, should a change be required in the third party's code, it is usually hard to convince that third party organization to deliver it in rapid development.

There are ways it though. One of them is to work with open source software and depend less on third party code. Another one is to educate the vendor to work agile as well: it is in their best interest. And there are many organizations that will actually be interested to deliver you a customization of a proprietary software component fast: choose one of those (we actually found that for example some off shore organizations that develop proprietary APIs for real estate are very agile and can deliver you new code in no time).

(4) Our teams are large

If your teams are too large, you did not structure your project well. The average size of a team at Google for example is five people. No matter how big your project is you can always split it up and assign components to small teams. The teams can always be aligned with the product's architecture and you can always "divide and conquer".

And even if let's say the Management does not allow you to split a bigger team, you can do agile with larger teams too. I did agile with teams of up to 40 people. It is just a matter of coordination and a matter of the quality of the people you have in your team. If you have good people, it won't be hard to do agile with them. If you don't have good people nothing will work anyways, not even waterfall.

(5) Our teams are geographically dispersed

Actually some of our off shore teams are the most agile teams we have. They are always the first ones on the video call. They always communicate status on time and ask the right questions during our meetings. They always help out the customer, the project managers and the qa teams. They are just terrific.

Same thing with the people on shore: no matter where they are they attend the meeting and start writing code fast and clean. Addressing customers concerns is straight forward as well.

Technology is definitely there: we use Skype, Google Hangouts, e-mail, Google Docs and Wikis.

Time zones do matter: it is harder to do agile if you have teams in three or four different time zones: US East Coast, US West Coast, Eastern Europe and India for example is a tough combination for a unified global agile approach. You can still do a scrum of scrums though. With two time zones for example it's a no brainer: for example India and the US East Coast or the US East Coast and Eastern Europe.

I used to kid around and say "Hey, I've just fixed my daughter an agile omelet this morning". But it is actually not kidding: my daughter frequently changes her requirements.

Keep an eye on agility. Wherever you are. Whatever you do.

Make it a great day!

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

Thursday, August 7, 2014

5 trends in mobile applications

Mobile technologies are taking over. Over the last 5 years we have seen this market growing fast. The market for mobile apps is still growing. Wether it's Android, iPhone or Windows Phone there a lot of people adding apps to their toolsets and assets.

Over the last 2-3 years we've seen an increased interest in designing mobile apps by business organizations as well. Rather than individual app owners, these businesses started to recognize the opportunity and business value mobility can bring to an organization: that's far from just cool buzz, it is actually adding $ to their revenue or subtracting $ from their monthly expenses.

Mobile apps are nowadays seen as assets.

Here are a few trends we have seen over the last 2 years while writing code or working on proposals.

1. Location based apps

Businesses figured out there is a lot of value in presenting location based data. "Right there" (where the user is located) and "right away" became very powerful concepts in apps for restaurants, retailers, auto mechanics, professional services companies, IT shops, beauty parlors, grocery stores etc.

Services like Google Apps or Bing do help with fairly accurate, national data and solid API to pull from: from there you can get addresses, phone numbers etc. Companies like Yelp offer good data on reviews, # of stars etc. So you as a developer certainly have the means and opportunity to aggregate these data and present them on user's mobile terminals.

An interesting aspect to discuss here is that users are getting more demanding lately in terms of the quality and the quantity of the data they want displayed: I just had a recent requirement where the user asked me to display data like "what is exactly is on the menu", "prices" and "how friendly the staff was"at this particular restaurant. General APIs do not store these kind of data. So there is always an opportunity to build your own database with granular data and feed it from behind the scenes.

2. Social media apps

Social media got much more business focused lately. We wrote full fledged social media platforms for realtors where people won't login to share pictures or casually chat (nonetheless they have those capabilities too): they login to establish business relationships, to refer leads they can't serve and to collaborate on projects. There is a fee to enroll with the system, you have to be a licensed realtor in your State to participate and you have to go through a 1 day training on rules and practices on the business side of the site.

Another type of companies we have seen very active in the mobile social media arena are companies involved in organizing business events: they are basically events organizers. These companies figured out a pretty solid way of monetizing their apps through back side memberships and subscriptions. When you get enrolled with such a company (and there are a few of them here in town) you get all kinds of perks and one of them is access to their mobile apps platform with networking opportunities, events calendars, informations on venues, bios of speakers etc.

As opposed to consumer oriented social media apps, the businesses have stricter requirements in terms of security, privacy, compliance, data accuracy and data availability.

3. Apps that support sales or sales proceses

Last fall we were asked to produce an Excel type of app for sales people to use in their meetings with the management. The requirement came from a Product Manager of a large local organization here in Miami.

The pitfall was that they had sophisticated spreadsheets with multiple workbooks, formulae, pivots and things and they did not like how the standard Office app displayed these spreadsheets on their mobile phones and tablets. Management would ask them very specific questions and it was a struggle for them to drill and find that specific column / workbook to report on that.

They wanted us to design something innovative and easy to use where they would quickly "flip" through pre-structured, clean, one screen display little pages or fast "jump" to a specific page if needed. There was more to the functionality and I won't get into details here.

This is a good example of an app that supports a sales process.

4. Specialized apps for IT groups

IT groups were on the forefront of adopting mobile technologies. By definition IT groups are early adopters of new technologies and they were some of the first ones who requested us to write mobile apps for them.

IT groups generally order apps that helps them in their daily activities such as network monitoring apps, reporting apps, apps that signal services interruptions or malfunctions or apps that support the activities of on call tech support teams. Every now and then a small collaboration or proprietary communication app is requested. Widgets that show on call rotation schedules are in demand as well.

IT people generally have very clear requirements and they are very opinionated on how an app has to work :) Sometimes they are ready to design the app for you!

5. Marketing and leads generations apps

Mobile leads generation is already a big business but I envision it will very soon absolutely boom when more people will figure out about how effective it is. Technically it actually involves standing up a profiles database, writing web services and an Android and an iPhone app to talk to those web services then starting to distribute the apps to make them land on people's phones.

Business wise you need to make an attractive easy to use app and give people reasons to use it. So your business concept is very important.

We had historically designed leads generations apps for the legal services industry, for IT services companies and for the sports and celebrities industries. But I believe there are applications in every single industry out there: if you can catch a sales lead right there where the user is and right then, you can build a big business.

There are also two other growing segments of the market in medical apps, apps for legal services and apps for real estate companies. These are interesting apps because, while they serve a definite need of a specialized profession or group of professionals, they have very strict compliance requirements.

Make it a great day!

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

Tuesday, August 5, 2014

4 things Android has and you can't find them on other mobile platforms

We were never zealots of one development platform or another. Since the mid '90s we had seen people debating with generic statements like these: "Windows is better" or "Unix is much better" or "Apple is the best".

As a matter of fact, as professional software developers, we always kept a distance from such assessments, learned all the platforms and remained agnostic. We believe that, no matter what platform you write code on, you have pluses and minuses and each technology / Operating System has its own perks and failures.


When the mobile platforms came up we were eager to see what each company provided as a frame work and what are the different pluses or minuses of them. We looked at all four major platforms, Android, iPhone, Windows Phone and Blackberry and identified the following four technologies as being unique to the Android platform.


1. Widgets

Widgets are little applications that display info on your smart phone's home screen. They look slightly different than the regular icons and, as opposed to them, they actually constantly communicate with the back end to display instant ever changing data. When you push on a widget the application that sits behind it usually opens up.


Fig. 1 Widgets


The most popular widgets are the weather and sports related widgets but there is lately a lot of development and customization on designing business widgets, i.e. such as the ones that give you updates stock quotes or updated sales data.

Widgets are important because they can be customized for your business needs and they can give you nice easy to access snap shots on important data that may help you make a decision or offer a solution (for example during a meeting).


2. Custom Roms / Custom Launchers


Custom Roms are basically modified/customized/enhanced versions of the Android Operating system that runs on your smart phone. Remember your phone is a full blast computerized platform with processor, memory and internal storage hence you can boot up with different customized versions of the OS like on any PC.

Most of the Custom Roms install either minimalistic / pure Android experience shells or graphically spectacular / enhanced skins. Advanced users love these "conneseaur" types of layouts but businesses can benefit too.


Fig. 2 Custom ROMs Galaxy S5


For businesses we recommend writing and installing Custom Roms centered around their business day-to-day needs: i.e. Roms for sales persons, Roms for customer service representatives, Roms for engineers, Roms for IT personnel. A well written Rom can de-clutter your Android and help you focused on your day-to-day tasks for increased productivity. 


According to our research, none of the other three commercially available mobile platforms offer custom Roms (they are closed platforms).    


3. NFC

Near Field Communication is a technology that enables two smart phone devices to radio communicate with each other when brought into proximity. The technology had been used 
for a while in Japan and South Korea mainly in retail and financial transactions such as ordering product from a vending machine or banking.


Fig. 3 Devices communicating via NFC

Over the last five years NFC is gaining more popularity in the US as well. There are a number 
of initiatives to design mobile apps that help with parking payments, shopping in grocery stores or simply apps that facilitate data exchange between two phones located in a few inches one from another.


Please note this technology is different than the Bluetooth or Wi-Fi technologies.


For some reason, even if the NFC protocol is basically available for all the platforms, so far neither Apple nor Microsoft gave it enough attention. Which leaves Android in a good competitive spot as the technology is definitely useful and it has a large spectrum of applications.


4. Multi-user

All the major competitors in the smart phones and tablets arena own a multi-user, multi-tasking Operating System. But for some reason it's only Android (starting with version 4.2) that currently offers a true multi-user platform for their devices. And even on Android this is just on tablets.


Having a multi-user system and being able to login with personalized screen layouts and apps is an important feature especially when sharing the device with somebody else. The reason is very simple: everybody likes to install something different and if you have multiple users installing multiple things on the same profile / account you will end up with a clogged home screen. Or with ... two clogged screens.

In our daily business endeavors we do see some business that share smart phones and tablets between multiple employees. We see that especially in different on call / IT support groups but also in sales and in customer service. In these types of situations having a multi-user environment definitely helps.


The conclusion is that, while Android started as an open source mobile OS, this Unix based platform offers some solid and unique back-end and front end features that other competitors do not offer.


Learn how to take advantage of these in your business.


Make it a great day!


Adrian Corbuleanu

Miami Beach, FL
http://wittywebnow.com

Note: I would like to thank my friend Marius Magureanu for his contribution to this article. Marius is an Android developer based out of Oslo, Norway.


Other sources used:


1. http://developer.android.com/design/patterns/widgets.html

2. http://www.redmondpie.com/best-most-popular-custom-roms-for-android-and-why-you-should-try-them-out/
3. http://en.wikipedia.org/wiki/Near_field_communication

Monday, August 4, 2014

Responsive web design

Since the boom of phones and tablets, responsive web design gained a lot of popularity in the developers and users community.

Nowadays on average out of ten projects we are asked to bid one six or seven require us to implement responsive web design techniques. People give you PSDs made by their graphics designers and ask you to convert them into responsive websites.

But what is responsive web design and what are some of its characteristics?

Responsive web design is the web design that delivers easy to use, minimal navigation, input and scrolling websites. These websites have to be clear and easy to use across all the major front end platforms including desktops, laptops, smart phones and tablets.

Example of responsive web design site of UC San Diego


Here are a few technical elements developers have to take into consideration when writing responsive code:

- to implement responsive web design you have to implement a set of flexible layouts, images and an intelligent use of CSS media queries (@media)

- these media queries make the page use different CSS style rules based on the specs of the device the site is displayed on 

- flexible images are sized in relative units (rather than absolute units) to prevent them from displaying wrong on devices with different screen sizes / resolutions

- the server side components (such as server side javascript code, php or ruby code) produce faster-loading speeds to optimize user's experience over potential slowliness caused by the cell data network


responsivewebdesign
Sample of responsive web design by Boston Globe Magazine

An important aspect of implementing responsive websites is defining a so called "fluid grid". A fluid grid, instead of designing a layout based on absolute numbers of pixels, is designed in terms of proportions. That allows the layout to re-size itself when pulled up on a smart phone screen or tablet and when these devices are used in either portrait or landscape. In fact with a fluid grid all the elements of the layout will re-size their widths and heights in relation to one other. 

Responsive web design is the web design of the future.

Make it a great day!

Adrian Corbuleanu
Miami Beach, FL

Documentation sources and bibliography

1. Wikipedia
2. Smash Magazine
3. http://blog.teamtreehouse.com/

Sunday, August 3, 2014

5 business apps I have on my Android (and iPhone)

We've all been playing around with consumer apps. We've been all sending e-mails, browsing the web, getting GPS based driving directions, listening to music and watching YouTubes. Many of us take pictures, tweet and facebook and keep calendars on the phone. We check-out sports / scores and instagram / pin(our)interests. Some of us have their little groceries lists on their phones.

But when it comes to business and productivity related apps what do people use?

Well as a mobile apps developer with like four phones in my hands all the time (I need to have handy at least an Android, an iPhone, a Windows phone like a Nokia and a Blackberry all the time plus a Motorola Xoom Android tablet and an iPad), I have quite a few business apps installed on my smart phones and tablets.

And here are five of the ones I use on a daily basis.

1. LinkedIn

LinkedIn is a great social media solution for professionals. I've been a member of the site since 2010 and recently exceeded the milestone of 1,000 direct connections with access to an impressively larger 2nd and 3rd degree connections. Historically we got multiple contracts, jobs and professional relationships LinkedIn and our network is growing every day.

The reason I like the mobile app is that I can nurture and work my network in a mobile way. Weather I am in a meeting with a prospective customer who wants professional references on the spot or I am just on the road on a project, I can grow my network, post updates and back links to my website, promote my blog or even start a PPC campaign. Accepting new connections on the fly or responding to e-mails is a breeze.

LinkedIn is well designed and it works well on both my tablets and all my smart phones. Downloading and using the app is free. There are paid (but fairly inexpensive) packages for sponsored ads and expanding your network. I LOVE LinkedIn!

2. Meetup

I extensively use the app of Meetup.com. The reason is that it provides me with access to a large number of local (such as Miami based or NYC based) groups and their meetings. The groups are well structured around topics like web development, mobile development, start-ups, e-commerce and retail, enterprise applications, public and Government related work, environmental and non-profit work. There are also a number of groups focused on certain technologies such as Ruby on Rails, Android Development or iOS development.

My experience so far is very good: people who participate in these meetings are dedicated professionals, they brainstorm and collaborate and they are always open to tackling new projects (actually most of them go there with a specific project in their mind).

The Meetup app is well done, it gives you real estate to present your practice, it provides two ways communications channels with the groups, it gives you updates on events and opportunities and it naturally ties the scheduled meetings into your phone's calendar.

The local factor of these groups makes a big difference: attending in person meetings has a better outcome than just bidding online on projects. I LIKE Meetup a lot and will be a long time user.

3. Skype

Skype has been around for a while: I personally used the web app for almost a decade. I started with making free PC-to-PC calls to Europe to talk to my family but more recently I mainly use it as a business collaboration tool.

What the mobile app adds to the table is the ability to basically make free (or very inexpensive) mobile video phone calls / video conferences all over the world. I use this app a lot when I work with my overseas team: we chat, face-to-face collaborate, exchange files, notes and specs and watch videos or training content. I use it on all my smart phones but also on my tablet as it gives me a little more real estate while I am still mobile.

The fact that I am not locked into a specific office location (such as my location in Miami Beach on Lincoln Rd) but I can still run my meetings with  geographically dispersed teams adds a lot to the productivity: you can go see a client at 11:00 AM and have an immediate meeting over lunch from a Starbucks nearby.

4. Office Mobile

Even if they were kind of late to the party, Microsoft launched their flagship product for mobile platforms. It was expected and necessary. The Office Mobile offers most of the traditional Office for desktop functionality on mobile platforms. You have things like Word, Excel and PowerPoint ready to be used wherever you are.

While some people use Office Mobile just to be able to open up and read Word docs and Excel spreadsheets, I find it useful at editing docs as well especially when used on a tablet with an attached physical keyboard and/or mouse. That kinds of hardware basically turns your tablet into a laptop.

So I read and edit docs from e-mail attachments, I write quotes and proposals, make graphs and PowerPoint presentations and even do some UI/UX work while on the road.

I like Office Mobile and I use it weekly.

5. Google Maps

I use Google Maps as a business app. It is a very important app for me because it tells me who is my competition in my neck of the woods or who maybe a potential referral partner.

I always scope Google Maps & try to evaluate my partners and members of the local community: places and addresses, customers reviews and ratings, pictures, descriptions. And, of course, I use the Maps for driving directions as well. As a programmer, I extensively use Google Maps API: it has a tone of data immediately available to incorporate in your apps!

In addition to these I sometimes use an app called StockSpy where I am checking how my stock market portfolio is doing. Even though I tend to be a longer term investor than a weekly or monthly trader, I find this app useful.

I also extensively use Google's Hangouts- it is an awesome collaboration tool that gives you rich functionality including video conferencing, notes and artifacts sharing and remote control to a client or business partner machine.

Make it a great day!

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

Saturday, August 2, 2014

3 most used programming languages

According to multiple online and offline sources and to my personal research and experience the following three programming languages are the most used programming languages today.

So for those of you who are looking for a job, it is time now to start learning these languages.

1. C

It is probably not a surprise that the old C remains the most used programming language. The main reasons are the volumes of legacy code still exists at the Enterprise level, there are entire Operating Systems written in C (such as all the Unix based Operating Systems), there is a large pool of low level / embedded devices written in C etc.

C, a venerable programming language that has been around since the early '70s, is a general purpose structured programming language fairly solid and versatile. It's fast (compared to other competitors), imperative/declarative and fairly straight forward syntax. Memory allocation uses pointers (which is one of the reasons some people fear C- remember those ugly core dumps?).

Generations of programmers (including mine) learned computer's programming with C. You should start learning C now!

2. Java

Since Sun Microsystems came up with Java in the mid '90s this programming language gained a lot of popularity and it is not out of the question that one day it will actually become the leader of all programming languages out there.

Slightly "heavier" in processing time than its competitors C and C++ Java is a very versatile object oriented programming language with a very natural syntax and ... without pointers! Memory allocation works better and makes the software written in Java more reliable. "Write once-run anywhere" is another big plus of this programming language as Java (as opposed to other programming languages) is a highly portable programming language.

Java was adopted by all the major Corporations, mid size firms and start-ups: nowadays you have Java anywhere from Enterprise platforms to small shops. The explosion of mobile devices and mobile phones based on Google's Java Android SDK pushed Java even further and will definitely contribute to its future global expansion.

Learn Java. Today. And you will get much more market-able.

3. C++

C++ is a super set of the C programming language developed to add the concept of object oriented programming to the old C. The language remains general purpose, still relies on pointers and it's heavily used in embedded systems, Operating Systems, server side applications (such as intense data collections applications), desktop applications, gaming software etc.

Most of the major Software Development Organizations (including Microsoft, Borland, HP, IBM) own a C++ compiler as well which makes it a desired programming language to have under your belt to become more employable.

Other popular programming languages / databases are: PHP, Javascript, SQL (with different flavors and implementations), Objective C (which is what people write Apple's iPhone applications in) and C# (of Microsoft). Some web centered programming languages like Ruby on Rails gain a lot of popularity lately while other strong regex / small code footprint like Python and Perl are growing too. Still the majority of the applications is dominated by these three mentioned up here.

Make it a great day!

Adrian Corbuleanu
Miami Beach, FL

Friday, August 1, 2014

3 major trends

In the mid '90s you had the PC and Internet revolution. Things were exciting as computers got more and more popular and more and more affordable. Everybody was jumping the wagon and in a short period of time a lot of people became "experts". Later on the bubble burst showed that in fact very few of them actually were ...

Almost a decade passed by without many major break throughs. We got more and more bandwidth. We started to collect more and more data. Our databases grew bigger and bigger and they invented the word "business intelligence". Our websites started to look slicker and slicker. We tighten up security and started to build more and more barricades. But other than VMWare with their innovative virtualization products, nothing really outstanding came up.

For a while things dragged. Major companies like Sun Microsystems and Digital went down and got acquired. Mid size firms started M&As processes. And start-ups had a harder time to launch.

And then people like Jobs and Zuckerberg stepped up to the plate with new concepts in mobility and social media. That worked. New industries were born and now we are still riding that wave.

Here are what we identified as 3 major trends of the last decade:

(1) Cloud computing

I used to say that cloud computing is not really a new technology- it just got a fancy marketing name. But in reality the concept of sharing networking resources and optimizing their utilization is new and is very useful. It's reliable enough. It's inexpensive. It's good.

Companies were slow (and they are still slow) in adopting the Cloud- as with any other kind of technology. Some of them have reasons (security, compliance, rules and regulations etc.), some others just don't bother: they either don't feel like they have the skills sets or don't see enough business value in it.

The Cloud is growing though. While there is still resistance every day we see new companies looking at hosting in either private or public cloud environments and asking us questions about it. The Amazons and Rack Spaces of the world did a good job at promoting the Cloud concept. And international markets (where the reliability of their electricity grid is an issue) are more open to migrate their hosted solutions to the Cloud.

(2) Mobile computing

Since Apple created the iPhone a whole new industry was born. An industry that got immediately adopted by the consumers and businesses of all sizes.

It happened so fast that companies like Blackberry for example (who actually had the first commercially available mobile e-mail device) could not keep up! Google jumped in with their Android acquisition and came up with a big challenge: an open source and totally free development sdk based on java and linux.

A couple of years later if you were not in mobile you did not exist: that was the reason we here at Witty Mobile Apps actually decided to provide design of mobile applications starting as of 2011.

And, if three-four years ago the market was driven mainly by consumer focused applications, nowadays we see a lot of businesses going mobile with pretty much everything from portable Excel spreadsheets, to real time business data for meetings, location based business services, mobile bidding systems, sophisticated decision making systems, stats, business niche mobile ready social media etc.

Mobile leads generation for different marketing companies is another growing segment. Real estate is definitely there- most of the respected realties sites are now mobile ready and the ones who are not will be soon. Attorneys are mobile. IT and Computer Repair shops are getting more and more mobile. Doctors are getting more and more mobile. You name it.

(3) Social media

Social media, like many other great things, started in a College dorm room and exploded to epic proportions. The other day I was reading somewhere that "if Facebook was a country, it would have been the second country population wise in the world." I would add than it will more likely become the first country population wise soon.

But what's interesting about social media is that lately it gears a lot towards business / niche social media rather than just a place to socialize with family and friends, share pictures, chat or show off locations.

Last year we had designed a social media solution for realtors and real estate investors. Over there people don't login to waste time. They login to socialize to do business. They refer leads. They present deals. They bounce ideas and collaborate on projects. The site is subscription based and it already has sixty four hundred professionals on it (the site is owned by a medium size business here in town). The realtors LOVE it! The site is designed with users security in mind: they do not sell people's data. And the site is 100% mobile ready: Android, iPhone, Windows Phone, Blackberry.

Now THAT's where I believe social media is heading to.

We will be around for the ride :)

Make it a great day!

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