Welcome to Atalasoft Community Sign in | Help

Wow, has life changed since Atalasoft, Inc. was incorporated in August 2002, just over 5 years ago.  The turning point for me in founding Atalasoft was the aftermath of 9/11.  I did not want to be at the mercy of a large corporation in aerospace facing a downturn.  I would seek a new challenge with a simple vision.  I realized Microsoft was putting a lot of energy into .NET and it was the next step for software development.  I also recognized that Imaging was an interesting and emerging field; one that I had taken a keen interest in.  And finally that software was the best way to create a company with minimal startup funds. The vision was to create a company that would leverage Microsoft's new .NET developer framework by offering the best possible imaging technology to .NET developers.  I didn't perform any market research, I didn't care about any competitors.  I'd like to say that I knew an easy-to-use imaging toolkit for .NET would open the door for other ISV's to create vertical document management solutions, and that the industry would continue to grow at an increasing rate.  But I had no idea, just a vision and a goal.  The goal of building a company that would provide a better life for myself and my new family. 

Today, all I can say is WOW.  What luck!!  I can honestly state that we have the best .NET Imaging technology on the market highlighted by our ASP.NET Imaging Technology for Viewing and Annotating documents with a zero footprint thin-client. 

In 2007, Atalasoft's revenue grew by 57% (previous year's growth was 60%).  Since inception, Atalasoft has been profitable and has never taken on outside funding other than a few small bank loans.  Sure, we have had our share of growing pains.  We are about to grow out of our 3rd office space in 4 years.  We've had to change our phone system and telecom provider to support our growing workforce, and had some recent unplanned phone outages (sorry for any missed calls).  In maintaining my role as President and CEO, I'm no longer engineering software, but spending more time engineering a business.  To me, it's the same thing, but an even greater ongoing challenge that continues to keep me up into the wee hours; not because I have to, but because I want to.

Obviously our goals have continued to evolve over the years, but our vision has remained the same.  It's been written down, refined, and the words change frequently, but however you want to word it, we are still about providing value to .NET developers that are building solutions that require the use of advanced imaging and document technology.  Will this vision maintain our 60% growth for the next 5 years?  Please stay tuned!

Over the more than five years I have founded and managed a start-up software company, we have implemented processes and tools that enabled our company to release high quality, fast performing code quickly and efficiently. Many CEO's that I have met have done an incredible job with their company's strategy, sales, marketing, and product ideas. But some don't quite get the software engineering side of the organization. It is possible to be a CEO of a software company and not have a software background. This is not as rare of an occurrence as you might think among early stage software companies. It's important that these CEO's and their engineering staff understand what it takes for their organization to write quality and efficient code.

The concepts that I talk about apply to a software company using any development environment, but the tools that I'm discussing in this article are specific to Microsoft .NET technologies. This is not an inclusive list of all available tools; just the ones I'm familiar with.

There are many other sources on the Internet that talk about these concepts, including the Joel Test. I'm not posing anything new or revolutionary here. These concepts have helped Atalasoft become a market leader in .NET Imaging Toolkits amongst a number of incumbents in a relatively short amount of time.

1. Source Control

I believe that having a good source control system is the most important system that should be in-place in a software development shop. A good source control system tracks the history of all changes to code, and allows more than one developer to work on the same code base by managing files with check-in/check-out policies. There are free systems such as the open-source subversion, based on CVS. There are also some great commercial choices including Vault from SourceGear, and Team Foundation Server from Microsoft.

Even if you have only a single developer writing code, a source control system will manage all history important when overwriting that important piece of code that hasn't been backed up. It will also enable a developer to work on different branches of the same code-base. For a single developer, the tools available from SourceGear are free. If you are a Microsoft Certified Partner, Team Foundation Server (TFS) for up to 5 users is free. A Microsoft Gold Certified Partner with an ISV competency has the benefit of 25 licenses of TFS.

2. Bug Tracking System

A system for tracking bugs is very important. It can be a simple excel spreadsheet located at a central location, but for more than one or two developers, you'll want to invest in a commercial product. We use FogBugz, but there are many others, including work item tracking built into TFS. A bug tracking system should have the capability of assigning items to specific users, various priority levels, tracking time estimates, and differentiate between a bug and a feature.

3. Unit Tests

By now, unit testing should be incorporated into any software shop, no matter what the size. A unit test is a small isolated bit of code that verifies the logic of some production code usually written by the same developer. Generally, for every class that's written, an associated test class located in a separate test assembly should be created to verify all of the business rules and logic. The unit test can then be run to verify the results of the test. If in the future, a change is inadvertently made to the tested code that invalidates the business logic, the unit test will fail allowing the developer to fix the issue before it is released to the customer. Having unit tested code gives the developers more confidence to improve their code design by re-factoring, or to add features and fix bugs with confidence that new bugs will not be introduced.

We use NUnit which is an open source testing framework for .NET. However some of our newer projects that are built with Visual Studio 2005 use the testing framework built into Visual Studio 2005 Professional (sometimes referred to as MSTest). Both are about equivalent in functionality. The advantage of MSTest is the ability to easily test non-publicly accessible code., and the built in code coverage tools. In either case, we use TestDriven.NET to debug our code from the unit tests directly. When a customer reports what might be a bug in our code, we simply write a unit test and debug the code directly from the test. Once the bug is fixed, the passing unit test is checked-in along with the bug fix. We can be confident that the same bug will NEVER occur again.

If you already have a giant code-base that is not unit tested, it can be overwhelming to start to add unit tests. If that's the case, make sure that any new code has associated tests, and try to allocate time to write tests for the core business logic of your existing code. It can be expensive, and might delay the introduction of new feature, but the stability and quality improvements will almost always outweigh the costs.

4. Repeatable Build

For a simple software product, sent to just a few customers, a build might be as simple as launching Visual Studio, Getting the latest source code, Performing a rebuild, zipping up the release folder, then copying to a shared folder for QA or the customer. Packaged software with an installer, help files, and multiple binaries can be much more complicated than this. In either case, you're going to want to automate this process as much as possible. Most importantly, you always want your unit tests to run AND PASS before the build makes it to the customer.

We use NAnt for build automation, but Microsoft now has a similar product called MSBuild with Visual Studio 2005. Either of these build systems are very powerful and can integrate with most source control systems. You will need to allocate time into your schedule to build and maintain a build script. For complicated projects, it might even require a dedicated resource.

Once the build is repeatable, you can setup a schedule to run it every night, or better yet use a continuous integration server. More on that later. If you've made it to this step, congratulations. I promise, if you're not doing this now it will be worth it as it can revolutionize your development. Without these 4 steps in-place, your company is at a serious disadvantage from your competitors.

5. An Agile Development Process

Some process is needed before any code is written. But if your team is just one or two developers, it might have been ad-hoc to this point. Ad-hoc is not going to cut it as your team grows. There are also non-agile processes such as CMMI. Generally this approach is divided into 3 even blocks of time. The first step is the design and spec writing. The second step is the coding, and the third step is the testing. This process can work, and some companies have had many successes with this approach, but it's very difficult to keep to a schedule when unexpected problems arise or when using new technology. An agile approach is more iterative. It enables a development team to make changes (such as removing low priority features) without impacting the schedule.

There are many resources on various forms of Agile Development. We have adopted a process called SCRUM at Atalasoft, and it has worked great. With SCRUM, we have a set of prioritized requirements that sometimes do change over a development cycle of many iterations called Sprints. At the beginning of each sprint, the highest priority items are estimated and allocated to the sprint. At the end of each sprint, we have a deliverable product that is presented to the management team. Because the iterations are short (generally a month or less) we know very soon if our time estimates are correct, and are able to adapt to a possibly slipping schedule by removing lower priority features. Requirements also can change during the development process but these requirements never impact the current sprint. This process has enabled us to release major versions of our product more than once a year.

6. Continuous Integration

The definition of Continuous Integration from it's best evangelist, Martin Fowler is:

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.

I suggest you read Martin Fowler's essay on Continuous Integration for a better understanding of the concept. We use CruiseControl.NET, developed by Fowler's company, for continuous integration. It's easy to setup, free, and fun to use. We can now be assured that our code-base is stable (or not) at any time of the day. Problems with the build are reported to the developers almost immediately, and usually can be fixed right away.

7. Static Code Analysis

Static Code Analysis is very useful at enforcing design patterns, catching performance problems, and finding other problems by analyzing the source code without executing the application. If you are using Visual Studio Team System, use the Code Analysis tools built-in. If not, FXCop is the same as the code analysis included in Team System, but without some Visual Studio integrations such as the ability to annotate your code to ignore exceptions.

8. Code Profiling

We use code profilers to help find performance issues, memory leaks, and other problems in our code by instrumenting executing code. AQTime from Automated QA makes a great product. Visual Studio Team System also has some profiling tools, but those tools do not profile unmanaged code. We've been able to quickly optimize our algorithms and code paths by running code profilers on our code-base to find bottlenecks.

9. Code Coverage

Code Coverage is great in determining what percentage of your code-base is unit tested. Visual Studio Team System has some good code coverage tools.  We also use AQTime.  Our goal is to achieve 85% coverage with any new code we write, but admittedly that is sometimes hard to obtain.

This past week the high tech firm GetConnected of Boston suddenly closed their doors after eight years and $20 million in funding.  This left over 100 employees unemployed.  I'm sure these former employees wont have too much of a problem finding a job in today's economy, but how could this happen in the first place?  Atalasoft is a bootstrapped company, and hasn't taken any outside funding.  Some clients look at this lack of outside investment as a problem with stability.  Why should a client of ours spend tens of thousands of dollars on a company that doesn't have a significant financial backing?

Since the inception of Atalasoft, it was critical from day one to be profitable.  How can this be done without a significant boost of capital?  This is the tough part, but it can be done!  In my case, I continued to work my day job building a small source of revenue for the company on the side that could eventually sustain myself and my family.  After a year I left my day job on good terms and with revenue growing at a good clip.  It only took a month to hire the first two employees.  I only hired them when I had the revenue to support them.

The first few years were tough, no doubt, but we had a good idea, a good team, and better yet, the revenue to support it.  I suppose an advantage I had over some starting out is that my standard of living wasn't too high.  I had only worked in the engineering field for 5 years and was guaranteed not to get a raise after 9/11.  My salary wasn't even close to 6 figures.  It didn't take that much to make ends meet. 

These first few years really shaped the company.  Banks wouldn't finance us because we didn't have a track record or any tangible assets.  I didn't have wealthy family or friends.   I was also unwilling to give up equity for early stage investment, and quite frankly, at the time I was more interested in developing the product versus meeting with investors.  Atalasoft grew organically.  We only hired new employees when we could afford them.  Did we take risks?  Absolutely. But they were measured risks.  Not all of them were worthwhile, but because most were, we succeeded.  That's because we had to be.  If I failed, I'd have to go back to my former job with a LOT of debt and tail between my legs.

Today, our company continues to grow at a rate of about 75% per year in revenue.  Most of our profits are invested back into the company which is how we continue to innovate and grow.  Unlike some VC backed startups, we have learned to be careful with spending, take measured risks, and manage the company our way.  As a result, we have had virtually no turnover, we've outgrown 3 office spaces, I field calls from Venture Capitalists every other day, and now banks are more than willing to extend us financing that suits our immediate needs. 

When investigating a company's financial backing as a decision metric (whether it be to work for, or do business with), consider the stability of a company grown to 20 employees without outside investment forced to be profitable to stay in business vs. a company of 100 employees burning through 20 million in multiple rounds of VC funding.  This isn't to say that Venture Funding is always a bad idea as there are plenty of examples of successful VC backed companies.  Even Atalasoft could take a form of outside investment at some point for the right reasons.  However, in the example of GetConnected stated in the first paragraph, the sign on the front door reads "CLOSED. Good-bye ALL."  Which basket would you put your eggs in?

Our Sales Manager John Casanova and I are visiting London this week meeting with a number of clients and partners.  My first trip to London in 7 years!  Unfortunately, with our schedule we wont have time to tour around much although we will make a point of riding the "London Eye", after visiting a fair number of pubs.  I did learn that pretty much everything closes at 10:30pm on Sunday, which is unfortunate when hungry and jet lagged at midnight.

If you are in London, or able to make it to London this week (July 16 - 20) and would like to meet us, please call our main office and talk to Lisa so she can schedule it with us.  We do have a couple breaks in our busy schedule during the week.

This week we'll be traveling to Orlando for Microsoft's TechEd.  Last year, our ".NET Imaging with Mojo" T-Shirts were very popular and went very fast.  This year we will be giving away even more ".NET Imaging with Muscle" T-shirts.  A spotter who finds someone wearing an Atalasoft T-Shirt at the show will be given free Microsoft Zune media players.  We'll be giving away Zunes on Tuesday, Wednesday, and Thursday.

Looking forward to seeing some of you at TechEd! Please stop by Booth #1329 for your free T-Shirt.  Be sure to wear your T-Shirt to win your Zune!

I never thought the day would come when I would have to consult with our office manager to find out how many employees we have at Atalasoft.  Well that day has finally come as I've honestly lost track.  I just got off the phone with our new Professional Services Director who accepted the job tonight; a job we've been recruiting for the past couple months.  Tomorrow we have a new wave of entry level employees starting.  Three full time, and one summer intern. Today I met with the owner of the building we lease from so we can get started on building out the space next to us as our office we just moved into a year ago will soon be bursting at it's seams.

The good news for our customers is that very soon we'll be able to provide a whole new level of service.  Our enterprise customers will be able to choose a company to implement their document management solutions who are true experts in document imaging technology.  While two distinct groups at Atalasoft, the core product team and professional services will feed off each other.  Our product team will benefit from experiences in the services division by better understanding industry requirements and demands to better enhance our Imaging SDK's.  In the same breadth the services division will benefit from the wealth of core technology knowledge in the product team.  We have been fulfilling document imaging technology needs for over 6 years.  Within the next few months we will also be capable of fulfilling your entire document management application needs with a team of product managers and experienced .NET application software engineers dedicated to your projects that employ the same Agile engineering practices that have led to the success and rapid growth of our Imaging SDK's.

To Ken, Rick, Jacob, Eric, and Tyler.  Welcome Aboard!!

This week the business magazine for Western Mass, chose me as one of 40 business leaders under 40. I'm truly honored to be included in this list of talented business people in the region.  While Western Mass is certainty outside the technology hub of the Greater Boston Area, it's nice to know that there are other young entrepreneurs that call this area home.

With that said, I am terribly disappointed that out of the nearly 40 companies represented, Atalasoft was the only technology company.  No bio-tech companies.  No software companies (except Atalasoft). No nanotech companies.  No engineering firms. Very few people with a technical background.  That's not to say that the other company's represented don't use technology; of course they do.  That's also not to say that these people don't exist!  They also do, but obviously fell short on getting nominated for the 40 under 40.

Perhaps the problem with this list is that Business West magazine is targeted to local businesses, with local clients.  Many of the selected are lawyers, accountants, and educators.  Those companies are the ones who most often read the journal, and also are the advertisers.  I'm not trying to knock the accomplishments of anyone who was selected; just share my disappointment in the lack of technology represented.  Each named individual demonstated significant personal and business accomplishments, with most contributing to the local community much more than I as only recently have I been active in the community since surfacing for air from building Atalasoft. 

The problem is, what will support all of these law firms, accounting firms, and bankers in Western Mass in the future?  Who will help them prosper and grow?  The major employers in the area will continue to contribute for sure (Mass Mutual, UMASS, Bay State Hospital, and a handful of others) but that only goes so far as the economy changes.  The Textile and Paper Industry held up this region for a hundred years.  After that industry was basically sent over to China, it was Precision Machining and Aerospace.  Now precision machine shops are having trouble with some of that industry heading to China.  It's time for this area to adapt to the globalization of our economy and reap the benefits from the good that comes from it.  Invent new products and services that are used beyond the borders of the Pioneer Valley, Massachusetts, New England, or even the United States.  Build off of and learn from the successes of other companies.  What will sustain and grow Western Mass for the next 100 years?  Biotech, nanotechnology, software, and the endless opportunities to deliver technology world-wide. 

Kudos to BusinessWest for their first 40 under 40, and congratulations to all those selected.  It's a great way to recognize those who have contributed to the local economy and community.  I hope this inspires more young technology entrepreneurs to start their own businesses in this area and contribute to the local community.  I know for a fact that there are other local leaders under 40 who have contributed their ideas, inventions, technology but were not selected or nominated. Please nominate yourself or make sure you get nominated next year! Prove to me and my naysayers that Western Mass is a great place to grow a technology company.

Let me tell ya, it can be hard thinking about blogging when running a company.  I've started a few essays, but haven't had the time to bring them to life yet.  So what's been going on with myself and Atalasoft this past month?  Here's the abridged version:

1) We started using SCRUM at Atalasoft and delivered DotImage 5.0 nearly on time on March 13.  Agile now has a new meaning here at Atalasoft.

2) On March 22 I presented "Blogging Basics" for the RTC along with Mike Taber and Marwan Zubi.  Mike gave a great blogging presentation.  I backed it up with a case study of corporate blogging.  Marwan presented on some interesting legal issues of blogging.  The Podcast of the presentation should be available soon.

3) Sunday March 25 I was surprised to be on the front page of the Springfield Republican (our local newspaper).  Guess it was a slow news day. =)

4) Atalasoft's revenues grew by 69% in Q1 2007 over Q1 2006.

5) We decided to start a new consulting division at Atalasoft.  Looks like a win-win for Atalasoft.  Our customers are requesting these services.  We can't provide these services without losing focus on innovating our core products which is our primary goal.  Therefore we are creating a new services division specializing in document management / ECM enterprise applications where we can dogfood our own toolkit.  Interested in building this division with us?

6) We've released our AJAX Document Annotations Demo on our public website.  This demonstrates some of Atalasoft's latest innovations in browser based document imaging bringing annotation capabilities to our existing thin-client document viewing/processing component.

7) Lou Franco will be presenting "Bringing your Document Imaging Applications to the Web with AJAX" at the AIIM conference in Boston next week.  If you're going to be at AIIM, please signup for the sessions.  I promise, you'll learn something about AJAX by attending.  This isn't a marketing fluff talk.

Looking forward to seeing some of you at AIIM next week.  Send me an email or stop by Booth #3229 if you'd like to meet up.

There are many software engineers who are unhappy with their current jobs or seeking a greater challenge.  Many dream of starting their own company and are at a loss for that revolutionary idea. If you have an idea and it's truly unique, patentable, and has a viable and proven market, congratulations, you've achieved the first step.  You probably do not need to leverage another technology in this case.  However, most entrepreneurs aren't quite that brilliant and would benefit from building on the momentum of an emerging technology.  This is especially the case if you are looking to avoid venture by bootstrapping.

Lever This is exactly how Atalasoft was founded.  The emerging technology we leveraged was the Microsoft's .NET Framework in 2002/2003, and my idea was to develop a document management and imaging toolkit specifically for Microsoft .NET developers.  It was a gap that needed to be filled and would be filled by another company if we didn't act quickly.  The idea wasn't unique and it wasn't patentable (although we have patents now, but that came later).  The technology was new enough that it gave me time to compile a small team, develop a competitive product, and deliver, all before industry players could react.  We became the first to market an imaging toolkit for Microsoft .NET and our strategy for leveraging emerging technology worked.

The Microsoft .NET Framework is no longer new, but it didn't take long for me to come up with five new technologies that a developer could leverage as the foundation for a new company:

1) A few weeks ago Microsoft released Windows Vista; their first new OS in 6 years with some really cool new features for developers including Windows Presentation Foundation (WPF), Windows Communication Foundation (WCF), and Windows Workflow Foundation (WWF).  I was reading an article in the Boston Globe the other day titled The Vista Effect about a study that claims for every $1 spent on the Vista Operating system, it's partners will sell $18.61 in products and services. 

2) Dual core processors are now powering even the cheapest of new computers, with very few applications that take advantage of them.  Developing a faster alternate solution to an existing problem by taking advantage of multi-core processors with parallelized programming is a great opportunity for a new business.  Think of all the applications that could use a performance boost from everyday consumer apps to industry specific vertical apps.

3) The concept of a computer in every living room is coming to life with Microsoft's Vista Media Center, Windows Home Server, and Apple's iTV.  This is a huge opportunity to develop consumer software for the living room that could end up in millions of homes.  A PC in every living room opens the door for many product opportunities for home automation.  Personally I'm not much of a gadget geek, but I love the media center at home, and the idea I can develop applications to extend the media center.  Our new house is going to have media center "extenders" in a few rooms to stream music and video.  There are many applications I'd love to see in this area that are just not available yet.

4) Many cell phones and other mobile devices now pack more power than most high end PC's from less than 10 years ago. However the applications that run on these mobile devices are much more limited than the applications we had on desktops then.  Mobile application development has had a slow start, but it's about time for the software to catch up with the hardware. 

5) Let's face it.  There's a lot of money to be made in niche business applications.  Leverage the extensibility of the SAAS success story salesforce.com, and develop your own hosted business application based on their AppExchange platform.  Your application will be marketed by Salesforce and available to thousands of companies desperately looking for solutions for their business application problems.

This list illustrates technologies that I am familiar with and are bound to grow or are already experiencing growth.  The list could go on and on as the opportunities for new software applications are endless. 

The Downsides...  

Yes, there are downsides.  For one, don't expect to create the next billion dollar company.  Although I'm sure it's possible, it's certainly not likely if you are planning on leveraging another company's technology.  You'll never grow as big as that company. 

The other downside is that whatever idea you decide on, there will probably be at least one or more competitors looking to obtain the same market.  You must be the first at something.  Differentiate!

Whatever idea that you decide to go with, you better love it, because if you are successful you will be living and breathing this idea and industry for many years to come.  I'm sure we'll see more companies like YouTube, NetFlix, and Flickr, but chances of success are a lot greater when leveraging emerging technology.

My most memorable Christmas was the Christmas I got my first computer, a Commodore 128 when I was in 6th grade.  The $1000+ my parents spent on that was at least 5 times what they had ever spent on Christmas for me in the past.   While all my friends would later be playing video games on Nintendo, I was busy programming pixels in BASIC and hacking games on those 5-1/4" floppies.  It lasted through my senior year in high school, and for creating spreadsheets for my landscaping business.  Although neither of my parents used computers at their jobs, my Dad was friends with an appliance technician who also happened to service these computers that were sold at Sears.  My Dad was a small engine technician as Sears.  Looking back at it, I think that's how I got my first computer.  In thinking about this, I realized just today that my Dad understood technology much more than I ever gave him credit for.

Now, after founding a successful and growing software company I often find myself pondering the question of how I got here.  There were a number of factors that led me here, and I won’t bore you with the details, at least in this post.  The single most important aspect of my life that influenced me to start a software business was my upbringing, and my Dad.  I think about how hard he worked to support his family.  How dedicated he was in helping others before himself.  How even when he lost his job, he found satisfaction in whatever work he could find.  More than anything, it was my Dad's work ethics.  Not only did he work a full time job, he was also the town repairman fixing anything that had an engine including cars, tractors, lawnmowers, and more.  This is how he spent his nights and weekends.  Mostly as a favor, that only some would repay.

My DadTwo years ago today, my Dad lost his short battle with brain cancer.  Brain cancer can affect a person in many different ways.  It can lead to seizures, loss of memory, anger, and wild personality swings.  Often the patient has no idea what's happening, or soon forgets.  It can be absolute hell for anyone going through it, and their caregivers.  The worst form of this cancer, Grade IV Glioblastoma presents a very slim chance for survival past a couple years (other than mis diagnosis), and a non-surgical tumor typically carries a life expectancy of 6 months, exactly the time my Dad lived since being diagnosed.  The organization BrainTrust.org helped my family considerably during this time, with support services my mom and thousands of others latch onto during and after the ordeal.  Here is an organization led by a survivor herself, Samantha Scolamiero, who has dedicated her life providing support services to those affected by this condition and their caregivers.  Because this organization isn't research focused, an effort that is already funded with millions of dollars, potential supporters can be harder to find.

Today, in memory of my father, William M Bither II, I am announcing that 100% of proceeds from the sales of EyeBatch from January 1, 2007 onward will be donated to BrainTrust.org.  My father was charitable to every one of his friends.  Let this be my small part in being charitable to my friends dealing with this awful disease. 

EyeBatch is an award winning batch image processor that can be used to process images using a simple drag and drop script language that can be used to create thumbnails, watermark images with EXIF text, and create complicated and interesting effects.  After Atalasoft moved on into other markets, I had thought sales of this product would eventually die out, and admittedly, our company and myself had not given this product much attention.  Despite its lack of updates, we sell licenses of EyeBatch every day, with customers continuously singing its praises.  This partnership has given EyeBatch some new life, and this weekend a new version was released to support Windows Vista.

Let's face it.  CPU's just aren't getting any faster anymore.  CPU's have hit a ceiling in terms of processor speed, and that ceiling seems to be at about 3Ghz.  The new thing now is packaging multiple processors in a single CPU known as multi-core processors.  Now that the cheapest of PC's include dual core's applications, it's time for developers to do their part and develop applications that take advantage of these multiple cores.  Unlike increases in processor speed, applications don't benefit for free when introducting more cores.

Atalasoft is working hard on our next version of DotImage, and one of the new features is the ability to process images in multiple threads, taking advantage of multi-core processors.  We've added a new interface that enables any command to be processed in parallel.  We have run a number of benchmarks, and the results have been very promising with speed gains of up to 2.5 times that of processing a single thread.  Great!!

On my Pentium D desktop workstation, applying a fairly complicated image processing algorithm on a fairly large image gives me these results:

Single Thread: 1901ms
Multiple Threads: 909ms

That's a whopping 109% improvement with a command that's already heavily optimized.  How does this work?  Simple.  We break up processing the image in N sections.  For the purpose of explaining this, N will equal 4 which seems to be a really good number for dual core systems.  So we divide the image up into 4 sections as shown below.

Each section is then processed simultaniously in it's own thread.  When all threads are completed, the method returns with the newly processed image.  And in this case it's accomplished more than twice as fast, thanks to my dual core processor.

After testing a few systems at the office including a dual processor Xenon, and a handful of other makes and models, we were pretty satisfied with the results.  That is until I tested my 2Ghz Centrino Dual Core laptop.  To my dismay, the same image yielded these results:

Single Thread: 685ms
Multiple Threads: 831ms

This demonstrates that multiple threads are 18% slower on my dual core laptop.  Interesting.  I honetly have no idea why this happens.  It's also interesting that my 2Ghz laptop is quite a bit faster at processing than my 3Ghz desktop.  The single threaded laptop is faster than the multi-threaded desktop.  I honestly thought something was wrong with my CPU.  But I have tested it on 2 other laptops with Intel Core Duo's with similar results. 

Hats off to Intel for making a very fast processor, but PLEASE explain to me WHY is it slower when we optimize for dual core?  Comments are welcome, because I'm stumped.  Here are my results when running other CPU's under the same conditions with 2 different image processing commands.  The instances where the command is slower is with the Centrino Duo.  All other CPU's are considerably faster.

Adaptive Threshold Simple Threshold
Cores 1 Thread 4 Threads 1 Thread 4 Threads
Intel T2400 @ 1.83Ghz Centrino Duo 2 753 981 77% 395 332 119%
Intel T2400 @ 1.83Ghz Centrino Duo 2 778 840 93% 412 270 153%
Intel T7200 @ 2.00Ggz Centrino Duo 2 685 831 82% 279 284 98%
Intel Xenon 3Ghz (dual hyperthreaded CPU) 4 901 687 131% 301 220 137%
AMD Athlon 64 X2 Dual 4600+ x86 2 2284 1137 201% 756 512 148%
AMD Athlon 64 X2 Dual 4600+ x64 2 2248 931 241% 764 415 184%
AMD Turion 64 X2 Mobile TL-56 2 2732 1204 227% 1064 662 161%
Intel Pentium D 3Ghz 2 1901 909 209% 301 262 115%
Intel Pentium 4 2.5Ghz 1 3784 1586 239% 594 492 121%

According to Paul Graham's article The 18 Mistakes That Kill Startups, startups prosper in some places and not others.  The startup "hubs" are in order: Silicon Valley, Boston, Seattle, Austin, Denver, and New York.  There are most certainly advantages to starting a company in one of these areas, in particular Silicon Valley or Boston.  However, there are also advantages to starting a software company outside of a startup hub.  In this article, I'll relate to my own experiences starting a software company in the Pioneer Valley of Western Massachusetts as opposed to the startup hub in Boston, only a 1.5 hour drive away.

There are many reasons to start a company in the Boston area, namely the fact that it's the #2 destination for software startups, has the worlds top universities, home to hundreds of software companies, and hosts a huge pool of tech talent.  Boston is a great city with history, wealth, and many attractions.  I know this first hand because I frequently travel to Boston, just as I do New York.  Either city is a day trip from Western Mass.

However I argue that there are just as many reasons to start a company in Western Mass as there is in Boston.  Maybe even more.  Here are 7 reasons why I believe Western Mass is a great place to start a software company.  I believe the same argument holds true in other desirable areas to live with an educated workforce near an existing a startup hub.

1. Office Space is Cheaper

Despite being a mere 1.5 hours away, real estate in Western Mass is 1/2 to 1/3 the cost of that in Boston.  This includes land, buildings, class A space, and residential housing (source, Western Massachusetts Economic Development Council).  Leasing office space ranges anywhere from $3 - $10 per square in towns adjacent to Springfield and Northampton to $10 - $15 per square in space in Springfield and Northampton.

2. Salaries are Lower

Although closely related to the cost of living being lower, salaries for experienced and degreed computer scientists and engineers are much lower in Western Mass than in Boston.  In today's global economy, the urge to offshore development is very high.  As engineer's salaries go up, so does the pressure for founders and business leaders to send development offshore.  Offshoring does not fit within the culture of our company at Atalasoft, nor does it fit my personal ambitions.  By not having to pay very high salaries, we can stay competitive, and employ a team of highly skilled engineers in our own office providing better products and services, and serve our local community.

3. New England's Knowledge Corridor

There are 32 higher education institutions in the Hartford/Springfield area producing 25,000 graduates each year, one of the highest concentrations in America.  Very important to software startups, are computer science graduates.  UMASS in Amherst, which has a wonderful computer science program, graduates students who are recruited by the software giants such as Microsoft, Google, and Apple.  Many students I speak with graduating from these schools would love to stay in the area, but cannot due to the lack of good software development jobs.

4. Shorter Commutes

The average commute to Boston or San Francisco from suburban areas is likely to be an hour and a half.  Personally, I can't imagine driving more than 30 minutes to work, and I never had more than a 20 minute commute in my 10+ years living and working in the area.

5. Outdoor Lifestyle

City life isn't for everyone.  Western Massachusetts appeals to an active lifestyle, with activities such as hiking, cycling, kayaking, skiing, fishing, and boating.  The Connecticut river valley offers a host of rail trails, perfect for the lunch-time run or rollerblade.  Again, quoting Paul Graham in his essay How to be Silicon Valley, "Most nerds like quieter pleasures. They like cafes instead of clubs; used bookshops instead of fashionable clothing shops; hiking instead of dancing; sunlight instead of tall buildings."  Where in Boston can you look out your office window for a mountain view, enjoy a peaceful hour lunch run or walk on the Manhan Rail Trail, or enjoy a coffee at a local coffee shop, all in the same block?

6. Urban Centers

Northampton boasts a unique cultural downtown center with shopping, restaurants, arts, entertainment and nightlife rivaling those of major urban centers.  Nearby Springfield is the 3rd largest City in Massachusetts and home of the Basketball Hall of Fame, and the Springfield Armory.

7. Loyal Employees

Cities are great for young people.  However after settling down, married couples tend to move to suburbia to raise a family.  In Boston and other major cities, suburbia requires buying a house you usually cannot afford and driving over an hour to work (yes, this was covered in reason 1 and 4 above).  In suburban areas such as Western Mass, there is no need to relocate, housing is cheap, and employees tend to stay with one company longer, sometimes for their entire career. 

While I point out some great reasons to start a company, I shouldn't fail to mention the unique challenges that are faced when starting a software company outside a startup hub.  Here are 3 challenges to starting a software company outside a software hub. 

1. Lack of Venture Funding

Silicon Valley and Boston have hundreds of venture capitalists ready to invest money in software companies with viable (or sometimes unviable) business plans.  However they typically like to invest in companies within an hour of where they live.  Driving a couple hours to a board meeting isn't all that appealing.  There are other ways to start a company, such as Bootstrapping it yourself, and there are a few venture capitalists in our area such as Village Ventures.  However today I field phone calls from Venture Capitalists all the time, none of them local.  I'm really not sure this is a real problem in Western Mass.

2. Lack of Experienced Developers

So far Atalasoft has been fortunate in finding some very experienced employees from companies such as Adobe, Excite, and other smaller startups.  However there is a limited pool of developers with this level of experience in the area, and attracting people to the area can be a challenge.  So far, the pool hasn't run dry, and I continue to meet very experienced developers, many of whom have recently relocated from New York, Boston, and even Silicon Valley for the very reasons I state above.  If the pool does happen to run out, there is a constant supply of very talented developers graduating from UMASS in Amherst.  We attend UMASS career fairs and have hired some graduates.  We bank our company's future on UMASS being 20 minutes from our office doors.

3. Lack of Supporters

I have to admit, I feel a little alone at this.  There just are not that many other software companies in our area for me to share war stories with, or to seek advice from.  I have met a few, and would like to meet others.  There are some great local technology groups in this area involving some budding and more established companies such in the RTC, Hidden-Tech, Western Mass .NET Users Group, and Java-Python Developers Group.  If you are involved in a software startup company in Western Mass, and I haven't already met you, please contact me!  I would love to share war stories, take advice, and if you care to listen, even give advice.

I certainly expect that Atalasoft will continue to grow and employ more and more highly paid software developers and other technology professionals in Western Massachusetts.  Possibly just the beginning of a new wave of startups that understand that the advantages of settling just outside a startup hub in an area such as the Pioneer Valley can in many cases outweigh the disadvantages.  I hope this article can help with that decision and help entice other startup companies to join me and branch away from the startup hubs.

It's amazing to me that the term "AJAX" was first coined as recently as February 2005 by a man named Jesse James Garrett.  He was looking for a term to express to his clients explaining an application using JavaScript, CSS, DOM, and asynchronous HTTP callbacks.  AJAX is easy to say, and it gave the industry a word for this technology it desperately needed.  Today, all we need to do is say "AJAX enabled" or "Powered by AJAX", "AJAX this", "AJAX that".  What it really means is that it's a web app that doesn't require a full page postback when requesting additional information from the service.  AJAX stands for:

A = Asynchronous
J = JavaScript
A = And
X = XML

In reality, many AJAX applications do not use XML.  In fact, Atalasoft's own AJAX Document Image Viewer is really AJA, but that doesn't sound nearly as nice.  Jesse James Garrett was kind enough to announce at a recent AJAX conference we attended that you don't have to be using the "X" in AJAX to consider your application AJAX.  Since then you'll notice AJAX a lot in Atalasoft's own marketing material.  Hey, it get's the point across!

The technology behind AJAX has been around for over 10 years.  Microsoft's Exchange 2000's web based Outlook was the first well known application to use it.  But it wasn't until the popularity of Google maps, and GMail that people really started to notice this technology.  Until very recently, developing AJAX was incredibly difficult.  With the various AJAX toolkits and components available now, it's become much easier.

Step back to 2003 when Atalasoft first released DotImage.  Our first employee, Dave Cilley, was tasked to create an image viewer control for ASP.NET knowing that many desktop applications were moving to the web.  It was released in early 2004 as the first ASP.NET Image Viewer control with some limited AJAX functionality. However it wasn't until the release of DotImage 2.1 in early 2005 that our Web Image Viewer control was truly AJAX enabled with the ability to scroll, zoom, select, and process images without page postbacks.   At that point the term AJAX wasn't coined yet.  We called it "no-postback zooming and scrolling".  We also introduced what we call "remote invokable" methods allowing developers to write server code to save, open, or process the image in the middle of an asynchronous call invoked via a simple JavaScript method.  We also exposed an entire JavaScript API to operate on the entire control without server postbacks. 

Today, the control has even more functionality, including on-demand tiled loading, a web thumbnail control, and other useful features.  As we continue to improve our .NET imaging toolkit, our AJAX Image Viewer (aka, WebImageViewer) continues to be enhanced.  Our next release will include the heavily requested AJAX image annotations which integrates nicely with our DotAnnotate product.  Our online demo demonstrates the use of our latest WebImageViewer and WebThumbnailViewer controls.

A customer of ours working on a government contract purchased a couple SDK's and a server license of DotImage Document Imaging about year ago to replace an older desktop application used in quality control to compare two documents side by side; an original Microfilm scan of the document, and an updated higher quality scan of the document.  The page simply consists of two WebImageViewer controls side by side within their application's UI.  The end user pans and zooms one of the documents, which causes the other to pan and zoom in synch.  Nothing fancy for a desktop application, but not something you see every day in a web app.  Initially this application was for a single user.

Recently, I asked their IT manager why they chose to develop this as a web application, with only a single user at the time.  He responded with the fact that the previous app, written in VB6, was constantly needing updating and was painful to deploy even to one or two desktops. "A web app would give us centralized control over 'deployment' to a single location / server with the assurance that everyone was running from that version."  The application has since scaled to 10 users who review, process, split, crop, inventory, and add metadata to 7,500 documents per day.  Their IT staff will frequently update the application to add features and fix bugs, without having to re-deploy to each desktop.  These quality control jobs generally have high turnover rates, which would require installing the application whenever a new employee starts if it were deployed as a desktop application.  Recently they were hit with a blizzard, in which everyone was sent home.  Each employee was able to use the application from their home computers, even with low bandwidth connections as only the necessary data is downloaded to the client. 

While I can't mention the name of the company in this case (which is why it never made it into a real case study on our site) this is one of many reasons why so many desktop applications and systems, including Content/Document Management, is moving to the web.  AJAX technology makes this even more palatable.  We put together a whitepaper titled AJAX Document Viewing for Your Web App that presents even more arguments for using AJAX for viewing and processing documents on the web.  If you read SDTimes, you might have seen this whitepaper in their recent AJAX supplement.  And if you are a Code Project reader, you might have seen the article Cleaning Document Images on the Web with AJAX, a more hands on tutorial written by our engineer, Lou Franco.

Our software developers at Atalasoft spend a lot of time writing unit tests, and making sure these tests pass.  It's an integral part of our development.  We have unit tests written in NUnit that run whenever code is checked into our CruiseControl.NET continuous integration server, and we have even more tests that are run each night.  In fact, we have so many tests, our nightly build of our DotImage product can take a few hours to run on a very fast dedicated machine.  We try to keep our continuous builds under 10 minutes.  If any of these tests fail, we receive an email notifying us of the failure, and what code change might have caused this failure.  The system works great, and as a result, we can be confident that our products are very robust, and that changes to our code will unlikely cause additional bugs.  We strive for very high coverage in the code we write.  When ever a bug is spotted, we write a failing unit test before the bug is actually fixed in our code.  We even have UI tests that are run on our products using Automated QA's Test Complete

One might think that as long as unit test coverage is high, there's little need for additional testing.  That just simply isn't true!  It's been a while since I've been a core developer at Atalasoft, but I'll always be a computer geek so I keep my hands dirty.  One of my many jobs is to write stuff that uses our products; eating our own dogfood.  Today I wrote a utility that corrects the resolution of TIFF FAX images that have non-square pixel aspect ratios without having to re-encode the entire multi-page TIFF File.  I used our TiffFile class to do this which can be used among many things to replace individual pages in a multi-page TIFF without having to re-construct the entire TIFF.  The process is simple:

  1. Open the TIFF file in a read-only FileStream
  2. Read the file using TiffFile
  3. Loop through each page in the TIFF, and inspect the X and Y resolution TIFF Tags
  4. If the X and Y resolutions are different, and the image is 1-bit, decode the image, resample it by the X / Y ratio, and replace the page with this new image
  5. Save the TiffFile to a new file

If you would like the source code to this, see the Knowledge Base article I wrote on the subject.

Each page in a TIFF file has a set of TIFF Tags.  Most of these tags can be represented as a standard .NET object such as uInt, uShort, String, etc.  However for the Rational data type, there is no equivalent .NET type, so we created our own.  A Rational is simply a fraction with a numerator and a denominator, both as 32-bit Integers.  Our Rational class has 100% coverage, meaning every bit of that code is hit with our unit tests.  I was very surprised when the following bit of code didn't work as expected.

This is what the debugger told me the values were for xres and yres (both Rational objects).

xres.ToString() = "{1342177280 / 16777216}"
yres.ToString() = "{1291845632 / 16777216}"

However this simple equality operator returned false! 

if (xres != yres)
{
    //pixel aspect ratio is non-square
}

I knew this was wrong, so the first thing I did was write a failing unit test in the RationalTest.cs class located in our test assembly. 

[Test]
public void EqualityFailingTest()
{
    Rational rat1 = new Rational(1342177280, 16777216);
    Rational rat2 = new Rational(1291845632, 16777216);
    Assert.IsFalse(rat1 == rat2);
}

I just copied this code from a previous test that did the same thing (but the numerical values weren't quite as large).

Now to the source of the bug.  Stepping through the above test brought me to this code in the Rational class.

public override bool Equals(object obj)
{
    Rational rat = (Rational)obj;
    if (rat.Numerator == _numerator && rat.Denominator == _denominator)
        return true;
    else
    {
        //do the calculation
        return rat.Numerator * _denominator == rat.Denominator * _numerator;
    }
}

Come to find out, the calculation was overflowing returning 0 for both sides of the comparison.  Casting the values to 64-bit longs fixes the problem and passes the unit test.

return (long)rat.Numerator * (long)_denominator == (long)rat.Denominator * (long)_numerator;

The point is that the author of the Rational class did an excellent job writing unit tests with a remarkable 100% coverage.  However this unobvious bug made it's way through.  Only through additional testing, was this bug found.  Luckily we found it before a customer did and it will be in our next update!

This is exactly why we spend time in every development cycle writing sample applications using our SDK's.  For DotImage 5.0, which is currently in development, we've taken it a step further.  Our engineering team has adopted the SCRUM development process.  The standard SCRUM processes doesn't exactly address this form of QA, so we've modified it a bit.  The entire development team is spending 3 weeks in a "development" sprint and 1 week in a "QA" sprint testing other developer's code.  Keep in mind that we expect full coverage during the 3-week development sprint, so the 1-week QA sprint is for additional black box testing.  This process should help eliminate bugs like the one outlined in this article from ever seeing the light of day.  If anyone else has modified their their SCRUM process similarly, or is willing to try it themselves, please let me know!  Comments welcome.

Just when I thought it was past peak, I peered out my office window to see this view at just after 5pm as the sun set behind us.  You can see the bike path below, the reservoir, and of course, Mt. Tom.

I guess this is my lame excuse for not providing any intelligent content for my blog.  Maybe next week. Meanwhile, please enjoy!

By the way, if you're looking for a job, we have 3 immediate job openings right now.  Developer Support Engineer, Technical Software Sales, and a Software Developer.  Please visit our career page for details.