Quality is simply an obsession. An obsession to deliver nothing but the best. Obsessively and compulsively engaged in delivering what is required without deviating even a small pixel.
Only with this spirit will one see great results, great products, great success.
If you see software development as a cost center, you need to rethink that entire department. If it is technically a cost center, then you are not in the business of software. That is when you need to seriously think about outsourcing it to someone who thinks of it as a profit center. Those are the folks who would treat their team well. And that would result in great solutions and great software for your company.
Writing software is hard. It is not trivial and there will be no magic formula anytime soon that would create great software with just a click of a button.
One needs to realize that when writing software, bugs are always a part of the package. There just cannot be a chunk of software that is written that would be totally bug free. I am not saying that one should ship with bugs. NO!
What is important is the management of these bugs.
If developers and indeed the quality folks can find, manage and then fix those bugs, the end result will be great software exceeding expectations of everyone involved.
Managing the bugs involves first acknowledging that there will be bugs. Most developers refuse to believe that their software can ever have bugs. Let that go. Every piece of code ever written has bugs. Accept it.
Then there needs to be concerted effort to find those bugs. First at the developer level, what some would say unit testing. But going beyond that, what stops the developer from running full blown test cases that apply to her code? Run them, and the unit tests and whatever other tests you can run. Don't leave that to the QA guys. After all you are proud of your code, you do not want them to think your code is a piece of junk. Give them your best and save yourself the blushes later on.
Then of course you fix those bugs. That is obvious.
But what is not obvious is that you have to test all over again. Assuming that you have fixed everything and it will run fine after you have fixed a bug is hazardous. You are just undoing all the hard work that you have put in.
Once you ship to QA, don't disown the code. Be in touch with them and find out what is going on with the testing, in particular your own stuff, but also with the entire software that your code is integrating into. You can catch things they will not catch.
Ask the testing folks to break your code. Then take pride in the fact that they were not able to.
Another aspect of bug management is tracking your bugs. Make sure you understand the bugs that are assigned to you, you fix them, understand the fix and then track them right back to the QA guys so that you know what is going on with your bug.
Last, but not the least important is something that is really always overlooked. Expectation management. Managing expectations of the quality team, and the user. If you can tell them before hand that there is a certain issue with the software, there is a lot of time, energy and heartbreak that you can save.
Telling the QA folks that there is a certain or to expect a non conforming behavior is a sure shot way of making friends out of your sworn enemies. They will be eternally grateful to you for not wasting their time.
Telling your customers up front about the issues will delight them. Not antagonize them. Be brave, honest and up front.
Know that you cannot kill all your bugs. Manage them well and you can sleep well.
When you are looking to outsource anything, not just software development or maintenance, anything at all, you are not looking to get the best technology solution. That is a given. That is by default. That is a requirement. Without that there is no outsourcing happening.
What you are looking beyond that is a solid team that shares your passion and zeal. Somone who can stand right next to you in turbulent times. A bunch of people who share your vision, are willing to work towards fulfilling your vision. You are looking for someone who can help you look good in front of your customers, management etc.
IT Application outsourcing is not just head count replacement by cheaper alternative (offshore, outsource, whatever). It has to be more strategic than that. The skin in the game needs to be there for a complex outsourcing deal to work out.
Delivering complex enterprise solutions require a deep understanding of not only the technology but also the business, the impact (both positive and negative) and long term ROI.
Considering app development outsourcing as a simple transaction would be foolish.
Performance is a major concern in every application. Here, I am describing a crucial feature of SQL by which we can improve the performance of our applications that offer search functionalities.
I got a chance to get familiar with “Full Text Search” due to a requirement in my last project. There was a need in my project where I had to maintain millions and millions of records in the database.
The main challenge that I faced was to provide a search page where the end user will enter a word and I had to pull all those database records which have any data matching with the word entered by the user. To achieve this, I was previously using the “LIKE” operator to look for matching rows against millions of records. But every time I would search any record, the performance of my application would go down and the fetching process was taking almost a minute to return the results.
After talking to some database gurus and reading several articles on the internet, I realized that SQL has a great feature called “Full Text Search”. What I had to do was, replaced the “LIKE” operator by “Full Text Search” and voila! I was able to improve the performance of my application by a huge margin! Now the search functionality was able to pull and display results in 5 to 7 seconds instead of 60.
Now to clarify the technical difference: The “LIKE” operator uses a character pattern search whereas “Full Text” is used for word searches.
The lesson is, “LIKE” should be only be used when we have a requirement to get results by character patterns and I would personally suggest the use of “Full Text Search” every time when we have to deal with large amount of data.
There has been a lot of talk about the cloud, it's various advantages and disadvantages. Here are my thoughts.
I believe a full cloud solution is still a distant reality. There will always be some or the other integration point, some piece of code that will be lying somewhere that is not on the cloud. So something that is 100% cloud based seems a little farfetched at the moment.
The biggest advantage that a cloud based solution provides is scalability, not reliability as some might think. Scalability that is peak load oriented. There will be some websites that are very active during some time of the day/month/year and dormant at other times. Why would you want to invest in a huge sever that remains idle for most of the time and is used only intermittently at best. An event ticket website is a good example. There is huge load closer to the event date.
However beyond that there are some serious implications of a pure cloud based system.
A cloud is, well, just like a cloud. Not too much that you can control on these things. Security, reliability are yet to be proven in a big way. You do not know where your data is kept and you do not have any control if for some reason the cloud bursts. Happened with the amazon cloud just a few days ago. Human error was the culprit.
So think carefully before you opt for a cloud based solution. It is not the panacea for all your server/hosting needs. You might be better off with something closer to you. Something you have a little more control of.
Every application developer strives to reuse programming code that would reduce the effort and cost to develop an application and to achieve that, several tools are available in the market that are developed by different vendors. Microsoft too, has always come up with new technologies and providing new tools for programmers to develop applications with ease. Unsurprisingly, continuing with this celebrated tradition, Microsoft introduced ADO.NET Entity Framework 1.0 with .NET Framework 3.5. It is based on ORM (Object –Relational mapping concept) and offers a platform for developers to work with data as application-specific objects while allowing it to manage data accessibility.
Entity Framework 1.0 has been widely criticized by developers across the globe due to various flaws in its architecture. Recently I got an opportunity to work with this version and I, along with my team, faced various challenges using it. However, Microsoft soon came up with an upgraded version 4.0 and introduced it with .NET Framework 4.0 along with lots of upgrades and new features that make it worth using. This new version, in my opinion, finally justifies the decision of Microsoft introducing this tool.
Some of the key features of Entity Framework 4.0 are as follows:
- Create an entity model and generate a database from it
- Create customized code generation templates (POCO classes, for example)
- Automatically fix entity names if database tables are in plural form
- Load related entities automatically on-demand (Lazy Loading)
- Use of Silverlight with Entity Framework and ADO.NET Data Services to quickly create data-driven Rich Internet Applications (RIA)
Besides this, EF 4.0 has a better LINQ provider that gives it an edge over NHibernate and other ORM tools. There’s a lot more in Entity Framework 4.0 that improves the developer’s productivity, code quality and application performance. It is the best ORM tool I have used so far and guess what… It is available absolutely free of cost! For organizations that do not have specialized database developers, EF 4.0 provides an excellent platform to work with database from front-end that minimizes the required resources and the cost of project.
I am eagerly waiting for the next version of Entity Framework, hoping that it will provide an even easier and powerful way to manage entities.
Welcome to the world of smart programming!
Every developer knows that in a long term project, a poor database design, inconsistent naming conventions or un-optimized stored procedures can come back to haunt you; Unfortunately their affects are sometimes not immediately apparent , especially in the initial design phase. But believe me when I say that they can lead to nightmares (literally) later.
The article lists some such “best practices” to help you avoid these “situations”. This is not an exhaustive list and I am sure “industry experts” will keep coming up with newer and better “best practices”, it is a list of guidelines that I personally have found useful and have kept adding to and refining over the years.
- Proper data type :-
More often than not we choose the default basic data types like INT, NUMERIC or DATETIME. This can lead to a bloated database with space and performance issues. Consider data types like TINYINT, SMALLINT and SHORTDATETIME during your design. Be aware of the data range for each of them and make the decision accordingly, for example if you don’t expect a leave application to list more than 256 possible reasons (how many official reasons can you think of, for not coming to the office) you would keep the primary key for the table as TINYINT instead of INT.
- Proper naming convention:-
Proper naming convention is probably the most important factor affecting the maintainability of a database. Imagine looking for an obscure procedure name like “CreateclientDefault_single”, and I assure you, this is a real life example. I bet we will get five different guesses from five different people on what the procedure does, from the name, On the other hand if I ask you to guess the purpose of a procedure called Proc_CreateDefaultUserForClient, almost everyone will say the same thing. It is also advisable to prefix each database object by a prefix which denotes the object type, that way you won’t always need to open an object explorer to find a DB object, you can find it right from the query browser.
- Proper constraints:-
Always try to define proper constraints which will avoid anomalies in database. Try to define primary key, foreign key, UNIQUE key and other constraints. Just keeping the column names same is not enough, as your database grows larger and new entities are introduced; it is usually easier to make the DBMS validate your data, rather than introducing business logic to do the same.
- Normalization:-
I am not going to get into the details of normalization practices and its advantages. It is too big a topic to cover here. Normalization is unequivocally a “best practice” and should be applied whenever possible. What I do want to stress is that it should be taken with a grain of salt; although very few I have come across some instances when there was a justification for not applying further normalization to table. Remember normalization is driven by the need to reduce redundancy and maintain consistency. If there is a reason that you need to keep consolidated data in a single table and any al may be desirable.
- Indexes:-
Defining index is one of the great challenges itself. Although by creating index your data fetch process will be fast but your other DML operation like INSERT, UPDATE, DELETE will face some performance issue so be more specific while designing index. There is tool available with Microsoft SQL Server Management studio which helps in defining the indexes. As a broader look always try to create index of integer and numeric. Try to avoid index on date time and String.
- Stored procedures & functions:-
As we know stored procedures and functions are the best way to fetch data. We can write multiple SQL statements in stored procedures and functions another benefit is stored procedures are compiled statements so the chances of error is less.
Other than this there are many more things which will help in improving database performance which we can include in best practices. I will share those key notes in my next post.
Cloud has become such a buzzword lately that I have had a few non-technical friends of mine asking me what it is. Candidly, I will admit, I could not answer the question at that time. I did however read more and more about it which has made me an admirer of the very concept of cloud.
If I were asked today what cloud computing is, I would’ve said it is more of an idea than a technology. Roughly put, cloud is an environment where applications and data can reside and execute in a sandboxed host framework that performs dynamic resource allocation for its processes.
Before most people realized, cloud had indirectly become an indispensable part of their lives because of the online services they used. There are many organizations today which have already ventured into this territory or are planning to, in the near future. But beware, when you run to your boss about the cool idea of hosting your next application on cloud since technology giants like Google and Microsoft are doing it, he might correctly ask, why so. Alright, let’s try to find you an answer.
Servers have to be bought or hired keeping in mind the resources that the hosted applications will need or uhhh… eventually need during peak load conditions. Doesn’t this mean you are buying or renting resources you only use 5%, maybe 10% of the time?
From what I have come to understand, organizations, mostly depending on the scale of their requirement, may have different rationale behind switching to cloud. Larger organizations may need to host applications that need humongous amount of resources in terms of storage space, RAM consumption and CPU load. They benefit from the dynamic allocation capabilities of cloud where available resources are automatically scaled up or down based on the applications’ requirements.
This means smaller organizations should ignore cloud altogether and look somewhere else, right? Not at all. Small and even medium sized organizations may very well benefit from the pay-as-you-go billing system that many of the cloud providers have adopted. For cost conscious consumers, this means availability of powerful infrastructure for a fraction of the cost.
Since most of the cloud providers host your applications in modern data centers, you get access to an elite hosting infrastructure that’s highly available, powerful, may be even geo-redundant (and many more big words I can’t remember right now). That’s technology at a reasonable price for you, sir.
Sounds like a dream? It’s probably the right time to wake up to a cloudy day.
- InfoBeans Pune team at Goa http://t.co/BLPPQjeQ
34 days ago - InfoBeans wins the award for CSR Excellence http://t.co/2DVsGQQ2
56 days ago - InfoBeans wins the award for CSR Excellence http://t.co/cSh1p3Km
56 days ago - “We are a Fun Loving Family” http://t.co/HDf6l9nj
56 days ago - Quality and software development - it's a bug's life http://t.co/fydaDrUv via @infobeans
63 days ago
| Call 888 4INFOBEANS to schedule a presentation |
| Request a capabilities presentation |

