Archive for 2012

Now available: Hosted Email Archiving Service with Diadem MailVault

Thursday, October 11th, 2012

Diadem MailVault Hosted Email Archiving

We are pleased to announce the launch of our newest service – the Diadem MailVault Universal Email Archiving and recovery solution for SME’s and mid-sized businesses who need a central email archiving service to backup and keep a log of all incoming and outgoing emails for their domain.

The MailVault email archiving software has been developed by DigitalGlue and its founder, Mr. Sharad Popli is a pioneering Internet technologist and had also co-founded QLC which had developed the Postmaster email gateway software and had been a great success, still in use by thousands of businesses as a LAN based email server and gateway.

The Diadem MailVault email archiving solution is a cloud hosted email backup and recovery service which allows businesses to log all incoming and outgoing emails for compliance, email recovery and business continuity purposes. Since email is the single most critical IT investment for businesses, worldwide, the missing or deleted emails can have a major impact for a business when communicating with clients and vendors. Similarly, as e-mail messages increasingly take center stage in headlines and lawsuits, it has become the electronic equivalent of DNA evidence. Having a system in place that takes this risk into account is crucial for businesses that don’t want to end up at the center of one of these disreputable and potentially damaging situations.

Key features of the Diadem MailVault email archiving solution is given below:

  • Automated email collection and archiving
  • Cloud enabled storage solution which expands as per your mail archival needs
  • Compatible with all leading mail server software in Linux and Windows OS
  • Quick, powerful search system to retrieve archived mails
  • Flexible retention policies for archived email
  • Litigation Support
  • No long term commitments or contracts.
  • Quick and seamless implementation with no downtime of your existing mail service

The Diadem MailVault email archiving service comes bundled with user licenses, cloud storage, data backups and technical support which ensures that there are no hidden costs or usage charges.  You can read more about our cloud email archiving solution on our website and also signup for a 15 Day Free Trial of our email archiving service.

Questions? Visit our email archiving FAQ page or contact our sales team for a quick response.

Some Useful SQL commands for MSSQL DB Admins

Monday, July 2nd, 2012

Sometimes we just can’t get our hands on that right “command” or the perfect “script”, that will simply “do my job (no bells or whistles required)”. After some hard googling, you may find one like a gift you have always wished or had to go the toiling way of writing, testing and putting into use, your own code for that particular need. In the following post I will discuss about some SQL commands and scripts (intended for MSSQL DB hosting) that comes handy in performing those tasks, that would otherwise take a lot of effort and time. You may find them scattered around the world wide web in fragments, but in my opinion finding them in one place have obvious advantage.

Take backup of a particular database and set it offline

This is a likely situation in a database migration scenario. You take backup of a database and immediately take it offline to avoid further data operations into it. You have to run the following SQL from sa login.

BACKUP DATABASE <dbname>
TO DISK = '<backup_path><dbname>.Bak'
WITH FORMAT,
NAME = 'Full Backup of <dbname> on <backup_time>, <backup_date>'
GO

ALTER DATABASE <dbname> SET OFFLINE
GO

<backup_path> may be something like “D:\migrate_database\” and <dbname> is the name of the database.

List tables and stored procedures with a specific schema

You may need to modify schema of tables and stored procedures in batch. This situation arises when you need to delete one user from the database who owns a lot of tables and stored procedures. In order to list those tables and procedures, run the following SQL commands.

USE <dbname>;

SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA = '<dbuser>';

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE INFORMATION_SCHEMA.ROUTINES.SPECIFIC_SCHEMA = '<dbuser>';

Now you can prepare and run a batch SQL script with commands like the following one.

ALTER SCHEMA dbo TRANSFER <dbuser>.<tablename>;

Find log size of all the databases

The following procedure will list the size of log file used by each database.

SELECT INSTANCE_NAME AS [DATABASE],
(CNTR_VALUE/1000) AS Size_In_MB FROM MASTER.dbo.SYSPERFINFO
WHERE COUNTER_NAME LIKE '%Log File(s) Size (KB)%'
AND INSTANCE_NAME NOT IN ('_TOTAL','mssqlsystemresuorce')
ORDER BY Size_In_MB DESC

Find recovery model of all the databases

Run the following procedure to know the recovery model used in each database.

Select name, DatabasePropertyEx(name, 'Recovery') from master..sysdatabases

A database’s log file size is influenced by the recovery model used in it.

Find failed login attempts to ‘sa’ account

Your public SQL server may be under constant brute force attack for ‘sa’ account. The following script will list the numbers and IPs from where the attacks are originated. This may be helpful in implementing your firewall policies.

declare @path VARCHAR(512)
select @path = path from sys.traces where is_default = 1
SELECT loginname, IP, Max(starttime) as LastErrorTime, COUNT(*) AS AttempCounts
FROM (
SELECT t.loginname, REPLACE(SUBSTRING(t.textdata, CHARINDEX(':', t.textdata, CHARINDEX(':', t.textdata, 1) + 1) + 1, 16), ']', '') AS IP, t.starttime
FROM dbo.fn_trace_gettable(@path, DEFAULT) AS t INNER JOIN
sys.trace_events AS e ON t.eventclass = e.trace_event_id
WHERE (eventclass = 20)) AS A
GROUP BY loginname, IP
order by LastErrorTime desc

Find cached page counts and memory uses for each database

The following two SQL commands will show page counts and memory used for each database in a SQL server instance.

SELECT
(CASE WHEN ([is_modified] = 1) THEN 'Dirty' ELSE 'Clean' END) AS 'Page State',
(CASE WHEN ([database_id] = 32767) THEN 'Resource Database' ELSE DB_NAME (database_id) END) AS 'Database Name',
COUNT (*) AS 'Page Count'
FROM sys.dm_os_buffer_descriptors
GROUP BY [database_id], [is_modified]
ORDER BY [Page Count], [is_modified];
GO

SELECT count(*)AS cached_pages_count, (count(*) * 8)/1024 As Mbytes,  db_name(database_id)
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_count DESC;
GO

Get list of all current connections to SQL Server instance

The following SQL command lists all current connections to the SQL Server instance. It generates list by code and is flexible and easy to analyze.

SELECT DB_NAME(dbid)AS ConnectedToDB,
hostname, program_name,loginame,
cpu, physical_io, memusage, login_time,
last_batch, [status]
FROM master.dbo.sysprocesses
ORDER BY dbid, login_time, last_batch
GO

Also you can filter the results for a single user or a single database by providing filter criteria in where clause as required. For example to get just connections to database you may add following condition in where clause

WHERE dbid = DB_ID ('AdventureWorks')

Similarly you may filter the results with relevance to any column as required. Above script can be used on all versions of SQL Server.

Complete memory usage report of an SQL server

The following SQL script will generate a complete memory usage report for a SQL server instance.

DECLARE @pg_size INT, @Instancename varchar(50)

SELECT @pg_size = low from master..spt_values where number = 1 and type = 'E'

SELECT @Instancename = LEFT([object_name], (CHARINDEX(':',[object_name]))) FROM sys.dm_os_performance_counters WHERE counter_name = 'Buffer cache hit ratio'

PRINT '----------------------------------------------------------------------------------------------------'

PRINT 'Memory usage details for SQL Server instance ' + @@SERVERNAME  + ' (' + CAST(SERVERPROPERTY('productversion') AS VARCHAR) + ' - ' +  SUBSTRING(@@VERSION, CHARINDEX('X',@@VERSION),4)  + ' - ' + CAST(SERVERPROPERTY('edition') AS VARCHAR) + ')'

PRINT '----------------------------------------------------------------------------------------------------'

SELECT 'Memory Configuration on the Server visible to Operating System'

SELECT physical_memory_in_bytes/1048576.0 as [Physical Memory_MB], physical_memory_in_bytes/1073741824.0 as [Physical Memory_GB], virtual_memory_in_bytes/1048576.0 as [Virtual Memory MB] FROM sys.dm_os_sys_info

SELECT 'Buffer Pool Usage at the Moment'

SELECT (bpool_committed*8)/1024.0 as BPool_Committed_MB, (bpool_commit_target*8)/1024.0 as BPool_Commit_Tgt_MB,(bpool_visible*8)/1024.0 as BPool_Visible_MB  FROM sys.dm_os_sys_info

SELECT 'Total Memory used by SQL Server instance from Perf Mon '

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Total Server Memory (KB)'

SELECT 'Memory needed as per current Workload for SQL Server instance'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Target Server Memory (KB)'

SELECT 'Total amount of dynamic memory the server is using for maintaining connections'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Connection Memory (KB)'

SELECT 'Total amount of dynamic memory the server is using for locks'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Lock Memory (KB)'

SELECT 'Total amount of dynamic memory the server is using for the dynamic SQL cache'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'SQL Cache Memory (KB)'

SELECT 'Total amount of dynamic memory the server is using for query optimization'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Optimizer Memory (KB) '

SELECT 'Total amount of dynamic memory used for hash, sort and create index operations.'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Granted Workspace Memory (KB) '

SELECT 'Total Amount of memory consumed by cursors'

SELECT cntr_value as Mem_KB, cntr_value/1024.0 as Mem_MB, (cntr_value/1048576.0) as Mem_GB FROM sys.dm_os_performance_counters WHERE counter_name = 'Cursor memory usage' and instance_name = '_Total'

SELECT 'Number of pages in the buffer pool (includes database, free, and stolen).'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name= @Instancename+'Buffer Manager' and counter_name = 'Total pages'

SELECT 'Number of Data pages in the buffer pool'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Database pages'

SELECT 'Number of Free pages in the buffer pool'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Free pages'

SELECT 'Number of Reserved pages in the buffer pool'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Reserved pages'

SELECT 'Number of Stolen pages in the buffer pool'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name=@Instancename+'Buffer Manager' and counter_name = 'Stolen pages'

SELECT 'Number of Plan Cache pages in the buffer pool'

SELECT cntr_value as [8KB_Pages], (cntr_value*@pg_size)/1024.0 as Pages_in_KB, (cntr_value*@pg_size)/1048576.0 as Pages_in_MB FROM sys.dm_os_performance_counters WHERE object_name=@Instancename+'Plan Cache' and counter_name = 'Cache Pages'  and instance_name = '_Total'

At Diadem Technologies we have been using these scripts in our day to day DBA work and have benefited from these code snippets.

You can download all the scripts shown on this page from here: SQL Scripts (.zip)

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 5.00 out of 5)
Loading ... Loading ...

Mail Queue monitoring for Qmail and Postfix email servers

Monday, June 11th, 2012

Mail Queue monitoring is a big task for any organization running a busy mail server. Failure to do in a timely manner may lead a huge mail queue of SPAM mails or Bulk mail in the queue, which slows down the delivery of genuine mails in the queue. There are few third party tools and inbuilt command is available to monitor the mail queue in Qmail or Postfix mail server.

Qmail Server Mail Queue monitoring overview:

/var/qmail/bin/qmail-qstat will show current processed or unprocessed mail in the queue. This is a qmail inbuilt command.

/var/qmail/bin/qmail-qread will show a brief details of queued mails, like delivery address and mail type (remote/local).

These are only inbuilt command in Qmail for mail queue monitoring.

There are few third-party tools available for Qmail for mail queue monitoring.

qmHandle is a simple program which allows you to view and manage the Qmail message queue. The software will work on every Unix platform with Perl installed and Qmail installed.

qmHandle Installation:
# wget http://optusnet.dl.sourceforge.net/sourceforge/qmhandle/qmhandle-1.3.2.tar.gz
# tar -xvzf qmhandle-1.3.2.tar.gz
# cp qmHandle /usr/bin/

Now run the command as
# qmHandle

Available parameters:
-a       : try to send queued messages now (qmail must be running)
-l       : list message queues
-L       : list local message queue
-R       : list remote message queue
-s       : show some statistics
-mN      : display message number N
-dN      : delete message number N
-fsender : delete message from sender
-f’re’   : delete message from senders matching regular expression re
-Stext   : delete all messages that have/contain text as Subject
-h’re’   : delete all messages with headers matching regular expression re (case insensitive)
-b’re’   : delete all messages with body matching regular expression re (case insensitive)
-H’re’   : delete all messages with headers matching regular expression re (case sensitive)
-B’re’   : delete all messages with body matching regular expression re (case sensitive)
-t’re’   : flag messages with recipients in regular expression ‘re’ for earlier retry (note: this lengthens the time message can stay in queue)
-D       : delete all messages in the queue (local and remote)
-V       : print program version

You can view/delete multiple message i.e. -d123 -v456 -d567

The Qmail-Remove utility will remove messages containing a particular string from your Qmail queue.

Qmail-Remove Installation:
# wget http://www.linuxmagic.com/opensource/qmail/qmail-remove/qmail-remove-0.95.tar.gz
# tar –zxvf qmail-remove-0.95.tar.gz
# mkdir /var/qmail/queue/yanked
# make ; make install

Now for deleting mail containing a particular IP Address run:

# qmail-remove -p 111.111.111.11 –v -d

You can change the IP address with a word string also  e.g.

# qmail-remove -p your- string -v -d

# qmail-remove -p your- string -v -r

This will yanked the mails instead of permanent delete.

Postfix Server Mail Queue monitoring overview:

List/Print current mail queue

# postqueue –p
# mailq

Flush the queue

# postqueue -f

Schedule immediate delivery of all mail that is queued for the named as domain.come.

# postqueue -s domain.com

TO delete all queue

# postsuper -d ALL

To delete a particular message

# postsuper -d messageid

Postfix inbuilt tools are pretty good for monitoring the mail Queue.

That’s all, for all my System Admin friends. I will keep posted for other useful article soon. Keep browsing :) .

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5.00 out of 5)
Loading ... Loading ...

Diadem hosting services, now available at a datacenter near you!

Tuesday, February 28th, 2012

At Diadem Technologies, we strive to deliver an enhanced web hosting experience which our customers expect from a professional web hosting provider. In keeping with this commitment, I am pleased to announce the launch of our new hosting facility from Singapore, which is situated bang in the middle of the APAC region and would enable much faster access to websites, emails and applications which we host in this new datacenter facility.

The Singapore datacenter has been built by Softlayer, which is the world’s largest and most innovative datacenter services provider. We have been using their network ever since 2006 and have found their network, hardware and support services to be top notch and very efficient. This multimillion dollar, state-of-the-art  datacenter facility has the following specs:

  • Capacity: more than 16,000 dedicated servers
  • 30 MW available input power
  • 12 x 800Kva UPS Battery Backup Units, 2N
  • 12 x 2000Kw Diesel Generator with On-site Fuel Storage, N+1

With over 2000 Gbps of network connectivity across the Softlayer 13 datacenters and a reduced latency time compared to US datacenters, our customers can expect the load time of their websites and the time taken to access their emails, stored files and databases to drop considerably as we move our servers from the US to Asia, since almost all our network traffic (incoming and outgoing) is from this region.

As an added example, I have run ping and traceroute commands to both our servers in the Softlayer US and the SG datacenters and found the the singapore servers to have a much lower latency (by over 70%) and also much less hops are required to reach the singapore servers.

Average ping response to US server:312 ms

Pinging plesk04.diadem-tech.com [208.43.212.71] with 32 bytes of data:
Reply from 208.43.212.71: bytes=32 time=312ms TTL=47
Reply from 208.43.212.71: bytes=32 time=313ms TTL=47
Reply from 208.43.212.71: bytes=32 time=313ms TTL=47
Reply from 208.43.212.71: bytes=32 time=312ms TTL=47
Ping statistics for 208.43.212.71:
Minimum = 312ms, Maximum = 313ms, Average = 312ms

Compare this with our singapore server which has a 70% lower latency at 97 ms:

Pinging 216.185.104.235 with 32 bytes of data:
Reply from 216.185.104.235: bytes=32 time=97ms TTL=115
Reply from 216.185.104.235: bytes=32 time=98ms TTL=115
Reply from 216.185.104.235: bytes=32 time=97ms TTL=115
Reply from 216.185.104.235: bytes=32 time=98ms TTL=115

Ping statistics for 216.185.104.235:
Minimum = 97ms, Maximum = 98ms, Average = 97ms (215 ms less then the US server!)

Here are some images of the SL Singapore datacenter and some links from their blogs:

Links from Softlayer.com on their international expansion:

As you can view from the above pics, this is a brand new datacenter with all the network security, performance and scaling up advantages which you can expect from the world’s leading datacenter provider and we are excited to bring this network closer to our customers.

We start moving our first server from US to Asia, this weekend and this will be an ongoing process, till we migrate the bulk of our servers over the next few months and deliver an outstanding hosting experience to our customers, all over again!

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Service improvements and new hosted solutions @ Diadem Technologies

Tuesday, February 14th, 2012

It has been a busy few months for all of us here at Diadem as we are working round the clock on our servers and ensuring smooth operations of our datacenter services. Here is a recap of all the key activities which has been keeping us busy over the past few months:

a. Support team augmentation: We have added more staff to our support team and have also been training them to work with our new hosting tools and utilities to ensure that our clients get prompt feedback for their queries. Our support team is now also available on Sunday’s (from 10AM  – 2 PM IST) and we are planning to further enhance our support functions by bringing in more resources and further extending their availability over the next few months.

b.Plesk Control Panel upgrade to 10.4: For our shared hosting clients, we have now upgraded our hosting control panel to the latest release of the much awaited Plesk control panel version 10.4. The new version of the Plesk panel has a more intuitive interface, single login for clients hosting multiple domains, third party application hosting support and administrative enhancements for admin users.

Get more details of the latest Plesk control panel 10.4

c. New VPS and Dedicated Hosting setups: We have added a record no. of new clients for our dedicated and vps hosting services, proving our capability for managing mission critical apps and services for our clients through our superior datacenter services, coupled with enterprise level backup and security services and our round the clock server management services. We will continue to enhance and further extend our dedicated and vps offerings in the next few months, so stay tuned.

d. Diadem Hosted Solutions: In a step beyond traditional mass market shared and plain vanilla vps hosting services, we have introduced the Diadem Hosted Solutions services which is essentially a SAAS model for providing enterprise level hosted services for small to mid sized organisation who wish to benefit from a zero capex enterprise level messaging, archiving and backup solution. Currently, we have introduced the following hosted services which has already been deployed for a good no. of clients for the past 12-18 months:

e. Sysadmin knowledge sharing: The job of a sysadmin is never complete. As soon as one job is completed or an issue is resolved, another task, issue, update or an emergency pops up in front of us, making our job an ongoing roller coaster ride or learning, relearning and improvements. At Diadem, we have focused the last few months in documenting all our routine and custom activities in our internal knowledgebase which is shared by our sysadmins in enabling them to share their knowledge, resolve issues faster and work more cohesively as a single unit. We have been working tirelessly in the background to ensure less spams are being received in your inboxes, your sites stay clean from malware, intrusion attempts are nullified and all our servers are operating at an optimal state, 24×7.

The above activities, in a nutshell have kept us busy for the past few months but we have also been working on further extending our offerings and improving our services in the next couple of quarters, so if you would like to get email updates on our new offerings, signup on our newsletter mailing list on the main page of our website.

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Top 10 outsourcing tips for web development

Sunday, February 12th, 2012

Outsourcing is never an easy affair, especially if you are considering outsourcing your web project overseas to India or any other developing nation. As I have personally managed a web development team and also outsourced web development jobs to other developers, here is my list for the top ten tips to help you make sure that outsourcing your web development requirement, does not need to be a hassled affair.

Tip # 1: Use a Project tracking tool

It is imperative that the company you are working with uses a project collaboration tool like Basecamp, to enable you to communicate effectively and seamlessly with all members associated with that project. If you are a regular outsourcer, working with a no. of fixed providers, than you can use your own project management tool and assign logins to the outsourced individuals/firms  which would be working on your projects.

Tip # 2: Research the credentials and competency of the outsourced firm

It is very important that you do adequate research on the individual or the firm who would be working on your project. You don’t want to get into an agreement and than realize that the that the firm is subcontracting the project to another vendor or worse they have no skill whatsoever for the assignment. It is important that you verify that they have worked on similar projects, are able to provide verifiable contacts and can communicate with you regularly on the progress of your project.

Tip # 3: Review the hidden costs

Every project has some fixed costs like the cost of development which is calculated by the proposed time you will invest on a project, promotional expenses, the cost of additional software, web hosting and other hardware expenses. However, it is also important that you make a list of the hidden costs for your project which would include, your time spent in communicating with the developers/your client, the duration of the project (the longer the duration, the more you would need to communicate), additional features which might needs to be added while the application is developed, third party applications to be bought and integrated into the site for additional functionality, maintenance and updates.

Tip # 4: Communicate, communicate, communicate

This is probably the single most important key to your project’s success. You need to communicate explicitly, relentlessly and on a daily basis to ensure that you get your message across. Don’t assume that the company you are outsourcing to, has the same vision for your project and you need to provide them with examples, illustrations, references and a road map to guide them forward to completing your project successfully. Don’t make logical assumptions and assume that they are on the same page. Start a dialogue and expect your team to follow suit.

Tip # 5: Don’t set unrealistic expectations

Can you develop a custom theme, slice it, plug it into a shopping cart, test and launch the site online within 4-5 working hours? Probably not. Don’t expect others to be able to get something done for you within a deadline which you can neither fulfill or you are not sure about the technicalities of the project. Just because your neighbors son has told you that its possible, don’t assume that to be the norm.

It’s a safe bet to assume that a project will take 1.5 to twice the effort to complete then what has been estimated initially. In the projects which we have done for our clients, there are very few projects which had got done within the deadline which was initially estimated but almost all of those projects were done successfully and with very pleased clients. At the end of the day, you should aim to have  a great product rather than put up a lame website online.

Tip # 6: Start off with a test project

Ok, you think you have found the right resource to work on your project and you are confident that they can deliver. My advice would be take it one step at a time and rather than sending across the complete project to them, break up your project into smaller sub projects and send them a few of those assignments to complete. This will make both you and your team insync with each other and it would also give you a fair bit of idea of how they work, their internal processes and communication systems. It will also give your provider some understanding of your personality and they can adapt their development process to better suit your specific needs.

Tip # 7: Aim to work with a quality provider

Generally, the lower the price which a provider has quoted for your project, the more suspect the quality of work is going to be. This is unless, they are new and are trying to build a portfolio or if they are a ‘mass specialist’ like a logo development company and have the ec0nomies of scale to work with. You should aim to work with the provider who is best suited and most qualified for your project, even if it costs a little more, because in the long term, quality is what really matters and the price is quickly forgotten.

Tip # 8: Develop a prototype for your application

If your website or application is anything more complicated than some static content (with or without a CMS) with some feedback forms, consider building a prototype for your web application ‘before’ building out your application. If you have not yet built a prototype for your application and simply have the specs written down in a document or powerpoint file, rethink your outsourcing strategy and consider developing your application prototype as a project in itself.

As you cannot mass produce a vehicle, without building out several prototypes and perfecting its design, performance and handling, you cannot build a successful web application without creating a  well documented and functional prototype which would allow you and your developers to walk through the various functionality, clarify any concerns and give you a firm time/cost estimate for your project.

Tip # 9: Give constructive feedback

You need to provide constructive and meaningful feedback to your team for them to work effectively on your project. It may sometimes happen, that there might some obvious design element or code functionality which is not working as expected and its pretty obvious to you. However, your team might be absorbed in other areas of your project or they might have overlooked this issue completely. Give them the benefit of doubt and post your concerns on your project collaboration website for them to address and resolve the issues. Setup TODO lists and weekly follow ups to ensure that resolve all outstanding issues for you. Remember, that developers generally cannot find fault in their own creations (or they don’t dig dip enough to find it), so the onus is on you to review the progress made and provide feedback and some timeline by which you would like these to be resolved.

Tip # 10: Make a Plan B

While outsourcing your project, make a Plan B, in case your developer fails to deliver. Ask for weekly code backups, original source files of your approved UI elements, documented code, DB backup and other relevant elements if you need to recreate your site from scratch. If required, define these deliverables in your project proposal and pay a little extra to your developers for providing these to you while the application is being built. Keep some alternate developer contacts handy with you and don’t be afraid to start over, if things don’t work out as expected.

Please post your feedback and comments below for any other point to consider before outsourcing your web project.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votes, average: 4.00 out of 5)
Loading ... Loading ...