The Software Factory
Today I want to share the approach to software development, driven by the quality oriented mindset, we practice at WiHo.me. Since the beginning, we have been heavily investing in tools. Strongly believing the investment will pay off. We have even created a fully blown manufacturing line. Software manufacturing line.
It took us a lot of time and effort to integrate everything. The reason is, we have very broad range of technologies we develop for. And in the end we need a unified image of the entire system to be built. The technologies involve:
Then everyday at 9PM a number of build servers in the Amazon cloud wake up. They pull the committed sources, fire the relevant compilers and consolidate the output into a single image, which can be saved on a pen drive. The image can be easily applied to our home server appliances, which in turn will distribute (OTA - Over The Air) the changes to the micromodules and other "things" we serve via local wireless connections.
The entire build process takes lees than 30 minutes. Once a day. It is a great example of cloud computing - we need many machines, but only 30 minutes / day. In the old world we would have to buy machines that would be burning power (and money), idling for hours. In the new world, we wake virtual instances at Amazon, they do their job, and can be recycled for another customer.
The only exception is the Mac Mini. Yes, we have a physical computer in the office. There is no way to compile and build iOS applications in the Cloud. This speaks for Apple's adoption of Cloud. You have to have a physical computer with iOS to build an iPhone App. But in the end the iPhone App that is built in our office is uploaded to the Cloud and integrated in the distribution image.
Once the image is built, it is stored in the Amazon S3 repository and is available for downloads.
Physical headless Linux machines are downloading the image every night. Then they runs a series of automated tests. They install the platform, install the supporting applications and execute a series of tests. An hour later we get a report saying the master build was done and the automated tests were executed. If the result is OK, the human testers and early adopters can get their hands on the new version. Everyday.
At WiHo.me, we strongly believe in automation. After all, automation is what our product does. But we also make big investments in automating our software production line. It is already quite complex and advanced and we keep on improving it continuously. Personally, I consider the automated build / test / distribution system as one of the most valuable assets of the company. This system simply allows us to focus on the core tasks and takes care of the rest. It makes sure all the components are matching and are up to date, which is extremely important in a project that involves so many technologies and platforms.
In software business it is very easy to build a prototype. And then it requires crossing a chasm, to have a commercial product. There is this tremendous amount of craftsmanship required to get from a prototype to a product. If you are a software startup, you have your prototypes ready. Now ask yourself how far your organization is from being a professional factory, capable of continuous delivery of a complete final software product. The prototype to factory step is underestimated by many and is a big one to make. It sort of marks the line of a grown-up startup.
It took us a lot of time and effort to integrate everything. The reason is, we have very broad range of technologies we develop for. And in the end we need a unified image of the entire system to be built. The technologies involve:
- Low level applications for ARM Cortex M0 and ARM Cortex M3 processors
- Runtime modules running on ARM - based, embedded Linux platform (two targets: Marvell and Freescale)
- Custom bootloader and custom Linux kernel
- Linux scripts and support modules (UPnP, SMBD, Apache / FastCGI, networking subsystem, 3G modem subsystem, ...)
- Complete installation images of Linux OS for the target platforms
- A .NET client application with built-in machine code cross-compiler
- Android, iOS and BlackBerry mobile apps
- HTML5 / cloud based applications
- Multimedia (graphics, sounds) resources
Then everyday at 9PM a number of build servers in the Amazon cloud wake up. They pull the committed sources, fire the relevant compilers and consolidate the output into a single image, which can be saved on a pen drive. The image can be easily applied to our home server appliances, which in turn will distribute (OTA - Over The Air) the changes to the micromodules and other "things" we serve via local wireless connections.
The entire build process takes lees than 30 minutes. Once a day. It is a great example of cloud computing - we need many machines, but only 30 minutes / day. In the old world we would have to buy machines that would be burning power (and money), idling for hours. In the new world, we wake virtual instances at Amazon, they do their job, and can be recycled for another customer.
The only exception is the Mac Mini. Yes, we have a physical computer in the office. There is no way to compile and build iOS applications in the Cloud. This speaks for Apple's adoption of Cloud. You have to have a physical computer with iOS to build an iPhone App. But in the end the iPhone App that is built in our office is uploaded to the Cloud and integrated in the distribution image.
Once the image is built, it is stored in the Amazon S3 repository and is available for downloads.
Physical headless Linux machines are downloading the image every night. Then they runs a series of automated tests. They install the platform, install the supporting applications and execute a series of tests. An hour later we get a report saying the master build was done and the automated tests were executed. If the result is OK, the human testers and early adopters can get their hands on the new version. Everyday.
At WiHo.me, we strongly believe in automation. After all, automation is what our product does. But we also make big investments in automating our software production line. It is already quite complex and advanced and we keep on improving it continuously. Personally, I consider the automated build / test / distribution system as one of the most valuable assets of the company. This system simply allows us to focus on the core tasks and takes care of the rest. It makes sure all the components are matching and are up to date, which is extremely important in a project that involves so many technologies and platforms.
In software business it is very easy to build a prototype. And then it requires crossing a chasm, to have a commercial product. There is this tremendous amount of craftsmanship required to get from a prototype to a product. If you are a software startup, you have your prototypes ready. Now ask yourself how far your organization is from being a professional factory, capable of continuous delivery of a complete final software product. The prototype to factory step is underestimated by many and is a big one to make. It sort of marks the line of a grown-up startup.
Comments
Post a Comment