Archive

Archive for the ‘Consultancy’ Category

Jack Shirazi – Java Champion

January 17, 2012 Leave a comment

Jack Shirazi is the founder of fasterj.com which publishes the popular JavaPerformanceTuning.com website and newsletter; he’s also the author of the successful book “Java Performance Tuning” and is an elected Java Champion. Prior to his career in Java Performance, Jack trained in Theoretical Physics and was a published researcher in the field of protein structure prediction.

Title – What is your job title?

I don’t have a formal title, I can choose whatever title I want as I run my own business. I’m considered to be a Java Performance Expert. I’m also a Java Champion, which is a formal accolade; you have to be voted on to the Java Champion list by Oracle. There are a few hundred of us Java Champions globally.

What is your role about?

I can choose where to focus my skills, and that changes over time. For a while I focused on short-term consulting, which meant you have to use your contacts and your online presence to generate customers who want you to consult about various aspects of Java performance: it can be very low-level implementation, or it can be troubleshooting their current performance issues, or reviewing the design and architecture of their systems. For a while I focused on training, which means building your own training courses and advertising to gain customers and provide those courses.

Right now I’m focused on long-term consulting assignments, which means I will be at a customer site from half a year up to several years, working on the performance of a specific project and seeing it through to the deployed production system. That tends to involve a lot of performance monitoring of the system, a lot of performance testing (it’s part of non-functional testing that is increasingly recognised as crucial to the success of a project), and often tuning and troubleshooting. I also spend a proportion of my time researching and writing for my newsletter (published every month without fail for more than ten years) and occasionally writing for other publications.

What are the best/most positive parts of the job/industry?

I love the troubleshooting and tuning – you have challenging problems which need all your skills and experience to figure out and fix, and then the outcome of seeing things running smoother, faster, smaller and trouble-free after fixing is very gratifying. Most software developers seem to prefer developing greenfield projects (i.e. helping build a system from scratch), but I love being thrown into already existing projects and fixing other peoples code. It’s probably important to enjoy that aspect if you want to be a successful roving troubleshooter – fixing other people’s code is quite different from fixing your own and many people find it difficult to get into. You need to be quite non-judgemental, it doesn’t matter about the existing code quality or whether or not you feel it
lines up to good coding practices, your only target is to fix it so it achieves the performance targets, leaving maintainable code.

My favourite issue is a concurrency bug in using HashMap which randomly results in infinite loops occurring. Because almost all developers use HashMap as their default map, and it is used so extensively in code, it can easily get used in multi-threaded code by accident (it is not supposed be used like that, HashMap is not thread-safe, you should instead be using something like ConcurrentHashMap). When this happens, there is a small chance that the concurrency bug will get hit, and it’s not obvious when analysing what is happening that it has been hit. I’ve fixed more than one production system where they were previously having to bounce a service because of occasionally hitting this bug.

What are the negative parts to the job/industry?

I don’t like the constant language wars we have in our industry, I have an opinion that you should use whatever is appropriate for the job, and the almost religious devotion to a particular programming language that many in our industry have is quite annoying. I also don’t like the wasteful way we keep re-inventing every aspect of the software industry. For example remotely executing procedures across machines has been re-invented again and again (RPC, CORBA, HTTP, REST, and those are just the most popular, there are hundreds of less popular ‘standards’).

On the “running your own business” side, don’t underestimate the amount of effort you need to put into generating business, doing the admin, avoiding messes. The buck stops with you; you gain the rewards of your own work, but you also have to deal with every aspect of running a business and that takes a lot of effort.

What is the standard career path/qualifications?

You don’t get to be an ‘expert’ in anything without first becoming very competent at it. There are no formal qualifications – when I’ve interviewed for people to do similar work as I do, I don’t care about what qualifications they have, I’m looking for an in-depth understanding of how and why programs are behaving and misbehaving. You need to understand which tools let you see what is happening in a running program; how to interpret the output of those tools to infer what is happening and why, and then understand how to test changes to fix the issues you identify.

My experience is that developers who are considered competent by their peers, and who have
worked for a while in some specific area, have been highly interested in that area, and are willing to focus in that area, are then capable of becoming an ‘expert’ in that area. To extend that to become recognised as an expert by more than just your colleagues, you have to then disseminate your expertise to many organisations, possibly by publishing written work that people read, or some software that becomes widely used, or some techniques that are followed by many in the industry, etc.

What are the prospects?

If you become someone who is considered an expert in any niche IT area, you can usually choose what you want to do. You can focus on training, consultancy, working for an organisation or for yourself, speaking at conferences, these and more options are all open to you.

What was it like coming into the industry?

I didn’t realise at any stage of my career what I was moving into. Each time I shifted up my career path, I was open to new options, and willing to take the risk involved – sometimes monetary risk, sometimes the serious risk that you might dead-end by not having relevant or recent experience for your next role. It can be pretty scary to just stop money-earning work and spend time developing something different (as I have done several times such as when writing my book, when developing training courses, etc.). My advice – always be open to potential new things, investigate them when they crop up, and be prepared to be adaptable. Sooner or later options come your way, and it’s better
to have the choice to choose that option should you want. You’ll only have the choice if you are open and adaptable and prepared to change.

Do you have any thoughts on the future of your role/industry?

In the medium term, the JVM is a fantastic platform to be working on, whichever language you might be using. I use Java. I often look for new languages because Java is not the ‘perfect’ language, but I haven’t yet found one that is better. When one comes along that is better, I’ll move to that language – I’m pretty sure it will run on the JVM though.

Information technology hosts the professions of the future, the use of software is only going to increase for the whole of this century. More and more, the software engineer’s job will be to integrate technologies that are available, to produce the precise solution needed for a given task. So you’ll need to know what’s available and how to combine things so they work to your will. Most software engineering will become more like engineering – the things you build will be mostly other people’s components which you slot together and then maybe 10%-20% of your own bespoke code to transform the components to what you need.

What advice would you give someone entering your industry?

My advice to those entering is to try and get competent in programming and understand how to integrate resources on the internet into whatever you are doing.

Have you come across anything or anyone that has helped you move forward in the industry?

Be willing to help out others without expecting reward – eventually this will come back to help you out one way or another. And keep yourself up to date by continually reading about what is happening in the industry and in your area of work and skills – I.T. is a-fast moving continually evolving industry and it’s important to keep your skills updated or you fall behind and become less employable over time.

Edd Grant – Software Consultant

Edd Grant is a freelance Software Engineer who has been designing software professionally since 2003. He is passionate about designing great, maintainable, software in the simplest and clearest way possible and enjoys taking on new challenges in software development. He has a keen interest in the effectiveness of development teams and how different methodologies and processes can be leveraged to improve team effectiveness. He is not a fan of bureaucracy.

In his spare time Edd is almost always working on at least one personal project. He is an adamant supporter of open source software and open standards and has recently founded the ‘qunit-test-runner’ open source project. He is also co-founder of an exciting new project called ‘Stretchr’. Edd also has a blog which he sporadically updates when he gets the time (http://www.eddgrant.com/blog) and has a passion for mountain biking and tea.

Title – What is your job title?
I’m a Software Engineer – I design and build software. My clients call my job various things such as developer, technical lead, team leader, build manager, technical architect, software consultant etc. I prefer Software Engineer since it encompasses the narrower roles and more accurately explains what I do.

What is your role about?
It very much depends on what the client/ project need; at the core I design and build software but there is also a wealth of fascinating work away from the development itself such as planning and mentoring junior colleagues. This aspect of my job can be really rewarding as it allows me to use and develop my people/ soft skills as well as developing my technical expertise. I also believe that having a broader involvement in a project allows me to make better project related decisions by providing me with a more comprehensive exposure to different project aspects, which would usually not be visible through development alone. Hence I like to get involved in as many of the following aspects as possible, obviously as the client/ project requires:

  • Building the team : Interviewing and recruiting new team members as and when the team needs to grow. This provides an opportunity to build a team of people who will compliment each other’s skills and work well together.
  • Designing processes : Designing and refining the team’s development build and release processes, selecting appropriate and productive development and project management tools.
  • Planning the development : Turning business requirements in to chunks of technical work (user stories, use cases etc) and planning how this work will be distributed out across the team.
  • Technical design : Taking the requirements and turning them in to a coherent technical design. Evaluating the most appropriate technologies, designing what our system(s) will look like, both in architectural and lower level coding terms.
  • Mentoring : Day to day mentoring of developers, answering their questions, assisting them in their design and implementation work. Helping them stretch themselves and grow in the process. Reviewing work for both quality and appropriateness and ensuring it adheres to what we think we’re implementing (sanity checks!).
  • Writing the code : The really fun bit! Implementing the design, writing the tests, working both alone and alongside other developers in actually ‘building’ the system.
  • Dealing with problems : Being able to understand what’s really going on when things don’t behave as you’d expect them to and keeping a cool head when doing this in a time pressured environment. Being able to design and implement successful fixes to identified issues is also important.
  • Integration : Liaising with system owners when integrating systems in order to design interfaces between the 2 systems.

What are the best/most positive parts of the job/industry?

  • The excitement of being responsible for designing and building a system from scratch.
  • Getting to work with great teams of talented, passionate and driven people, making some great friends in the process!
  • The great feeling you get when you figure out a complicated problem, then the even better feeling when you identify the solution write the tests and prove your idea works.
  • Pushing and developing your own limits, both technical and personal terms.
  • Working on different projects with different clients is a great way of getting exposure to a wealth of different technologies, businesses, methodologies and people.
  • Getting involved in technical communities both online (e.g. JavaRanch/ StackOverflow) and in the real world (e.g. London Java Community/ Android Community). Meeting new people and sharing ideas together. This is something which simply does not exist in many other engineering related disciplines and it is a great benefit for the software community.
  • Attending interesting conferences, getting to speak and share your ideas in front of other developers.

What are the negative parts to the job/industry?

  • I believe keeping your skill set up to date is vital – technology moves very fast and clients often want skills in specific technologies. Sadly, some employers don’t place value in allowing staff time to develop their skills, so to excel as a software engineer this sometimes has to be done in your own personal time.
  • When stuff goes wrong: It doesn’t matter how meticulous you have been or whether it’s even code that you/ your team has written, At some point in your career something uber-critical will go wrong with a live system, senior people will get involved and someone may not treat you with an adequate level of professionalism. At this point it is your responsibility to remain calm, rise above it, give up your evening or weekend without fuss, assess the issues and fix the situation. Actually this can be an incredibly rewarding activity but it can also be a good test of someone’s mettle!
  • Family, friends and extended family wanting you to fix their computer every time it breaks

Career Path
What is the standard career path/qualifications?
A typical route would be to study a computing/software engineering/computer science degree, either at BSc or Masters level. Some degrees offer a year of industrial placement as part of the course – personally I think this is invaluable since it offers an opportunity to obtain real-world work experience and also to find out what you enjoy doing. Many employers also look favourably at candidates with placement experience over those without it, particularly in the current job market.

What are the prospects?
The prospects for a successful software engineers are exciting and varied. As time moves forward so does our dependency on computers, hence software engineers are in demand in all sorts of industries in both the private and public sectors. Work is often exciting and can reward creativity and achievement. Work is also generally well paid. One caveat I have seen is that some companies have a tendency to push their most talented technical people in to managerial roles irrespective of whether it’s appropriate for the individual or not, however this is not the case across the industry and many employers have dedicated technical capabilities right up to the most senior levels.

Reflection and The Future
What was it like coming into the industry?

Exciting! I wanted to learn, demonstrate my potential and get involved in creating software. What I really wanted was the opportunity to own a piece of development – something I could put all my effort and creativity in to and something I could take pride in. I don’t think that has changed much – I still have a passion for learning new things and I still find each piece of development just as exciting as the first one!

Do you have any thoughts on the future of your role/industry?
I hope that Java and the JVM are able to weather the storm that has recently beset them, they still remain fundamentally relevant to modern software development and have a near ubiquitous presence in software projects across the world. However I would like to see Java become more independent moving strongly toward existing in the open source space and with fewer ties to companies who have more proprietary interests at heart.
Whereas a few years ago we were seeing huge CPU clock speed rises, more recently we are seeing rises in the number of cores per chip. Those wanting to harness this power will need to be well versed in concurrent programming so I would imagine there will be a strong need for developers with these skills in the future.
We are also seeing an increase in the need for systems which scale to degrees which would not have been easy to achieve without very expensive infrastructure. With this in mind I believe that the way we store data will be challenged more widely in the future, with more systems making use of schema-less Databases over their traditional ‘relational’ counterparts. It seems that several cloud APIs are already beginning this movement which I believe will yield some very interesting projects in the future.

What advice would you give someone entering your industry?

  • Dabble: Start your own personal projects – learn new technologies, patterns, languages and stimulate your own creativity in the process. Try writing a blog or designing your own website. Don’t forget that anything you create which might be worth sharing can potentially be added to your CV to differentiate you from other candidates when applying for a job.
  • Open Source: Open source software is critically important in the larger world of software. Get involved in an open source project, meet the other project developers, contribute a bug fix or a feature and you’ll understand how important it is.
  • Get involved in your local technical communities; they’re a great way to meet people and to further enhance your skills.
  • Investigate: A good software engineer knows why something works, not just that it works. Don’t be afraid of investigating issues yourself but also of asking questions of your senior colleagues to enhance your own knowledge. Be scientific in your approach and prove your doubts empirically through testing.
  • Enjoy yourself: If you’re going to do anything for a number of years then you need to make sure you can enjoy yourself whilst doing it.

Have you come across anything or anyone that has helped you move forward in the industry?
I have found inspiration in several colleagues and mentors over the years. Through our ongoing interaction these people have nurtured and challenged my thoughts and ideas which has in turn inspired me to learn new things and develop my skills and ideas. This has been of great benefit to me so I try to continue the cycle wherever possible with my own colleagues and mentees.
Open source software inspires me. Open source stimulates healthy competition amongst projects, this leads to technological progressions which in turn lead to better software for the masses. Furthermore open source provides free access to software for those who can’t afford or do not wish to use the equivalent proprietary products. Personally I find the Ubuntu and Spring Frameworks open source projects particularly encouraging since they demonstrate models of good practice and both sustain successful businesses through which they deliver free and open software.
I am particularly inspired by Google’s efforts in pushing the adoption of open software and standards. Google is raising the availability and accessibility to data and software across the world, they also put a lot of money in to open source projects and support the software community to an extent that I seldom see elsewhere. I wish there were more companies who adopted this approach.

Sandro Mancuso – Senior Consultant

Sandro Mancuso has been working as a software developer since 1996 but started writing code for pure enjoyment way before that. Although he has worked for software houses and startups, he spent the majority of his career working for international consultancy companies where he had the opportunity to work on a great variety of projects and across many different industries. He has a BSc in Computer Science and a MSc in Distributed Objects. He is a Co-founder of the London Software Craftsmanship Community (LSCC).

Title – What is your job title?

Senior Consultant.

What is your role about?

My role is to work with clients to help them identify what they really need, advise them, provide options, and help them to achieve whatever they want to achieve in the most efficient way.

OK, I know. That was not very specific or helpful. This is because the role of a consultant can vary quite a lot. Different consultants may choose different career paths. Some follow a more business oriented career, advising clients on strategy, marketing, investment, finance, etc. Some follow a more process oriented career, emphasising project management, Agile Coaching, training, business analysis, requirements, etc. Others prefer a more technical career path, working more often as developers, technical architects and team leaders, mentoring, etc. In my case, I took the more technical path so normally I do what I like doing, that is writing code, regardless of my position in the project. Although I was a hands-on developer on all my assignments, many of them had elements of mentoring. Some times I also got involved in customised training courses for clients, like TDD, Agile, etc.

I work mainly in Agile Java projects. Technologies varies quite a lot since every now and again we are working for different clients, different industries and completely different systems. Sometimes clients already have something in place and the technology stack is already defined. In this case, we often use whatever they are using to start with but we always try to make suggestions if we see that other technologies or frameworks should be used instead. Some other projects, mainly greenfield ones, we generally have freedom to choose the technology stack we judge is the best for the problem.

What are the best/most positive parts of the job/industry?

In my view, the best thing about being a consultant is the amount of technologies and business domains that you are exposed to during your career. Because of the frequency that we change projects, we end up being exposed to a lot of interesting problems quite early in our careers, giving us a great understanding of many different software projects.

Networking is definitely another very positive aspect of being a consultant. As we move from project to project, client to client, we end up meeting a lot of people, in different organisations, what can be very useful as you progress in your career. The more people you work with or for, the more options you will have in the future.

Another important point is that, as a consultant, you need to be sellable. This may sound a bit negative, but if fact, what it means is that you need to be at the top of your game, knowing the latest technologies, methodologies and trends. The more you know, the easier it will be for a consultancy to place you in a project (sell you to a client). As the consultancy companies recognise that, in general they have different mechanisms (training, conferences, internal talks, events, etc) that you can take advantage of to improve your skills.

Because your peers are also moving from project to project and using different technologies in each project, it is amazing what you can learn from them. The variety of information shared among consultants about projects, businesses, methodologies, technologies, etc, is absolutely priceless. There is always someone doing something different somewhere.

What are the negative parts to the job/industry?

The main complain that consultants have is that in general you don’t have much saying on where you are going to be sent to. Once you decide you want to work for a consultancy company, you need to be aware that travelling is always a possibility. A few lucky consultants get to stay for a long time on projects close to their homes but in general this is not the case. If travelling or long commute is not an option for you, you really need to think hard before becoming a consultant. For those living in big cities, like London for example, in general this is not a big problem since the majority of the clients will be there anyway.

According to your level of seniority, years in the company and history of projects you delivered, you can refuse to go to some projects, in case you don’t like the project (less often) or if the commute is bad (more often). However, this is a card that needs to be played very wisely since you don’t get to play it more than once in a short period of time.

In some projects, you may be seen as an outsider by a few permanent employees. Some feel threatened by your the presence of a “consultant” there, since you may be “exposing” problems in the current process and software. It’s part of our job to deal with that and do whatever we can to be seen as another team member, a person that shares the same goals, and not an outsider.

Career Path

What is the standard career path/qualifications?

This varies quite a lot since consultancies may offer different type of services and they will need people that are more specialised in some areas than in others. Services offered may include software development, project management, training, coaching, business advise (strategy, finance, investment, etc), auditing, etc. Some consultancies tend to work more on the “consulting” side of it and tend to engage with clients at a more senior level (CEOs, CTOs, Directors, etc). Other consultancies are more focused on software delivery and tend to engage with clients at lower levels (directors, project managers, head of departments, etc). And, of course, some consultancies do a bit of both.

I’ll just talk about consultancies that focus more on software delivery since that’s my background.

My title is Senior Consultant but this is a reasonably vague title. Many consultancies, internally, distinguish their consultants by grades. Each grade has different ranges of salaries and responsibilities and we take on responsibilities on projects, in general, according to our grade.

For people aspiring a more technical career, in the entry levels you are expected to have a good knowledge of a programming language (in our case Java or .Net), most common frameworks, good understanding of Object-Oriented Programming and you would be working as a team member (developer). As you move up through the grades, you may take roles where you will be leading teams, be the technical architect, enterprise architect, Agile coach, etc. At the higher grades, besides all the technical knowledge you will also have some extra responsibilities like writing technical proposals, pre-sales, project inceptions, project management, manage clients expectation, etc. However, some consultants manage to reach the higher grades and remain totally hands on. That’s the path I’m following.

To be successful as a consultant, you need to be a well-rounded professional. Just knowing a programming language well is far from being enough to be a good consultant. You are expected to have knowledge in many different areas since you never know in which project you will end up and which position in the project you will have. And regardless what this project is, you need to be ready. Of course that we all know that is simply impossible to know everything that is out there but at least you need to show that you have the motivation and drive to learn whatever is thrown at you.

Besides the technical skills, another thing that is very important for a good consultant is soft skills, due to the amount of iteration with clients. I’m still working to improve mine.

What are the prospects?

Over the years, after many different projects, a consultant will have a good understanding of different types of software projects, technologies and also will have met a lot of people working for many different companies. This gives the consultant a good variety of options for the future.

In your experience are you aware of any differences your role has between industries/sectors?

In terms of clients we work for, yes, there are huge differences. Working for clients where software is not their core business (a big supermarket chain, a media company, etc) is totally different from working for clients where software is their core business or is an extremely important part of it (software products, internet companies, telcos, etc). There’s also the investment banks, financial companies, government, gambling, etc. Each client will demand a different type of service and a different type of expertise. Some clients will ask a consultancy to help creating the process, roles and responsibilities, requirements, definite the technology stack, etc. Full freedom. Other clients, which have a more mature software capability, may ask a consultancy to provide help with a very specific problem. Sometimes they just need some good developers for a limited period of time. They may want someone in there to coach and mentor their own developers. That means, the role can vary quite a lot, depending on the client.

Reflection and The Future

What was it like coming into the industry?

Before joining my first consultancy company, I had worked for two small software houses and I didn’t know much about it. Job was announced in one of the main Brazilian newspapers. 800+ developers applied and just 34 were hired after a month long selection process, 4 phases, including a two week training and group dynamics. My two previous companies combined had in total 10 people. This consultancy company had more than one thousand employees just in Sao Paulo. Many thousands around the world. I was completely lost and a bit scared by the size of the projects. Before I was writing software for local shops and businesses and there I was working in projects for multinational companies and governments. Complete shock. New technologies, new people, massive projects, multiple teams involved, clients speaking different languages, etc. After a few months, I was quite comfortable there and knew that I had made the right choice. I guess that I was very lucky there, firstly because I was assigned to work on a very technical and capable team and secondly because for two and a half years I had the best mentor (my boss) that I could ever have asked for.

However, joining a modern and more agile consultancy company today is totally different, much easier and less traumatic, even when working on big projects for big clients. In general you will be working in smaller teams (even on long term projects) and following agile methodologies. The technologies used are accessible to every one. When I started, back in the 90ies, we couldn’t just go to a website, download certain technologies and install on our PCs. Many of the technologies were proprietary. There’s absolutely nothing to fear about joining a consultancy company today and the world is a much better place now. :-)

Do you have any thoughts on the future of your role/industry?

I think that while there is a need for software development, consultancies and consultants will always have a place. However, the time where consultants were the only or the best specialists in the market are over. Due to the internet, open source projects, social networking, user groups, conferences, shared videos, podcasts, etc, any one, anywhere in the world, has access to the latest technology at the minute it was released. Consultants now, more than ever, need to be at the top of their game. Consultancy companies will need to do their best to get the best professionals in the market in order to survive. They will need, more than ever, to show to clients that they have the best people to work on their projects.

What advice would you give someone entering your industry?

The following advices are valid for any developer starting his or her career, regardless if he wants to be a consultant, the industry or career path he will choose:

- Firstly and most importantly, enjoy and be proud of what you do. Software development is a very cool profession. During your career, there will be many people out there that will be using and benefiting from stuff you created. And this is definitely really cool.

- If you think you studied hard during university, think again. You haven’t even started studying hard yet. Software development IS NOT a 9 to 5 profession. Be prepared to study hard, outside working hours, for the rest of your life.

- Always aim for jobs where you are going to learn more and not earn more. Preferable a place where you could have a good mentor. Be patient because money will come. If you are good and keep learning, you will have a very decent life throughout your career. If you just aim for the money instead of learning, you may get a good money now and be unemployable and out of the market in a few years time.

- Put a lot of effort on learning the fundamentals of software development instead of just learning the latest framework. If you have a good foundation, you will be able to learn any new technology much faster.

- Contribute to open source projects, learn from their code base and take the opportunity to communicate with other contributors.

- Always have a pet project (you may be excused if you are actively contributing to an open source project). Pet projects are great for you to try different technologies, techniques and methodologies. The cool thing about a pet project is that you have the power to do whatever you want, whenever you want, making it quite fun to work on. You don’t need to finish a pet project, in fact, you never will.

- Join you local user groups. The amount of stuff you learn and people you meet is just priceless.

Have you come across anything or anyone that has helped you move forward in the industry?

Definitely the mentor I had early on in my career. He was an exceptional developer and like a father for all of us in the team. He could hit us as hard as he wanted but no one else was allowed to do it. He shielded his team (us) from all the external heat and pressure. Quality was non-negotiable. He was a true believer that “how it’s done is as important as having it done“, phrase that I use as my blog’s subtitle. He believed in the apprenticeship model, although we’ve never used the term. It was there and then that I learned the true values of what today is called software craftsmanship. I worked for him and on that team for two and a half years and by far it was, if not the best, one of the best teams that I was part of. My mentor gave me everything I needed to become the professional I am today.

Twitter: @sandromancuso

blog: http://craftedsw.blogspot.com

LSCC: http://www.londonswcraft.com

Follow

Get every new post delivered to your Inbox.