Over the last decade, there has been a massive growth in the number of web-based applications. For every category – email, collaboration or knowledge management to name a few – there are a large number of applications available, and new ones on their way. This has created extreme competition in the market with each application claiming to be better than the other. Even if a new concept exists that is strong enough to drive the market, time-to-market is a crucial factor that will decide the success of the product.
To address this, a rapid application development strategy needs to be in place so that the product and incremental features can be delivered at the expected rate which is dictated by the market & customers. Besides this, development needs to also follow an agile model so as accommodate ever-changing business requirements. This is especially true in the case of product development, where a single product must fit multiple customers with varying business requirements, and the classic waterfall model can lead to complete failure.
Web Application Frameworks
A web application framework (‘framework’ hereon) is a software framework that is designed to support the development of dynamic websites, Web applications and Web services by providing core, non-functional features out-of-the-box. A framework streamlines application development by automating many of the patterns employed for a given purpose and thus resolve the overheads associated with common activities performed in web development.
A framework also adds structure to the code, prompting the developer to write better, more readable, and more maintainable code. It promotes code reuse through the use of libraries for database access (using ORM), template engines, session and user management, logging, internationalization, etc.
Framework selection (we’ll elaborate this in the next post) is thus crucial in delivering the required functional & non-functional requirements within stipulated timelines. Non-functional are the primary influencers Continue reading Rapid application development & web frameworks
Multi-tenancy was a relatively new concept back in 2010 when I was writing the dissertation report for my MS. This extract from the report aims at providing a clear understanding.
Multi-tenancy is an architectural pattern in which a single instance of the software is run on the service provider’s infrastructure, and multiple customers, or tenants, access the same instance. It is an organizational approach for SaaS applications today. SaaS-based software providers are believed to have evolved from Application Service Providers (ASPs) from the previous decade, which differ from today’s multi-tenant applications which are provided via a software-on-demand model specifically designed for SaaS distribution. Although the interest in this concept is rapidly growing since its inception in 2005, research is relatively slow.
Key aspects of multi-tenancy
- The ability to share & optimize the use of hardware resources
- The ability to offer of a high degree of configurability
- The architecture to support the use of a single application and database instance to serve all tenants
- Cost benefits from economy of scale & improved utilization
- Ease of deploying a single instance
- Simpler management
- More frequent releases with bug-resolutions & new features
- All customers are upgraded at once
- Reduced operational costs
- Easier to scale-up with the advent of cloud computing
Benefits of multi-tenancy
Code profiling is a form of dynamic program (code) analysis to investigate the program’s behavior during execution. It is usually done to determine sections of code that can be optimized – to increase overall speed & reduce resource requirements. Code profiler can come in several varieties – from those that measure the frequency & duration of function calls to others that track memory usage. An emulator for micro-processor code (that simulates the processor’s instruction set) is also a type of profiler that measures behavior for the entire execution cycle – invocation to termination.
I first heard of code profiling in the context of reverse engineering software architectures. Often it may so happen that applications with very little documentation are to be enhanced or re-engineered. One way to understand is by analyzing code, which can be a tedious process. Such static program analysis may yield incomplete understanding as the polymorphic calls can’t be determined until run-time. A code profiler determines polymorphic function calls and identifies overloads used during execution which helps establish relationships between classes & components that can be used to reveal the underlying software architecture, if not for a specific pattern.