|The Trees of Choice|
No Silver bullets
There are no silver bullets in technology. There is no single unifying technology or software or approach that will make your development three times faster and completely bug free, if someone claims that this I suggest you read about snake oil salesmen. There are technologies and approaches that are more appropriate in different circumstances for example if you are writing an application that allows other companies servers to connect to your servers and request data or do bank account validations, I would strongly recommend using web services for that. Also depending on your situation you might want to go with SOAP web services or use the RESTful style. That however does not mean that web services are automatically the best choice when it comes to servers speaking to each other, depending on your situation you might want to use FTP file drops or socket connections.
Solving Technology Choice Problems
Often the solution to a technology choice problem is clear, there is an approach or technology that is superior, you have done something similar a bunch of times and you know where the hidden traps are. You know the strengths and weaknesses of your approach and you know that for this problem they fit perfectly. That's great I would still recommend a minute or two of quiet contemplation to figure out if you are not missing something and if you are happy then get it done.
What happens when you encounter a new type of problem? As a side note, with technology and approaches changing so frequently I would suggest that you do this occasionally with problems you have solved dozens of times, this will just keep you on your toes and make sure your approach is _still_ the best one.
Four Step Choice Program
Make sure you truly understand the problem, this seems like an obvious step but generally people tend to skip over it because they are excited to get their hands dirty. Trust me I know the feeling. I would still suggest that you spend some time just thinking about the problem, understanding what's at your problems core. What are you required to do so that the problem goes away? Do you need security? High availability? A database?
Make sure you understand your constraints. There is a saying I have heard often, "Everything is possible given enough time and money". Unfortunately we rarely have enough time and _never_ enough money. In the real world we work with constraints, all the time. Only have java skills? This needed to be done two weeks ago? The servers will only arrive in three weeks? I tend to like constraints and that's why I think about them second. Understanding your constraints will save you a significant amount of time, because if I know that we only have java skills available for this task I won't bother looking at approaches that require C++. Why I like constraints is a topic for another time.
With your problem well defined and your constraints taken into account your next step is to do research. Even though your problem might feel unique I would suggest researching ways that other people have solved similar problems (and you should not have any issues finding similar problems since you did NOT skip step 1 and you truly understand the core of your problem).
After you have researched similar solutions to your problems I would suggest that you start planning how you are going to solve your problem. What approaches are you going to take? what technology stack does your problem need? How much coffee will be needed to implement? What infrastructure do you need?
Working in technology is awesome, there are so many problems to fix, so many different ways to do things you should never be bored, keep your ear to the ground pay attention to what people around you say and do. Most importantly keep learning, keep growing. There are still things I would like to write about on technology choices, I would also like to explore the steps above in greater details. However that will have to wait for another day.