Showing posts with label Career. Show all posts
Showing posts with label Career. Show all posts

Wednesday, October 5, 2011

Few good links on Resume & Career

IT Professional's Resume Makeover Guide

Ref : http://whitepapers.zdnet.com/abstract.aspx?docid=3499799 is excellent pdf which gives useful tips on writing effective resume.

Good ReaDs:

  1. Careers are like nature: Only the fittest survive Ref: http://www.techrepublic.com/blog/tech-manager/careers-are-like-nature-only-the-fittest-survive/6722?tag=rbxccnbtr1
  2. Three ways to turbo-charge your tech career Ref: http://www.techrepublic.com/blog/career/three-ways-to-turbo-charge-your-tech-career/344
  3. Nine tips for getting hired Ref : http://www.techrepublic.com/blog/career/nine-tips-for-getting-hired/3135 
  4. Know when it's time to change jobs Ref http://www.techrepublic.com/blog/career/know-when-its-time-to-change-jobs/3062
If you have more links which you think are useful , do post them here for others to benefit...

Tuesday, August 24, 2010

How did I made entry into architecture world from designing

I remember in early days when I had been doing lot of technical projects. I had been successfully leading and designing the complex problems which lead me to believe I was now ready for the architect position.

However, I was still at the designer and tech lead stage and did not know how to break into the architecture world. I did not know how to prepare for the architecture position. I did not have people around me to guide me. Architecture was still a new position and not much literature was available for it. Books gave a little theorectical knowledge of architecture.

With no other options, I started to apply for the architect position. I prepared some based on the job descritions. And then armed by all the knowledge I had of technical designing a project and OOP I went through many interviews which were largely unsuccessful because of my lack of deep knowledge in that area.  In the interview I was asked 50% design questions (some of which I could answer) and 50% architect questions. Design questions were to judge how well do I know my subject and how well I have been at things I say have been doing.

During firsts few of my interviews:

I was asked about the architecture styles and pattern.

I could answer few like Client-Server, Layered and PAC (Pseudo Abstraction Control) but did know about the architecture patterns like blackboard, pipe and filter etc. So I could not answer these questions satisfactorily. Here I learnt my first lesson that you need to know you subject before going for an interview.

I could solve the complex problems by my persistence and problem-solving skill, but these skills are not demonstrable in an interview unless interviewer himslef takes a special interest in forming questions to judge it. It was expected from me that I should know architecture pattern and styles otherwise I would not know there are existing styles and pattern which can solve lot of common problems.

In current context, I would be advising people to learn about the SOA, integration patterns, Architecture patterns like blackboard, pipe-filter etc.

I was asked how do I decide on a design of a class.

I started with my usual gyan of the class should be maintainable, easy to use, flexible etc. etc. But, I could not answer logical questions like "what do I mean by design easy to use class?". 

All this is part of the five basic patterns of OOP and Design which we usually tend to forget while designing the classes.
SOLID (Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion) http://en.wikipedia.org/wiki/Solid_(object-oriented_design)  by Robert Martin.

We may be using these principle knowingly and unknowingly during design but it should be a habit to apply these principles while deciding on the class design.
Lot of tools automate these by refactoing the classes. So we apply these using a tool without knowing the actual intent or what problem did the tool solve for me.

When I am learning something I make a practice of not using the design tools (like eclipse provides) but code moslty using the notepad so that I am aware of all the complexity by manually adding each imports and class method and doing the changes. However, duing the project I use the Visual Desing tool becuase there the motive is to attain the high productivity.
One of the examples to explain the use of principle would be asking a questions like:
Which type of Robot would a user prefer?
A) Robot which comes with a single command like cookPasta?
B) Robot which comes with many basic command like “put pan on fire”, “pour water in pan”, “put pasta in pan”, “add ingredient” etc. And these command can be used to create a bigger command cookPasta?

I think robot (B) is very flexible because I could make him cook pasta, cook rice, cook pulse.
However, Robot (A) is very easy to use because user can give a single command to cookPasta and does not have to know insider methods and other complexity. This also explains about why we should use access scope(public,private,...) of methods .

Hence, Robot (A) is preffered by the users because of ease of use.

I was asked what I do for performance.

I had not done much work on performance. I have been only coding and designing keeping in mind the performance, best practices. So I answered with the caching, clustering stuff but could give the satisfactory answers to the actual measure of the performance like 999 (4 9s), 9999 (5 9s). Or how do I measure and  make changes in my code for giving a required performance.
Clustering is not just  a deployment/adminstration domain but require a careful desiging of the classes and strategy for achieving the horizontal scaling and coding changes for deployment for avoiding SPOF (single point of failure).

This gave me an awareness of the realm of performance, capacity planning stuff which I had been ignoring till now. I went on to understand about little’s law, capacity planning using for response time, concurrent users, transaction and about performance testing. A very complex and challenging area for to master….

So my entry into architectural world from designing world was very gradual. It actually pays to take on interviews so as to understand what is expected out a person in architecture and what is happening around in the world even if we are not looking for a job.

Interview actually leads to a meaningful learning and discussion (free of cost) with a master of those fields who actually guide us into our choice of path. He asks us relevant questions about that area which helps us to know what is expected out of an architect and what kind of questions to prepare for. Provided we come out of an interview with well aware of our weaknesses and with broad scope of what my target of next learning should be.

Friday, July 30, 2010

Few useful resources/links on web on aspiring Architects

This blog is in reply for all the mails I get for links and reading material for an aspiring architect.
Architecting has several aspects:

  • Modeling (How to create Architecture document, describe various views shown above)
                 - 4+1 Rational View with 5 views is most common http://www.cs.ubc.ca/~gregor/teaching/papers/4+1view-architecture.pdf
                 -Visual Architecting  http://www.bredemeyer.com/pdf_files/WhitePapers/VisualArchitectingProcess.PDF

Architect technical demonstrates solves how significant use-cases are being handled by his architecture. (details in text below)

    • This is very specific to problems at hand. Also depends on whether you are custom building it or using a product. If product, then you need to show how it is integrated.

    • Integration Architecture: how would system integrate with applications or packages being selected for usage.

    • Information Architecture: how is the screen or user interface desinged and navigated to allow access to the system 

  • End-2-End System flow

    • Logical Architecture, Layer architecture (Frameworks at each tier is shown and explained and their integration).\

    • Component Architecture; significant components and their relationships.

  • Messaging Architecture: if the system is based on the messages.

  • Service Architecture: if the system is based on SOA paradigmn.

  • Non-Functional Requirements

    • Performance - Caching, Capacity planning

    • Scalability - clustering, Server Farms …

    • Security – Single Sign-on, Windows Security Architecture, Windows Authentication, Kerboros, Active Directory …
Microsoft Application Architecture Guide at msdn site: http://msdn.microsoft.com/en-us/library/dd673617.aspx  is a very good resource which talks on all these things:

- Principles of architecture
- Patterns and styles
- Guideline for layers and components
- Quality Attributes
- Crosscutting concerns
etc.


 Some other architecture sites from Microsoft on internet:
A very good source of learning is learning from the architecture of other applications ‘architectures and patterns (like open source or code in codeplex) .
Copying and understanding from successful applications’ architecture is best form of learning. These applications may already have some concerns in the system at hand. So understand how have they solved their problems and apply them intelligently.
Then there are other sites based on the some specific area of architecting:

  • Sharepoint http://msdn.microsoft.com/en-us/library/bb892188(v=office.12).aspx

  • Biztalk (SOA) http://msdn.microsoft.com/en-us/library/aa562161(v=BTS.10).aspx

  • Cloud Architecture (Azure) http://wag.codeplex.com/
Some sites describing architecture in general on main techniques of Architecture Modeling:
If somebody searches on google there would ample material for learning architecture but becoming architect is gradual process ...
Developer - > Senior Developer -> Module Designer -> Project Designer-> Architect
All the roles above are problem solvers. Only the problem get complex in size and scale as we move left to right…
However, there is no time limit for any of these roles because someone who have done a very complex project in one role and is mature can become architect faster than a person who is doing routine technical jobs and does not get involved in complex technical scenario.
Developer
Developer's focus is only his particular program. Senior Developer looks at more complex and larger programs and module. He may only focus on back-end or front-end program. Like writing a class function which takes the inputs like Account# and gives back the interest calculated on his account. So developer would write a program which reads in account balance and calculate the interest (monthly/yearly) based on applicable interest method. For this he makes database calls, does calculations and returns the interest.
Designer
Designer starts designing the module/system, he is looking at much higher level than programmer. He is looking at how program written by developers will interact with other programs to provide a functionality end-2-end. He may be designing the entire module of interest system.
His work starts much earlier than developer because he designs the entire module and envisions the required classes and functions which will make the interest module functioning. It is his inputs which are used by the developer for developing the program.
Designer does more abstract thinking. He thinks at the module level. He does not think about the java programming of multiplication, database calls to calculate interest. However, he does design and check feasibility and availability of required data.
He envisions the various classes and entities like Accounts, Account Types, Balances (Monthly Avg. Balance, Interest Methods etc.) , Interest Method, Interest Accrual, Interest Application ….
Architect
Architect does works with much further abstraction. He thinks at much higher level. His work starts earlier than designer because he is checking the feasibility of the entire system. He tries to think of all the risks and technical aspect of architectural significance. He finds and articulates solution of all these aspect of significance.
What is significant depends on what has not been tested or not know. Reading from a file is not of significance because any java programmer can do it and has widely known solution. But reading from file which is located in “cloud or hosted in remotely” with some aspect of synchronization and concurrency becomes significant, if programmer does not know about it. So architect would take this as significant use case and provide solution for it in his architecture document.
Architecture models architecture from all views (Developer, Designer, Functional, Deployment, and Process) because his document is guiding framework for all these people.
Architect by providing solution for significant technical aspect convinces development team of the feasibility of his solution. He gives confidence to the development team that there is no roadblock at later stage. He provides guidance framework for designers by providing the significant component in the system and their relationship. He also provide end-2-end from user-interface to back-end system functioning and data flow.
Architecture document’s Deployment diagram advices the system administrator about the hardware and server configuration. Project Manager can find the entire system complexity and size from the architecture document.
Functional people can see how their significant use cases are being fulfilled and are convinced.
So, all risks are mitigated and presented and discussed to the project team for development. The risks which are mitigated are validated by small POCs.

Wednesday, July 28, 2010

Interview Process - scoring sheet with weightage of many areas

Interview Process continued from my earlier posting ...

This blog is in response to the questions from people asking questions like:
• I answered all questions but why did I not got selected?
• I fared well in technical but still could not succeed?
• I was asked managerial questions not related to technical?

Let me explain what happens in a normal interview happens to better understand what is happening and why?

Every interviewer is usually given sheet which he uses for interviewing. This sheet is usually like a checklist which indicates the areas in which the candidates has to be evaluated and scored. This checklist is according to the job description or role for which company is looking for recruiting.

Every area also is given a weight age. This weight-age is according to the role again. Some things like fresher may have higher weight-age in syntaxes and knowledge of language/platform and learning abilities whereas senior developer moving into leader role may have higher weight-age for management, version management, estimation, tools, testing etc.

Soft Skills are also very important. Attitude, Communication Skills, Learning abilities is highly important. So if candidate does not know anything because he has not worked in it but shows a general aptitude that he is fast learner will be high on selection list….


Let me explain more with a fictitious example of a scoring sheet:
Interviewer usually forms his own set of questions to judge each area…

I have put the weight-age at main area level for simplicity but it could be sub-area level. This weight-age is different for different roles and projects etc. Like a project may need more of web programming or some project may need more of Windows programming accordingly the weight-age will get adjusted.

Like for learning ability can be judged by how good a candidate is in taking hints and analyzes a scenarios.

This is just a rough example to give idea of how could a person answering everything right in .Net area gets still rejected. It is also to show that demonstration of soft skills and learning ability can be very important…

So you see Candidate A even with lower technical rating got selected with 900 over 810 because of better rating in other areas and scored over Candidate B.

Friday, July 23, 2010

What should I learn now to further my career, Java or .Net? What should be my next steps for career?

This blog is in response to people asking me advice on how to grow in their career.
People ask me should I learn Java or .Net or some other language to get more salary.

In Software Industry to grow you must grow in roles. Technologies keeps coming and going. People should grow in capabilities.

“A person wanting a Carpenter career should strive to become a good Carpenter. His aim should not be to to use a hammer or saw. Hammers and Saws are just tools. In future they may get replaced Electric hammer or better tools. He should strive to making better furniture etc. using these tools or any other tools.”

To grow in a technical line …

Similarly, in software industry .Net and Java are tools for making software products. People should strive to become a better programmer. He should know how to use those tools for building better products. So his concentration should be on learning how to make good software products.

Once a person knows how to make a good product using one tool, then it is all the same. Tools of the trades are in software product is

• Logical Thinking
• Software paradigm like Object Oriented Programming
• Best practices for efficient coding (comments)
• Test Driven Development
• Configuration Management; version management
• Testing
• Data Structures
• Web programming & Client/Server programming …
• …

They are things to learn. Language just brings in syntax and method for making those constructs and concepts. After you have learnt them; they are mostly the same in all languages.

So to grow start to become a better developer --> better module designer --> better system designer --> better product architect --> Enterprise Architect …

Now, you can also grow in a Managerial line…

You strive to manage the project better. You learn to manage small project in dimension of time, people and effort. Tools of the trades are

• Estimation techniques for calculating effort (using FPA, using UseCase Points, WBA …)
• Scheduling the task
• Resource loading (assigning the people to get the work done in minimum time)
• Critical Path Method
• Working in/with Team
• Soft Techniques like Managing Client, Managing team, Writing Mails
• Risk Management
• …

Once you have done this in MS Project you can do it any other product…

Other soft skills come with experience and on the job. You grow in scale from small team/modules to large groups/projects.

So to grow start to become a better team member --> better supervisor --> better module lead --> better project leader --> project manager --> Account manager --> CEO…

People should strive to grow in role (in Scale and in Quality) of making a better product; rest is tools helping you to do your role better.

You will be able to use those tools better if you know how to apply it…

You can use the same with learning new areas like Business Intelligence, Data Warehouse, Enterprise Content Management ....

Here also, you must learn main concepts ... and try to apply using tools relevant. You can replace tools once you have learned the fundamentals.
Here again growth will in scale and growth of complexity.
Like in BI,   growth will be 
                   
Developer of small BI implemtations --> Desinging slightly larger complexity --> Architecting very large complexity -->   Architecting for Enterprises -->

Sunday, March 28, 2010

How to get Interview Calls

This blog is in response to questions like:
- I am fresher and I have applied at so many places but I am not getting any calls?
- I have been away from industry now I want to enter but not getting any calls?
- I used to work as senior person but after layoff I am no longer getting similar positions?
This is typical questions asked to me at our career counselling site. I will try to answer this question in this blog.

Interview/Recruiting is a process for getting people recruited for specific skills in the company. Lets understand the interview process to understand the how it works.

The Process

Company gets a project which requires specific skills. Project Manager tries to find people with those skills inside the company first. After he is unable to the suitable person from inside company he decides to get the people from outside. He raises resource requisition to HR. In this requition he typically mentions skill required like .Net, C#, Frameworks like openMVC, Nunit, NHibernate, Transaction management ADO.net, tools like studio ...

This is typical copy of the project technical requirments as mentioned by sdome of his team members or as per RFP response. Idea is to get people who have maximum skill matching with skills required and who can be productive from the day one. The HR forwards it as it to the recruitment agency.

Recruitment agency does not understand most of the things written there and start the searching in job portal using those keyworks. Most of the portals allow the keyword search at their site. The search is not very intelligent. The search will be made with exactly same words. If you are searching for .Net you may miss words like DotNet, C#, Vb.NEt, CSharp, etc. though may mean the same things.

The Preparations

So first step is to include in your resume words with all associated meanings so that your resume does not get filtered in this automatic search. More words it matches with in your more chances are that your resume wil be in the shortlisting. So your resume should have words like .Net, NUnit, NHibernate...

So if you are a fresher or away from industry for long then you need to survey industry and look at current available job descriptions. You must find out what is being demanded acrosss industry now. Learn and master it with tutorials, handon pratice. Includes it as project work in your resume, include it most popular "keyword" so you resume gets horlisted. more keyword your resume it matches with more it is short listed. Also include common and de-facto standard tools like Microsoft Studio... .

Idea is to indicate that you have not worked on it but in case they do not get people with exact matching skill which is usually the case; you are next best option. You have already learnt tricks of the trade at your time and could become productive from day one given proper guidance.


If you are already in job and wants to change into other field, you resume should again include words other fields common keywords and terminology. For that you may need to tweak your CV with changing the project description which highlights how you have used the other field technology. Or show how could use the other technology to give a prespective that using the current experience how you have extra advantage. Also learn and master new technology and include experimental projects which shows your awareness of new technology.

Again, Idea is to indicate that you have not worked on it but in case they do not get people with exact matching skill which is usually the case; you are next best option. You have already learnt tricks of the trade at your time and could become productive from day one given proper guidance. In fact you could indicate you also have more skills and you already have experience of other valuable things which would add advantage to project and is better than other person.

In case you are already working as Senior person you need to objectively look at Job Descriptions and figure out what you what to do. Change Resume to reflect how you are suitable for that job. Postion and Job Designation are immaterial because every company has its own hierarchy and job designation.

Banking industry has starting point as Vice Presient, after 3 years people become Director or Asscoiate Director.So it is job description not job designation that matters.

Second Step:

Once you are short listed, next step is you get call from Consultants. You need to be very frank with Consultant about what you want, salary range, etc.

Only after you are convinced about the compnay and job do you move to next step of Interviewing.

Get information about what is being asked becuase consultant are also broker between you and company, it is in their advantage to get you selected so taht they can earn thier money of commission.

Fresher need to be more humble as they interact with Consultsant. They also need to develop a relation with Consultants becuase consultants have information which companies are hiring freshers, and which are willing to take in freshers.

Third Step is Interview itself. 
Be prepared to know what you have written in your resume. Basckup it up with knowledge. Go into depths and prepare. Try to handon to understand more subtle things. Also know more and advance things. Because in interview people may ask anything which you may think is irrelevant but indicates your mastery and awareness.

More on this in another post.





Tuesday, February 16, 2010

--Role of an Architect--

As explained in the earlier blogs, Architect's main role is involve inthe earlier stages of the project.

RFP Stage-
During the RFP stage, architect needs to works closely with the proposal making team. He needs to develop the proposed architecture of the system.
This proposed architecture is not the detailed architecture but it is more of strategy that acts just as guidance which is accompanied with the estimations and cost of the project.

It helps in selling to the client how will system be made. On what principles will architecture be based. It also
enables client to see how architect and team understand his problem and domain and how they want to resolve it.

It tries to sell to the customer what he is getting for depicted cost.
It shows how is some crtical scenario be met and how is NFRs be met to give comfort to the customer that
"Yes, system we make will be bale to handle 50000 concurrent users".
"Yes, system will be extendable becuause we propose to build it using best practices like SOA, Layered architecture"
"Yes, system will be be built on framework like struts etc."

To support this "yeses" there is some convicing arcguements like capacity planning which arrives at proposed deployment configuration which will meet 50000 users.


In absence of an architecture, customer only nows that his functional requirments will be some how fulfiled but how he does not know how?...

After Project is started---

SDLC

All the activities of a SDLC has been designed to remove more and more risks in the earlier stages of the project. More the risk of discovering any thing in the later stages of the project mre will the problem of it being getting resolved.
Hence, Architect needs to be invloved in the ealirer stages of the project.

Requirment Phase-

While functional team is gathering functional requirments. Architect start gathering the non-functional, non-implicit requirments and system constraint under which the system be built.He starts with most complex of use cases and tries to build a system which will satisfy that use case. In process he also lists the architecture principle on which his system will be based upon. This principles could be SOA principle, layered architecture.

He also gives arguement how each selected principle will effect the architecture and provide the necessary value-add.He also develop end-to-end components flow which will solve the chosen use-case.
Once, the system components are fixed and explained how are they solving a use-case. He explains how simlar other use cases will be satisfied by the proposed architecture.

This entire process is supported by "4+1" view Architecture modeling technique.

4+1 is a view model designed by Philippe Kruchten for "describing the architecture of software-intensive systems, based on the use of multiple, concurrent views", already explained more in previous blog.

These view are for different stakeholders of the system. Architecture by using these views explains and convinces each stakeholder that his proposed architecture meets the all aspect of the system.

So, architecture using all these views and other aspects of system convinces all the stakeholders(Developer, Project Manager, Customer and Designer) that his architecture is meeting their reqirment and how. Once, all these stakeholders are convinced they may have one-2-one with the architect for detailed discussion.

Architecture may explain to designer how to go-on with his job of expanding each module/component and design it.
He will explain to developer the how to use best-practices and framework for development.
Customers are convinced how the system is meeting their requirments
System administrator understands how the architecture(deployment) of the software is done and how do these system talk to each other.

Non functional requirements are also incorporated in the system and explained how are they being met. Exmaple using load balancer, clustering, design techniques like distributed desing.

Security is also incorporated by means of hardware and software components.

After the architecture is accepted by all stakeholders and KT is done. Architect work is more of monitroing and auditing.



Monday, February 8, 2010

Career path for an Architect

This Blog is in reply to few questions I have been asked like:
I have been working for 7 years in IT. I would like to have a career in Software Architecting, can you please guide me some course or study-material ?

To train yourself as an architect is an gradual process.


Developer -> Design (LLD > HLD) -> Architect

As architect, you start looking the complex areas of the project development. You are desinging for all the aspects i.e. for all stakeholders of the project.4+1 view is common known modeling techinque for architecture modeling.
Here you make sure that all 5 views are satisfied by your architecture. i.e

4+1 Views
Use-Case or Scenario View -> Functional View (here you take few complex use-case and show how does your architecture reliaze them)
Development View - is programmer's presepective. Here you describes the major components developer will have to be built.
Logical View -> how is your architecture layered and what logical blocks it have i.e Presentation, business layers, DAL etc. to meet the functionality. It also depicts how the functional components arranged in which layer.
Physical View or deplyment View --> how is component deployed. This system engineer point of view. Web Server, DB server etc.
Process View -> is for dynamic aspect of the system. How do various process communicate.

NFRs
 Besides these 5 views, there are NFR non-functional requirements your architecture have to meet.You have to present and convince how your architecture meets these non-functional requirments.
Like , Scalability , availability and performance by clusters, caching , etc.Good practices, layered architecture, good desing patterns etc.Your architecture design must convince your stakeholders that your design can meet all the system constraints, and requirments. There are various sites which help in learning how to model your architecture, but actual architeture building comes by expereince and looking at existing architectures, Design patterns, Architecture Patterns like SOA etc.

Architecture from 100ft
Architecture of any product is looking at it from 100ft high view. Lots of the things are abstracted in architecture.Experince matters a lot in career a architect. But it also matters whether you haveing been doing routine stuff like crud operations in all your projects; then you need more complex project to execute. I hope in your VB/SQL you have done complex scenarios of tier architecture , distributed architecture.


Whether you had chance to work where you had to think of performance , caching , pooling? Architecture not very different from desing; but here you abstract uot most of the routine stuff and build on things which you think more attention and can make or break application. You think all aspects. You may have reqt. for performance, maintainance, monitoring , even reqt. like data replication.

Then you design your archietcture for these features . Replication may be new thing hence your architecture may need to satisfy the data replication reqt. Some of the points may be contradictory. Then you have decide on trade-off ; get approval on from stakeholders. Patterns , architectures of other application(Copy is best form of learning)

It may happen that to solve your problem there are popular architectures already available. Here comes in patterns and practices.


Architecture cannot be decoupled from cost and effort
It is easy to give a Best, Scalable, Highly secured Architectrure with non-ending budget; Skill is in giving it at lowest cost.
However, you cannot give customer Mercedes when he is only paying for Maruti.In India, IT Industry is still trying to define the role of an architect. How is he different from earler techincal people? Because industry thinks of him as good techincal person. whose responsilbilty is to handle all techincal stuff. As per business requirment and time available; it usually happens archirtect keeps handling techincal stuff and also keep managing technical people solving their problems because customers usually are not ready to pay or do not budget for archiecture feature, they usually have short term vision.

Architecture is not static but evolves
Architecture is more from point of view of the vision envisioned for the product, how is the roadmap envisioned for it. So that you can built on basic archietcure and then let it evolve.

[Architectures are not built in a day but get evolve]. People make mistakes of trying to build rome in a day.