你在做软件开发吗?
在启动项目前是否做好技术选型了呢?
在设计前是否已经理顺大体需求了呢?
在编码前是否已经反复思索过对应的设计呢?
在测试前是否已经准备好测试用例呢?
在部署交付前是否已经计划好具体的功能列表呢?
考虑过项目的性质吗?互联网应用,还是内部网应用。
弄清了项目规模大小吗?3人月可以搞定的小项目,还是需要几十人月的长期奋战?
确定团队的实力了吗?是全员光头新人,还是在某牛带领下的小马集团,还是经验丰富的水路两栖冲锋队?
如何与客户协同合作?瀑布式一次理清所有需求,还是需要分阶段迭代,或者直接进驻客户公司面对面开发?
是否要使用框架呢?还是选择最基本的jsp, jdbc应用。
编码与项目如何管理,使用版本控制工具?还是用U盘copy过来,copy过去?
如果选择版本控制工具,究竟哪一款才适合自己的情况?
系统如何划分层次?五层?三层?其他方式?
模块如何划分,按功能?按业务?混合分块?
开发如何分工,横向分工,各层之间接口对接?竖向划分每个人负责从前到后一整块。
如何测试?手工点点,还是使用自动化测试工具。
测试用例如何确定,如何提高测试的有效性。
测试的结果如何反馈给开发过程,需要使用excel还是issue跟踪系统?
测试过程中可以暴露并发,事务等隐性问题吗?
性能测试如何进行,压力指数应该保证到多少?
后期维护的方式的选择。
如何维护数据库表结构?每次exp整个数据库,到客户公司imp,还是找一个员工手工比对所有表结构,还是直接实现数据库版本化管理?
如何为系统打补丁?视图层的补丁,服务层的补丁,依赖库的补丁。如何管理,如何实施,如何测试?
系统是否拥有动态部署的能力?在系统升级的过程中是否可以减小出错的可能?
。。。。。。
还有很多,还有很多。有些问题可以通过技术解决,有些问题需要根据具体条件进行分析,有些需要尽力规避,有些需要硬着头皮强顶硬撑。
在考虑清楚这些问题可能带来的各种问题之前,让软件开发慢下来,至少慢一点点也是好的,进行下一步骤之前先了解如果出现了问题该如何应对,如何解决。