Picking the best, if not correct, technology for many SaaS (Software as a Service) start-ups can be a very tricky endeavour.Many times the business side of the fence does not care or does not know to care what implementation technologies are used during the early stages of a company.They just want a marketable product to start driving market penetration and revenue. However, choosing poorly can lead to the degradation of the SaaS product's supportable, maintainability and scalability down the road which will impact the all important market penetration and revenue efforts.For the most part picking the correct implementation technologies and language is an exercise in risk management and risk mitigation.You want your chosen technologies to be as simple as you need them to be to allow for rapid product development, but as complex, versatile and scalable as your future business dreams may be.Below is my advice on which implementation languages to use and avoid ... and why.
Lets all say this together: "You primary job as an IT professional is to enable the business".This is done by building scalable architectures that are as simple as they need to be, but that complex as what you may need them to be in the future.In order to do this it is very important to pick the correct technologies.Contrary to what you may think there are really only two implementation language options to choose from when deciding on a programming language.It is either Java (Java EE) or Microsoft's .NET (DOT NET).All other languages such as PHP, Python, Ruby, Node JS should be avoided for a number of reasons.
MATURITY AND CAPABILITY
Lets be honest here.Trying to compare Java EE and .Net to the scripting languages in terms of maturity and capability is very easy.There is really nothing to compare.Take Java for example.The Java language provides industry tested and proven, rich out of the box database connectivity interfaces supporting a plethora of database drivers and types, interchangeable ORM (Object Relational Mapping) interfaces, WS-SOAP, WS-REST, extensive multithreading functionality, distributed processing and transaction support, mature messaging (Topics & Queues) interfaces, business rules engine interfaces and support multiple web application frameworks just to name a few.Perhaps the most compelling attribute is that most of the implementation capabilities featured in Java are easily exchanged.If you do not like Hibernate, use Toplink as your ORM with little to no impact to your code.If you do not like Active MQ, use IBM's MQ Series as your messaging implementation, again, with little to no impact to your code and more importantly to your business.This is a perfect segue into the next section ...
3RD PARTY AND COMMUNITY SUPPORT
Java and .Net offer a plethora of industry tested, proven, rich, robust 3rd partylibraries and architectural components to which PHP, Ruby, Python and Node JS can not provide.They can be found in the closed source (IBM, Oracle, etc ) and open source variety (Apache, Red Hat, etc).Examples of this would include products like Java Enterprise Application Servers, such as Red Hat's JBoss and IBM's WebSphere.These products provide extensive out of the box capabilities such as database connectivity and pooling, distributed transactions and processing, automatic and manual transaction demarcation, WS-SOAP and WS-REST facilitation, enterprise messaging, timer services and enterprise web containers capable of hosting complex web applications just to name a few capabilities.What about HA (High Availability) configurations you ask? Most Enterprise Application Server support clustering to different degrees.What happens to a customer's session when the application server or database node they were pinned to goes down?Oh, it's seamlessly picked up by another node without the customer being aware.What about messaging you ask?All enterprise class Message Brokers support the JMS (Java Messaging Service) interface.So products like Apache's Active MQ, Red Hat's HornetQ or IBM's MQ Series are all supported out of the box.In addition to this, each messaging implementation (message broker) is interchangeable.This native capabilities of the Java language coupled with its 3rd party support provide huge supportability, maintainability, extendability benefits.Needless to say these benefits go a long way to mitigate theplethora of development risks organizations are exposed to.
There is one more topic I would like to address here before moving on.The rise of JRuby, JPython and other JVM (Java Virtual Machine) based derivatives is very alarming.In these cases the Ruby or Python language is compiled such that it can be executed by a JVM.While this may be a result of a existing organization trying to scale or provide rich enterprise functionality to a very limiting technology, I am perplexed as to why new start-ups choose this path out of the gate.If one is going to abandon the native run-time environment of a software language in favour of Java's JVM, then why not just write it in Java to begin with ...
RESOURCE POOL
Above all, the greatest asset of the Java and .NET languages is the rich and plentiful resource pool of developers.Again, lets look at Java.This means that a vast majority of qualified potential development resources available in the local, regional and global pools have Java expertise.This provides a number of benefits:
* No matter where you choose to base your development organization, you will be able to find Java developers.
* Since the potential resource pool of Java developers is so large, developers can be found at a variety of cost points and experience levels easily.
* Many colleges and universities use Java as their language of choice for their computer science curriculum's and their graduates are providing the workforce of the future.
I have repeatedly found that PHP, Python and Ruby developers do not possess the skill set required to enable the IT organizations I have been employed by to thrive and meet the demands of the business.In most cases the lack of qualified talent is extremely detrimental to the business and the viability of the company.In fact, many PHP, Python and Ruby development shops actively recruit Java and .NET developers.This is done simply because there is an extreme shortage of experienced and qualified developers on the market outside of the Java/.NET resource pool.Many companies are willing to take the time (and money) to train Java and .Net professionals to make the switch to another language.This is very counterproductive, costly and a sign that the organization chose the wrong software implementation language ...
Full Post
No comments:
Post a Comment