5

I began work at a company 2 months ago as a PHP developer. I stepped in to somewhat of a kludge, but I've yet to find a company that isn't... The development stable is currently two developers (including myself) who will act as the interim CTO while the company seeks out a replacement CTO.

The company is a news site that runs on top of an inhouse WordPress theme with enhancements in the form of arbitrary plugins, features built into the actual theme, and plugins some built in-house and some 3rd party ((some whose core code has been modified, which renders upgrading a nightmare). No coding standards have been upheld in the creation of the WordPress code and it appears that it has been a number of developers managing the code and no two components are completed using the same methodology, which is beyond a huge mess when it comes to debugging. I am the "WordPress" developer. The other developer is in charge of the latest foray which is developing an e commerce platform to complement the news site, which will be run on top of Magento.

As the only WordPress developer I am handling all bugs and feature requests on a prioritized basis - I am interacting with business directly to hammer this out. The biggest issue I foresee is any bug/enhancement/project that is deemed a priority and requires a significant amount of work (read: 1 week+) becomes a bottleneck and essentially nothing can get worked on until I complete the project. They say that they understand that now but I foresee that becoming an issue when they actually see it in practice. I am looking towards the future and fully expect it to become a stressful situation (14+ hour days 7 days a week anyone?) - which is something I need to avoid at all costs.

Until we restaff a CTO or I am considering proposing that I write up coding standards for the WordPress development and utilize odesk or another outsourcing solution for handling feature requests - ensuring they conform to the standards set forth. In the proposed environment I will (a) manage the odesk developers (ensure I communicate exactly what is needed, ensure they are coding to proper standards) (b) handle any quick feature requests / bug fixes (c) begin refactoring the WordPress code so that it conforms to the aforementioned in-house coding standards - to get us to a manageable state. The company has used outsourcing solutions in the past, so I am confident that the idea of using one would not be an issue.

At this point I am only forumlating the plan to propose to management -- not yet thinking of HOW to do what I accomplish - I just want to get the full OK from them before doing that. What are your thoughts on this plan? Is there anything else that I should think about/consider? Thanks.

user801745
  • 167
  • 3

3 Answers3

4

If the code base is large as you seem to imply, you should freeze the development of new features, and take time documenting what you already have. Then do a first stab at the coding standards, trying to make sure that as much code as possible is compliant right away, at least in cases when you do not have a strong opinion one way or the other (tabs, spacing, naming conventions, and so on).

Since you are relatively new to the code, try fixing as many bugs as you can. If you do not have a bug database in place, create one, and catalog as many bugs as you can while going through the code. Also make sure that you put tests in place for the bugs that you fix, at least where it is practical (which should be "everywhere", at least in theory).

This will earn you a lot of points with the incoming CTO, and put you in a good spot when the time comes to grow your team.

Sergey Kalinichenko
  • 17,393
  • 4
  • 57
  • 73
  • 1
    I wish it were that easy - we're a small and growing company and I just don't see them saying - sure take 2 months to fix everything. What I may have to do is say - let's get a list of "greatest hits" that we can tackle over the next month and then freeze development. – user801745 Aug 27 '12 at 15:03
  • @user801745 Prioritizing is not your responsibility - ideally, your manager should set the priorities. You should give your management a list of things that you think you should do to mitigate the damage, complete with explanations of how it would affect the team in the medium-long term, and let them choose the things on which you work first. If there are features that your company must have, you'll have to do them, but knowing that an incoming CTO may change things around, you should do the absolute minimum of new things. – Sergey Kalinichenko Aug 27 '12 at 15:13
4

About 3 months ago I started working for a company in a similar situation. My bosses boss is supposed to be the IT Director and yet he has no IT experience. Basically the mode here is Urgent and Urgent which means there are no priorities.

My boss was working 60-70 hour weeks, nights, weekends, etc and then decided he could not do it anymore and that he needed some sanity for the management of projects.

He installed a simple project management tool (Redmine: http://www.redmine.org/) and started putting every urgent request into the system (this is critical!) and labeled them all Urgent.

Then he made sure the IT Director was 'following' all of the issues via automatic email - eventually the director started to realize that no single person or people could do everything that was being asked - by making the tasks visible and making the IT Director make the call on priorities things eventually got better.

Fast forward to a year later, I am here helping my boss out with projects and I still see the constant influx of Urgent requests which are promptly seen by the IT Director - then the director is having to handle the negotiations.

So that's management of tasks...

Regarding coding standards: that's a good idea but I would not do that now. I would put that in the system as a task that needs to be done and let the manager set the priority. Everytime there is an issue where standards would make a difference then I would trot out that task to the manager and point out how it would have helped.

This is not opinion but a current practice so there is validity at least in our situation for how things are handled.

Coding wise I would pick the low hanging fruit, make sure it's in the management tool (redmine or whatever) and make sure everyone knows the status and when it's done - show you are making a difference - that will give you some weight in terms of negotiations about future projects.

I would NOT refactor the wordpress code in one go but I would put together the top 10 refactoring tasks, add them to your task management system and let the manager set the priority. Trot them out when doing the refactorings would have saved some new pain that has erupted.

Sorry so long, I could go on for an hour!

Tab
  • 141
  • 3
1

Unit tests. Any section of code that looks unmaintainable should be thoroughly covered by unit tests so that you can confidently rewrite the underlying code without breaking anything. Once you have a handle on that, it will make refactoring the structure a lot easier.

jiggy
  • 1,590
  • 11
  • 15
  • Thanks, I haven't really broken down what I'd do - I'm still formulating the plan to present to management. – user801745 Aug 27 '12 at 14:50
  • 1
    I agree that unit tests are important but many times the code a dev inherits is not sustainable and therefore not testable. I have worked around a lot of test first devs and have yet to see testing succesfully implemented on non-refactored code. – Tab Aug 27 '12 at 15:45