We envisioned Ideyatech to be an agile, creative and pro-active software development company. We never intended to become like any other outsourcing company that provides cheap developers and cookie cutters. To differentiate our company from the rest, we redefined the developer titles and roles.

We classified our developers into three: Codester, Codesmith and Codemaster. However, it’s more than just the making new titles… we also redefined their roles.

Codester
A codester is a dynamic individual who has passion for abstract and logical reasoning. He is trained in the art of programming and is experienced in the Java language. He is resourceful and capable of learning new technologies on his own. Codester are people you can rely on to deliver codes that work according to specifications.

Codesmith
A codesmith crafts their codes with artistic mastery. He is capable of writing clean, well-designed codes. He is well-versed in the art of programming and ensures that his codes are optimized, refactored and properly unit-tested. Codesmiths are your best bet in doing complex and more advanced transactional web applications.

Codemaster
A codemaster is one of the chosen few who can design unique solutions to common complex problems. Unlike traditional developers, he thinks of solutions with a business sense. In addition, he is an expert in design patterns - not only in theory, but also in practice. Codemasters are the perfect partners for product development since they have the creative insight and technical proficiency in developing state-of-the-art applications.

Elegance in Approach

Another form of art in programming is the approach or architectural design. This topic requires strong technical background and experience, but still, designing your architecture requires artistic skills. There are many ways to skin a cat, so is there to design an architecture. Although design patterns help standardize approaches in software programming, decisions have to be made on which patterns to use, more so, to mix and match. Some patterns have similar purpose and overlaps, so choosing the best pattern requires some craftsmanship.

One major factor that affects architecture is the system requirements a.k.a. non-functional requirements, such as reliability, performance, maintainability and others. Having said that, I’m assuming that the functional requirements is already being taken care of and you are aware of what functionalities need to be supported… you’re now asking yourself how it should be supported.

Now, let’s go through some examples. When parsing a string for a certain pattern, do you use standard string operators (e.g. indexOf, substr) or regular expressions? Normally, you’d say regular expression will be easier - more readable and easier to maintain. However, there is a major performance degradation in regular expressions. So, if performance is important, you’d reconsider using indexOf. But then the maintaining such codes will be a nightmare. You might end up implementing your own parsing libraries using standard string operators - this will be a balanced between maintainability and performance. Such is a case of choosing the best approach, all solutions will perform the required functionality… but one will be better in some aspects than the other. Knowing which one works best requires some creativity and mastery. Thereby becoming your masterpiece.

There are so many scenarios that will let you weigh and analyze the different approaches, and there might be no perfect answer, only good answer. In any case, deriving the best possible approach requires some intuition, foresight and creativity. With so many factors to consider in choosing a design, you might as well leave it to your artistic skills to decide.

We had fun at J2EE training today, JM talked about YUI, prototype, Script.aculo.us and Dojo. These javascript toolkits surely know their way around the javascript quirks that’s been perstering lots of developers with browser incompatibilities. I agree that these toolkits help a lot in making more stable javascript codes.

Some pictures taken from the training:

Some of our observations are:

  1. Lots of these toolkits do the same functionality (e.g. String utilities, Ajax calls, Animations). Is there any standard body that is defining the new sets of javascript features? So we all live in one common world of javascript coding? Or is it a battle of the best platform?
  2. Seems like we’re going back to the world of client-server days. As rich-interface becomes popular, will thin-clients begin to disappear? And what’s with Flex, Silverlight, JavaFX?
  3. When prototype popularized Object-Oriented approach, they made a good point about the power of Javascript… but still, the flexibility of javascript codes make it difficult to standardize. It’s more of a developer’s conscious effort to create cleaner code.

One neat thing I learned about prototype is that it has a method “Try.these{…}” where all the statements within will be evaluated until one actually works. Sounds useful when making your javascript methods work across multiple browser.

Today is the first day of our J2EE training. Everybody’s excited to become the first batch of the 3 months extensive training program. The training will cover open-source Java frameworks such as Spring, Struts, Hibernate, iBatis, etc. We will also cover newer technologies such as YUI, DWR. It’s going to be a tough but fun training for everyone. At the end of this training, we’ll get everyone at speed with the latest technologies on Java.

I’m happy that everyone in the team share the same passion on software development. With a little kick here and there, I’m sure we’ll get the core team in sync towards building creative software applications.

To give a preview of what’s up with Day 1, here’s a podcast on the introductory session. Unfortunatey, the audio isn’t good as I’ve placed the Macbook at the end of the room. I’ll try my Jabra tomorrow, see how that goes…

Although, the workstation didn’t arrive, the trainees were quite busy setting up the network. :)

While I can describe ideyatech as a company by what we do, what we specialize and who among the Fortune 500 are our clients, it doesn’t give justice to the people who committed themselves and worked hard everyday to satisfy our clients and bring us to where we are now.

Instead, I’d like to describe ourselves on what we believe in and what we practice - our core values. Now, let me describe it one by one…

L eadership. We are the best in what we do. I always tell my team that “You have to believe that you can change the world!”. I know it sounds ambitious, but ambition is what drives people; it gives motivation for people to excel and become a leader in what we do. Moreover, we promote individual leadership; we know for a fact that every individual has their strengths and we provide the support needed to enhance them by making them acknowledge and focus their strengths. This way, we are able to get the best results from every team member.

Another thing I have to add is that we value collaboration and communication skills. Individual leadership needs to be supported by good communication in order to achieve teamwork and synergy.

E xecute. We deliver. We believe with the saying “A simple idea with execution is better than a brilliant idea with no execution”. While I like to get along with people who talks about ideas, I’d rather stick with the ones who executes them. Great ideas burn into ashes when they are poorly executed.

A key criteria to execution is to know your priorities. Our basic principle is to prioritize time, quality and budget; then negotiate the scope. In this era of Google and YouTube, nothing is more important than time and quality. Also, we prefer to simplify things, stick to the absolute essentials and make sure it works. Finally, everyone needs to be decisive and make timely decisions… because you know what!? - It’s not the end of the world.

A gility. We love change. Face it - “The only thing constant in this world is change. ” Even the best project manager cannot make a perfect project plan. There will be deviations and variations from plan during execution… but what makes a plan successful is its ability to adapt to change (and what makes us better individuals is to accept change). A few implementations points to be agile:

  • Release early, get feedback and improve…
  • Work in iterations; prepare mockups.
  • Reduce the cost of change.

P assion. We believe and love what we do. One thing I always ask applicants - “What is your passion? “, “What do you like to do? “. If it takes them more than 7 seconds to respond, chances are - they don’t know the answer and is making it up. We believe that people who has passion in their work has greater chance to succeed. Between someone who is very knowledgeable, and someone who is very passionate - we usually go with passion. Knowledge can be learned with passion but passion can’t be learned with knowledge.

While I can talk for an hour more about this topic, I’d rather simply things - if your work doesn’t excite you, something is wrong and you’ll probably need soul-searching. :)

To end, this is how we perform great LEAP s…

In case you didn’t notice, our core values form the word LEAP when taking the first character of each of the values.

It’s been quite a personal struggle for me to choose between freedom against security. Freedom pushes me hard to be creative and explore the unknown but the risk is high. If none of the creativity works, failure is immediate. On the other hand, security reduces risk of failure as financial income is consistent. I’ve tried going back to corporate world for the past 3 months with a good paycheck… but cannot find the satisfaction in the things I do.

This experience adds maturity as I begin to understand that satisfaction is not measured by amount of $$$ earned rather by personal achievements and accomplishments. This is the first time that I have to give-up my financial security in exchange to following my passion.

Looking back to where I started, it was passion that pushed me to start an IT career, it was passion that gave me career promotion, and now it is passion that makes me go back to continue what I envisioned - my own IT company.

Let me conclude by saying that ideyatech will be back on track and will continue to build quality software and deliver world-class services.