Lessons That I Learned From Waegis
It looks like that now I can stretch, look back and see what I have done with Waegis! As I have written on Waegis blog it was a hard week for me to launch the site, resolve initial errors and issues and reconfigure spam rules to gain the least fault ratio possible.
I didn’t sleep for more than 10 hours in five days (before and after the launch) which was something that I never had experienced in my life but after all, it’s now gone with good results. Waegis still needs treatments to be what I had anticipated about it both for the software and quality and for its business, but the good point is that now it’s on the right track to the future!
However, there were many things to learn from Waegis in different aspects and this was the most sweet point about this experience. In this post I just want to outline these lessons and describe them shortly to share them with you!
Waegis was a project with various aspects and requirements. This project from the start to the current point, has had many stages and each stage was related to a field varying from mathematics, Artificial Intelligence and statistics to software architecture, software development, software security, administration and business.
Of course, I wasn’t a %100 experienced person to deal with all aspects but fortunately I had a good background to let me pass them all in an acceptable level, at least! This project was a good train for myself because it let me define a big project with special requirements and critical aspects, plan for it, architect it, build it and finally launch it! All the below lessons can be documented in many papers but there is almost no time for such stuff for me for now! So here is just a wrap up of what is done including some good decisions that I made and some mistakes that I had!
Learning is More Important Than Ever
Implementing a project like Waegis at a big scale and for a special purpose had some basic requirements. Some requirements were related to software architecture and development and some were related to basic theoretical concepts related to mathematics and Artificial Intelligence. Of course, there were some requirements to implement these complex theoretical concepts but this was a little easier than other parts because I had good experiences with implementation of critical mathematic algorithms.
The most important point of this project was that I couldn’t do anything without learning all these concepts in the past years. There were lots of stuff to know in order to be able to implement such a project as an individual. I owe this to my passion for reading and learning so I can say that the main lesson was this!
Try Hard and Resist
This project was full of circumstances that I had to do a lot of work to achieve something even for a temporary purpose or something that I later redid in the project! For instance, the process of feeding the system with different databases in different states was something that required me to write custom code for each one in order to be able to feed the system.
Actually I think that I’ve written double as the current code for Waegis but some parts has to be redone and some parts were not a core part of Waegis software.
This is easy in words to say that I had to do all the work for nothing or less thing but I had to, though! So I would be thankful for my resistance and hard work and this is a basic point in software development but can be repeated when it comes to these cases!
Unit Testing is Not Always Good
You may be interested to know that how much of unit testing is done for Waegis. Actually I started the development with heavy unit tests for almost everything. Waegis has a core platform that I tried to develop with the best quality and accuracy so I unit tested it carefully. After 1-1.5 months of development I abruptly believed that this project is going to take much longer than my initial estimation. Normally taking longer wasn’t bad but for a self-managed project this could cause to failures so I had to make a new decision.
My decision was to limit my unit tests to some critical parts of code. Based on experience and background these parts are easy to recognize so I chose this approach and this helped me to speed up my development and bring it to the web finally!
Unit testing is great and I’m a big fan of it but this time I had to reduce and limit it in order to get the point. All the proven methodologies, software development processes and practices are there to teach you how to choose the best way so don’t restrict yourself with them!
Sometimes Redoing is Unavoidable
Redoing is the worst thing that I can experience in my life. I hate it indeed but this project was full of some unavoidable instances. Adapting with what spammers do and finding the most appropriate methods to defeat them were two main reasons to redo some parts to finally find the best working result.
Simplicity is Always Good
One of the main points that let me easily manage my architecture and my code was the simplicity that I tried to keep for everything. Despite the complexity of theoretical concepts I kept things as simple as possible and this let me manage my work much easier.
I never heard any complaint about simplicity and it’s always the best!
Security
Doubtlessly the primary category for Waegis is security and this make it a good candidate for lots of attacks by hackers and spammers. I expect it to be a good host for such attacks at least every week!
I knew this from the early stages so planned and worked around security to have enough mechanisms in order to prevent such attacks. Time proves what I did but Waegis was a special project in this field because it had much more security requirements in comparison with regular software solutions.
Believe it or not but I always worry about security and I think that this is a good thing. For instance, I knew that using normal HTTP port for some pages like registration and login won’t cause any security issue but I finally couldn’t stand that very small probability of its risk so used SSL for such pages.
Host for Scalability
I learned all this lesson from Hamid who taught me many things about choosing a good hosting strategy regarding all the aspects that it may have.
I can’t talk about all of what I learned here but in a nutshell the best hosting solution is a reliable one with all the open doors for scalability and I think that I chose a good solution based on this statement! MaximumASP has proven its quality, reliability and scalability before.
Always Plan for Certain Things
One of my mistakes in this project was trusting on some uncertain things and moving on with them. Fortunately this didn’t affected the project very much and just had some small effect. One of these mistakes was having a very close plan for the launch regardless of many parameters that could delay it even for half a day!
That was my own mistake to fix the launch date while MaximumASP had told me that it may take up to N days to finish the work. At last, my hardware firewall was added in the initial launch date but it was too late.
The next time I need to trust on certain thing only.
Administration
Even though MaximumASP does the main job for administration of my servers, operating systems and databases but I still need to some works with them myself. This project was also a good experience with Windows administration for 64 bit platforms, Windows Server 2008, IIS 7.0 and SQL Server 2005.
I also learned many things about this and it was a good training for my Windows Server 2008 and IIS 7.0 administration/optimization.
Promotion
Here was the other field that I had some mistakes in planning and doing it! I could have a much better promotion plan for the launch before and after that but the delay in the launch didn’t allow me to achieve what I had in mind!
I also focused much on social bookmarking and thought they can help with the promotion but actually I didn’t get much attention for them to go up! I have to say that generally I had something different for the promotion but couldn’t achieve it.
However, I hope that I can do better in the future to promote Waegis.
Team Work Could Help Very Much
All in all, this project wasn’t an appropriate project for a single person. For this project I just got help for the design from Shaho and for some business works from Mehrdad and the rest was left to myself. There were many things to do for a single person. A few hours before the launch I was convinced that this project was suitable for a group of 2-3 developers with related skills.
But the point was that I couldn’t get any help on the project. It was difficult and time-consuming to teach my methods to someone else in order to help me. Moreover, I didn’t have any good choice who can cooperate on the project. This project required a really experienced developer familiar with some stuff like algorithms and mathematics at a good level but it was difficult to find a good candidate who can help.
By the way, I have launched Waegis and now it’s in a good position so for now my main job is to improve things and gain the best configuration for my rules. I have some plans to hire someone as a part time administrator to manage the monitoring and support stuff in order to improve the quality but this is just an initial plan for now.
[advertisement] Axosoft OnTime 2008 is four developer tools in one: bug tracking, project wiki, feature management, and help desk. It manages your development process so developers can focus on coding. Installed or Hosted – Free Single-user license -- Free 30-day team trial.
4 Comments : 07.13.08
Feedbacks
Pingback from Reflective Perspective - Chris Alcock » The Morning Brew #135
Pingback from Dew Drop - July 14, 2008 | Alvin Ashcraft's Morning Dew
General Lessons That I Learned From Waegis : Keyvan Nayyeri shares the lessons he learned from launching Waegis , a spam filter for web sites. Don't Mix Using Statements And Lambda Expressions : Jared Parsons explains why you do not want to mix using

#1
Unit-Testing und die Projektanforderungen
07.13.2008 @ 4:22 PM
Eben in dem Blog von Keyvan Nayyeri gelesen: Unit Testing is Not Always Good You may be interested to know that how much of unit testing is done for Waegis. Actually I started the development with heavy unit tests for almost everything. Waegis has a core