Need help making a decision for a php developer role

Guys, what do I do??
I’m in a job now that I do enjoy, but I don’t feel I’m getting the right experience.

I’m a php developer, but I also have skills in Flash, Flash Media Server, Front-End development. My current role includes a variety of projects that utilise all these skills, which I do enjoy, but I’m concerned that there is no formal structure in place IE. no design cycle, testing etc.
Basically there is no formality at all and this is something that I’m lacking in my experience and it concerns me.

I feel in order to improve as a developer, I need to move on to a company where I can gain the experience I need.

I’ve been offered a position at a software house for the same salary I’m on now and they are willing to train me on the areas I need to improve on, and I think It could help me gain the experience I need.

Having told my current company of the news, they have just offered me a pay rise and a chance to organize some training in order to implement a structure which is clearly needed. With this comes a new role of responibility, but I’m worried If I accept this promotion I will regret taking the other position.

What should I do agghhh!!!

I suppose the question is also this, can you simply train up on the whole development life cycle, or this something you can only pick up from being in job with that kind of structure in place??

Crabby80

There are many aspect that make up this decision like:

  1. How do you like your current company?
  2. How much room to grow is there with your current company versus the new company?
  3. How much do you know about the new company. Do you know any developer at the new company. Have they described their process to you and you are sure their process is what you want/need to learn?

You have a unique opportunity here that does not come very often - a chance to get a process within a company started right! It is really a double edge sword though, as it depends on how committed and the breadth they your current company will allow. If they are committed then I see this being great for you:

  1. You already know the stakeholders in you current company.
  2. As the current company is largely absent of process (re development) then they will defer to your lead on how and what should be done.
  3. The process can grow at your speed; they don’t have any previous experience at this so if you manage this well you will be able to take steps with them and yourself that make sense, after all you will be driving this.

I guess that you need to decide if you want to take on this task, but it seems to coincide with your objective to learn; and defining a process you will learn and grow.

Hope this helps.

Regards,
Steve

Hi ServerStorm

Thank you for your reply, your response helps a lot.

My initial instinct was too take the new job as I think it’s going to be very beneficial for my personal technical development and it does seem like a good company.

But, as you mentioned, helping to build a technial department up from scratch essentially, now that would be great experience!

My only concerns are;

  • 6 months down the road, nothing has changed and I regret my decision.
  • Do I have or is it possible to learn the skills in order to achieve something like this, having not come from a software development background?

Hmmmm maybe I’m more confused now 8>)

Hi crabby80,

Your faith in your own ability to learn, motivate others, and drive change will tell you whether or not you are up to this.

My personal belief is that it better for me to be in as much control over the way in which I work as possible. After all, I spend a good majority of my waking hours at work, so more of my work needs to fit my tendencies, work methods, business ethics, and desired ways of developing (process).

It is likely easier to join the new company and be taught their way; however you live with, down the road, the possibility that it does not fit you more than less and this could be hard.

Also lets say you do a great job driving the creating of more processes that support better applications, less bugs, happier clients, more controlled quotes, versioning, and team integration. Then your value in the company grows. It seems that offering you a raise already that they think highly to retain you, so it follows that adding this kind of value not only helps your personal development but also your value in the company. This can lead to a point in the future where they, or you may negotiate a bigger role and/or greater salary based on this.

I think that you can already see, that if it was me, I would stay and build the way.

Regards,
Steve

Thank you once again for your response, some very valid points there.

Going back to my point on Software Design Cycle, is this something that you can actually learn to implement via courses, training etc.

Hi crabby80:

You need to first decide what type of software process you want to implement. Nowadays Agile software practices are followed like REST, Extreme Programming, Test Driven Development,… Part of this will depend if you are working with a team of developers or you are the first with possibly more to come.

You should also decide what type of software control that you want to use; GIT and Mercurial are both popular and easy to use software control platforms. If you plan to do any windows development than GIT is probably not the right choice.

Once you decide these things (where there is a lot of good information on the web). You then can use a combination of Googling, and forums like Sitepoint to flush out, ask about, and further refine/define your software cycle.

A good software cycle does not necessarily mean tonnes of up-front planning, UML diagraming, and Black, White, and Unit Testing. It can be as easy as doing an appropriate number of Use Cases (that fit each given application) and then use Test Driven Development to begin building up the Use Cases. Every once in a while you might need to diagram something difficult or do a sequence diagram.

Try to build your process to embrace change (as much as possible), if done well, this will help you (your team) from not having to undo, redo entire sections of code for changes but to more easily incorporate them into your applications. Again, agile software practices will help with this goal.

Avoid building process that force every project to work in a step by step manner, as each project will have its own needs. This again is helped using agile software practices.

You can buy many books and find good articles on the Web. For software patterns you want to go to http://martinfowler.com/ Martin Fowler who is the guru of patterns and his java examples are fairly simple to transfer to your language. For extreme programming start here http://www.extremeprogramming.org/. One good book that helps introduce you to Test Driven Development is 'php|architect’s Guide to PHP Design Patterns by Jason E. Sweat (a guy that helps people on this forum regularly) ISBN#0-9735898-2-5. For REST start here http://en.wikipedia.org/wiki/Representational_State_Transfer. Google Agile and you can browse and find your preferred reads.

Don’t forget to get you software control in place for both your front and back end - Please don’t consider Microsoft V.S.S. as it is a killer on multimedia Flash objects.

Hope this helps.
Regards,
Steve

Thank you once again for your reply, you have been very helpful.